summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2007-09-30 12:02:55 +0000
committervimboss <devnull@localhost>2007-09-30 12:02:55 +0000
commitc2b212febb39a0ea0491c0f7bbc5cf52436cad87 (patch)
treea39eb1ed68513118c3e25482af67b556dbec02e0
parent3733a3921fb7207ecae0ef918c333f58840ce45c (diff)
downloadvim-c2b212febb39a0ea0491c0f7bbc5cf52436cad87.tar.gz
updated for version 7.1-126v7.1.126v7-1-126
-rw-r--r--src/buffer.c9
-rw-r--r--src/ex_docmd.c3
-rw-r--r--src/fileio.c23
-rw-r--r--src/gui_gtk.c13
-rw-r--r--src/gui_w48.c12
-rw-r--r--src/proto/ex_docmd.pro1
-rw-r--r--src/proto/fileio.pro1
-rw-r--r--src/quickfix.c53
-rw-r--r--src/version.c2
9 files changed, 81 insertions, 36 deletions
diff --git a/src/buffer.c b/src/buffer.c
index c29fb236..9f4c3deb 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4261,12 +4261,12 @@ alist_name(aep)
do_arg_all(count, forceit, keep_tabs)
int count;
int forceit; /* hide buffers in current windows */
- int keep_tabs; /* keep curren tabs, for ":tab drop file" */
+ int keep_tabs; /* keep current tabs, for ":tab drop file" */
{
int i;
win_T *wp, *wpnext;
char_u *opened; /* array of flags for which args are open */
- int opened_len; /* lenght of opened[] */
+ int opened_len; /* length of opened[] */
int use_firstwin = FALSE; /* use first window for arglist */
int split_ret = OK;
int p_ea_save;
@@ -4946,10 +4946,7 @@ read_viminfo_bufferlist(virp, writing)
/* Expand "~/" in the file name at "line + 1" to a full path.
* Then try shortening it by comparing with the current directory */
expand_env(xline, NameBuff, MAXPATHL);
- mch_dirname(IObuff, IOSIZE);
- sfname = shorten_fname(NameBuff, IObuff);
- if (sfname == NULL)
- sfname = NameBuff;
+ sfname = shorten_fname1(NameBuff);
buf = buflist_new(NameBuff, sfname, (linenr_T)0, BLN_LISTED);
if (buf != NULL) /* just in case... */
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 3b874e79..72b939bd 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -276,7 +276,6 @@ static void ex_popup __ARGS((exarg_T *eap));
static void ex_swapname __ARGS((exarg_T *eap));
static void ex_syncbind __ARGS((exarg_T *eap));
static void ex_read __ARGS((exarg_T *eap));
-static void ex_cd __ARGS((exarg_T *eap));
static void ex_pwd __ARGS((exarg_T *eap));
static void ex_equal __ARGS((exarg_T *eap));
static void ex_sleep __ARGS((exarg_T *eap));
@@ -7778,7 +7777,7 @@ free_cd_dir()
/*
* ":cd", ":lcd", ":chdir" and ":lchdir".
*/
- static void
+ void
ex_cd(eap)
exarg_T *eap;
{
diff --git a/src/fileio.c b/src/fileio.c
index 84416df0..39b42263 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -114,7 +114,7 @@ struct bw_info
{
int bw_fd; /* file descriptor */
char_u *bw_buf; /* buffer with data to be written */
- int bw_len; /* lenght of data */
+ int bw_len; /* length of data */
#ifdef HAS_BW_FLAGS
int bw_flags; /* FIO_ flags */
#endif
@@ -5556,6 +5556,27 @@ make_bom(buf, name)
/*
* Try to find a shortname by comparing the fullname with the current
* directory.
+ * Returns "full_path" or pointer into "full_path" if shortened.
+ */
+ char_u *
+shorten_fname1(full_path)
+ char_u *full_path;
+{
+ char_u dirname[MAXPATHL];
+ char_u *p = full_path;
+
+ if (mch_dirname(dirname, MAXPATHL) == OK)
+ {
+ p = shorten_fname(full_path, dirname);
+ if (p == NULL || *p == NUL)
+ p = full_path;
+ }
+ return p;
+}
+
+/*
+ * Try to find a shortname by comparing the fullname with the current
+ * directory.
* Returns NULL if not shorter name possible, pointer into "full_path"
* otherwise.
*/
diff --git a/src/gui_gtk.c b/src/gui_gtk.c
index cfba5c76..740d4a04 100644
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -1272,7 +1272,6 @@ gui_mch_browse(int saving,
GtkWidget *fc;
#endif
char_u dirbuf[MAXPATHL];
- char_u *p;
# ifdef HAVE_GTK2
title = CONVERT_TO_UTF8(title);
@@ -1363,11 +1362,7 @@ gui_mch_browse(int saving,
return NULL;
/* shorten the file name if possible */
- mch_dirname(dirbuf, MAXPATHL);
- p = shorten_fname(gui.browse_fname, dirbuf);
- if (p == NULL)
- p = gui.browse_fname;
- return vim_strsave(p);
+ return vim_strsave(shorten_fname1(gui.browse_fname));
}
#if defined(HAVE_GTK2) || defined(PROTO)
@@ -1427,11 +1422,7 @@ gui_mch_browsedir(
return NULL;
/* shorten the file name if possible */
- mch_dirname(dirbuf, MAXPATHL);
- p = shorten_fname(dirname, dirbuf);
- if (p == NULL || *p == NUL)
- p = dirname;
- p = vim_strsave(p);
+ p = vim_strsave(shorten_fname1(dirname));
g_free(dirname);
return p;
diff --git a/src/gui_w48.c b/src/gui_w48.c
index f0739263..cfbbbc00 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -3301,11 +3301,7 @@ gui_mch_browseW(
SetFocus(s_hwnd);
/* Shorten the file name if possible */
- mch_dirname(IObuff, IOSIZE);
- p = shorten_fname((char_u *)fileBuf, IObuff);
- if (p == NULL)
- p = (char_u *)fileBuf;
- return vim_strsave(p);
+ return vim_strsave(shorten_fname1((char_u *)fileBuf));
}
# endif /* FEAT_MBYTE */
@@ -3450,11 +3446,7 @@ gui_mch_browse(
SetFocus(s_hwnd);
/* Shorten the file name if possible */
- mch_dirname(IObuff, IOSIZE);
- p = shorten_fname((char_u *)fileBuf, IObuff);
- if (p == NULL)
- p = (char_u *)fileBuf;
- return vim_strsave(p);
+ return vim_strsave(shorten_fname1((char_u *)fileBuf));
}
#endif /* FEAT_BROWSE */
diff --git a/src/proto/ex_docmd.pro b/src/proto/ex_docmd.pro
index 899c68e4..22a0f103 100644
--- a/src/proto/ex_docmd.pro
+++ b/src/proto/ex_docmd.pro
@@ -39,6 +39,7 @@ void ex_splitview __ARGS((exarg_T *eap));
void tabpage_new __ARGS((void));
void do_exedit __ARGS((exarg_T *eap, win_T *old_curwin));
void free_cd_dir __ARGS((void));
+void ex_cd __ARGS((exarg_T *eap));
void do_sleep __ARGS((long msec));
int vim_mkdir_emsg __ARGS((char_u *name, int prot));
FILE *open_exfile __ARGS((char_u *fname, int forceit, char *mode));
diff --git a/src/proto/fileio.pro b/src/proto/fileio.pro
index fd7a04f6..e5a1b284 100644
--- a/src/proto/fileio.pro
+++ b/src/proto/fileio.pro
@@ -6,6 +6,7 @@ int check_file_readonly __ARGS((char_u *fname, int perm));
int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering));
void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
void msg_add_lines __ARGS((int insert_space, long lnum, long nchars));
+char_u *shorten_fname1 __ARGS((char_u *full_path));
char_u *shorten_fname __ARGS((char_u *full_path, char_u *dir_name));
void shorten_fnames __ARGS((int force));
void shorten_filenames __ARGS((char_u **fnames, int count));
diff --git a/src/quickfix.c b/src/quickfix.c
index c3cee13a..32c6cd08 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2972,6 +2972,7 @@ ex_vimgrep(eap)
regmmatch_T regmatch;
int fcount;
char_u **fnames;
+ char_u *fname;
char_u *s;
char_u *p;
int fi;
@@ -2995,6 +2996,9 @@ ex_vimgrep(eap)
int flags = 0;
colnr_T col;
long tomatch;
+ char_u dirname_start[MAXPATHL];
+ char_u dirname_now[MAXPATHL];
+ char_u *target_dir = NULL;
switch (eap->cmdidx)
{
@@ -3069,17 +3073,23 @@ ex_vimgrep(eap)
goto theend;
}
+ /* Remember the current directory, because a BufRead autocommand that does
+ * ":lcd %:p:h" changes the meaning of short path names. */
+ mch_dirname(dirname_start, MAXPATHL);
+
seconds = (time_t)0;
for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
{
+ fname = shorten_fname1(fnames[fi]);
if (time(NULL) > seconds)
{
- /* Display the file name every second or so. */
+ /* Display the file name every second or so, show the user we are
+ * working on it. */
seconds = time(NULL);
msg_start();
- p = msg_strtrunc(fnames[fi], TRUE);
+ p = msg_strtrunc(fname, TRUE);
if (p == NULL)
- msg_outtrans(fnames[fi]);
+ msg_outtrans(fname);
else
{
msg_outtrans(p);
@@ -3111,7 +3121,19 @@ ex_vimgrep(eap)
/* Load file into a buffer, so that 'fileencoding' is detected,
* autocommands applied, etc. */
- buf = load_dummy_buffer(fnames[fi]);
+ buf = load_dummy_buffer(fname);
+
+ /* When autocommands changed directory: go back. We assume it was
+ * ":lcd %:p:h". */
+ mch_dirname(dirname_now, MAXPATHL);
+ if (STRCMP(dirname_start, dirname_now) != 0)
+ {
+ exarg_T ea;
+
+ ea.arg = dirname_start;
+ ea.cmdidx = CMD_lcd;
+ ex_cd(&ea);
+ }
p_mls = save_mls;
#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
@@ -3125,7 +3147,7 @@ ex_vimgrep(eap)
if (buf == NULL)
{
if (!got_int)
- smsg((char_u *)_("Cannot open file \"%s\""), fnames[fi]);
+ smsg((char_u *)_("Cannot open file \"%s\""), fname);
}
else
{
@@ -3139,9 +3161,10 @@ ex_vimgrep(eap)
while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
col) > 0)
{
+ ;
if (qf_add_entry(qi, &prevp,
NULL, /* dir */
- fnames[fi],
+ fname,
0,
ml_get_buf(buf,
regmatch.startpos[0].lnum + lnum, FALSE),
@@ -3209,6 +3232,13 @@ ex_vimgrep(eap)
if (buf != NULL)
{
+ /* If the buffer is still loaded we need to use the
+ * directory we jumped to below. */
+ if (buf == first_match_buf
+ && target_dir == NULL
+ && STRCMP(dirname_start, dirname_now) != 0)
+ target_dir = vim_strsave(dirname_now);
+
/* The buffer is still loaded, the Filetype autocommands
* need to be done now, in that buffer. And the modelines
* need to be done (again). But not the window-local
@@ -3252,6 +3282,16 @@ ex_vimgrep(eap)
/* If we jumped to another buffer redrawing will already be
* taken care of. */
redraw_for_dummy = FALSE;
+
+ /* Jump to the directory used after loading the buffer. */
+ if (curbuf == first_match_buf && target_dir != NULL)
+ {
+ exarg_T ea;
+
+ ea.arg = target_dir;
+ ea.cmdidx = CMD_lcd;
+ ex_cd(&ea);
+ }
}
}
else
@@ -3269,6 +3309,7 @@ ex_vimgrep(eap)
}
theend:
+ vim_free(target_dir);
vim_free(regmatch.regprog);
}
diff --git a/src/version.c b/src/version.c
index eef1e886..6714a920 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 126,
+/**/
125,
/**/
124,