diff --git a/7.4.689 b/7.4.689 new file mode 100644 index 0000000..a4fbbfb --- /dev/null +++ b/7.4.689 @@ -0,0 +1,157 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.689 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.689 +Problem: On MS-Windows, when 'autochdir' is set, diff mode with files in + different directories does not work. (Axel Bender) +Solution: Remember the current directory and use it where needed. (Christian + Brabandt) +Files: src/main.c + + +*** ../vim-7.4.688/src/main.c 2015-03-24 16:48:16.969934944 +0100 +--- src/main.c 2015-04-03 14:52:48.011422200 +0200 +*************** +*** 110,116 **** + static void read_stdin __ARGS((void)); + static void create_windows __ARGS((mparm_T *parmp)); + # ifdef FEAT_WINDOWS +! static void edit_buffers __ARGS((mparm_T *parmp)); + # endif + static void exe_pre_commands __ARGS((mparm_T *parmp)); + static void exe_commands __ARGS((mparm_T *parmp)); +--- 110,116 ---- + static void read_stdin __ARGS((void)); + static void create_windows __ARGS((mparm_T *parmp)); + # ifdef FEAT_WINDOWS +! static void edit_buffers __ARGS((mparm_T *parmp, char_u *cwd)); + # endif + static void exe_pre_commands __ARGS((mparm_T *parmp)); + static void exe_commands __ARGS((mparm_T *parmp)); +*************** +*** 168,173 **** +--- 168,174 ---- + char_u *fname = NULL; /* file name from command line */ + mparm_T params; /* various parameters passed between + * main() and other functions. */ ++ char_u *cwd = NULL; /* current workding dir on startup */ + #ifdef STARTUPTIME + int i; + #endif +*************** +*** 404,415 **** +--- 405,421 ---- + */ + if (!params.literal) + { ++ cwd = alloc(MAXPATHL); ++ if (cwd != NULL) ++ mch_dirname(cwd, MAXPATHL); + /* Temporarily add '(' and ')' to 'isfname'. These are valid + * filename characters but are excluded from 'isfname' to make + * "gf" work on a file name in parenthesis (e.g.: see vim.h). */ + do_cmdline_cmd((char_u *)":set isf+=(,)"); + alist_expand(NULL, 0); + do_cmdline_cmd((char_u *)":set isf&"); ++ if (cwd != NULL) ++ mch_chdir((char *)cwd); + } + #endif + fname = alist_name(&GARGLIST[0]); +*************** +*** 435,440 **** +--- 441,448 ---- + * If the cd fails, it doesn't matter. + */ + (void)vim_chdirfile(fname); ++ if (cwd != NULL) ++ mch_dirnamem(cwd, MAXPATHL); + } + #endif + TIME_MSG("expanding arguments"); +*************** +*** 488,493 **** +--- 496,503 ---- + expand_env((char_u *)"$HOME", NameBuff, MAXPATHL); + vim_chdir(NameBuff); + } ++ if (cwd != NULL) ++ mch_dirname(cwd, MAXPATHL); + } + } + #endif +*************** +*** 900,907 **** + * If opened more than one window, start editing files in the other + * windows. + */ +! edit_buffers(¶ms); + #endif + + #ifdef FEAT_DIFF + if (params.diff_mode) +--- 910,918 ---- + * If opened more than one window, start editing files in the other + * windows. + */ +! edit_buffers(¶ms, cwd); + #endif ++ vim_free(cwd); + + #ifdef FEAT_DIFF + if (params.diff_mode) +*************** +*** 2730,2737 **** + * windows. make_windows() has already opened the windows. + */ + static void +! edit_buffers(parmp) + mparm_T *parmp; + { + int arg_idx; /* index in argument list */ + int i; +--- 2741,2749 ---- + * windows. make_windows() has already opened the windows. + */ + static void +! edit_buffers(parmp, cwd) + mparm_T *parmp; ++ char_u *cwd; /* current working dir */ + { + int arg_idx; /* index in argument list */ + int i; +*************** +*** 2756,2761 **** +--- 2768,2775 ---- + arg_idx = 1; + for (i = 1; i < parmp->window_count; ++i) + { ++ if (cwd != NULL) ++ mch_chdir((char *)cwd); + /* When w_arg_idx is -1 remove the window (see create_windows()). */ + if (curwin->w_arg_idx == -1) + { +*** ../vim-7.4.688/src/version.c 2015-03-31 19:17:55.620054448 +0200 +--- src/version.c 2015-04-03 14:51:43.680122220 +0200 +*************** +*** 743,744 **** +--- 743,746 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 689, + /**/ + +-- +Violators can be fined, arrested or jailed for making ugly faces at a dog. + [real standing law in Oklahoma, United States of America] + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///