diff options
Diffstat (limited to 'data/vim/patches/8.1.0602')
-rw-r--r-- | data/vim/patches/8.1.0602 | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0602 b/data/vim/patches/8.1.0602 new file mode 100644 index 000000000..def89717a --- /dev/null +++ b/data/vim/patches/8.1.0602 @@ -0,0 +1,279 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0602 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0602 +Problem: DirChanged is also triggered when the directory didn't change. + (Daniel Hahler) +Solution: Compare the current with the new directory. (closes #3697) +Files: src/ex_docmd.c, src/testdir/test_autocmd.vim, src/misc2.c, + src/testdir/test_autochdir.vim + + +*** ../vim-8.1.0601/src/ex_docmd.c 2018-12-14 18:52:57.165528788 +0100 +--- src/ex_docmd.c 2018-12-16 15:29:11.614092524 +0100 +*************** +*** 9126,9133 **** + void + ex_cd(exarg_T *eap) + { +! char_u *new_dir; +! char_u *tofree; + + new_dir = eap->arg; + #if !defined(UNIX) && !defined(VMS) +--- 9126,9134 ---- + void + ex_cd(exarg_T *eap) + { +! char_u *new_dir; +! char_u *tofree; +! int dir_differs; + + new_dir = eap->arg; + #if !defined(UNIX) && !defined(VMS) +*************** +*** 9183,9189 **** + new_dir = NameBuff; + } + #endif +! if (new_dir == NULL || vim_chdir(new_dir)) + EMSG(_(e_failed)); + else + { +--- 9184,9192 ---- + new_dir = NameBuff; + } + #endif +! dir_differs = new_dir == NULL || prev_dir == NULL +! || STRCMP(prev_dir, new_dir) != 0; +! if (new_dir == NULL || (dir_differs && vim_chdir(new_dir))) + EMSG(_(e_failed)); + else + { +*************** +*** 9195,9203 **** + /* Echo the new current directory if the command was typed. */ + if (KeyTyped || p_verbose >= 5) + ex_pwd(eap); +! apply_autocmds(EVENT_DIRCHANGED, +! is_local_chdir ? (char_u *)"window" : (char_u *)"global", +! new_dir, FALSE, curbuf); + } + vim_free(tofree); + } +--- 9198,9208 ---- + /* Echo the new current directory if the command was typed. */ + if (KeyTyped || p_verbose >= 5) + ex_pwd(eap); +! +! if (dir_differs) +! apply_autocmds(EVENT_DIRCHANGED, +! is_local_chdir ? (char_u *)"window" : (char_u *)"global", +! new_dir, FALSE, curbuf); + } + vim_free(tofree); + } +*** ../vim-8.1.0601/src/testdir/test_autocmd.vim 2018-08-08 22:08:28.326846653 +0200 +--- src/testdir/test_autocmd.vim 2018-12-16 15:06:01.850719909 +0100 +*************** +*** 1205,1217 **** + augroup END + let s:li = [] + let s:dir_this = getcwd() +! let s:dir_other = s:dir_this . '/foo' +! call mkdir(s:dir_other) + endfunc + + function s:After_test_dirchanged() + exe 'cd' s:dir_this +! call delete(s:dir_other, 'd') + augroup test_dirchanged + autocmd! + augroup END +--- 1205,1220 ---- + augroup END + let s:li = [] + let s:dir_this = getcwd() +! let s:dir_foo = s:dir_this . '/foo' +! call mkdir(s:dir_foo) +! let s:dir_bar = s:dir_this . '/bar' +! call mkdir(s:dir_bar) + endfunc + + function s:After_test_dirchanged() + exe 'cd' s:dir_this +! call delete(s:dir_foo, 'd') +! call delete(s:dir_bar, 'd') + augroup test_dirchanged + autocmd! + augroup END +*************** +*** 1221,1230 **** + call s:Before_test_dirchanged() + autocmd test_dirchanged DirChanged global call add(s:li, "cd:") + autocmd test_dirchanged DirChanged global call add(s:li, expand("<afile>")) +! exe 'cd' s:dir_other +! call assert_equal(["cd:", s:dir_other], s:li) +! exe 'lcd' s:dir_other +! call assert_equal(["cd:", s:dir_other], s:li) + call s:After_test_dirchanged() + endfunc + +--- 1224,1235 ---- + call s:Before_test_dirchanged() + autocmd test_dirchanged DirChanged global call add(s:li, "cd:") + autocmd test_dirchanged DirChanged global call add(s:li, expand("<afile>")) +! exe 'cd' s:dir_foo +! call assert_equal(["cd:", s:dir_foo], s:li) +! exe 'cd' s:dir_foo +! call assert_equal(["cd:", s:dir_foo], s:li) +! exe 'lcd' s:dir_bar +! call assert_equal(["cd:", s:dir_foo], s:li) + call s:After_test_dirchanged() + endfunc + +*************** +*** 1232,1241 **** + call s:Before_test_dirchanged() + autocmd test_dirchanged DirChanged window call add(s:li, "lcd:") + autocmd test_dirchanged DirChanged window call add(s:li, expand("<afile>")) +! exe 'cd' s:dir_other + call assert_equal([], s:li) +! exe 'lcd' s:dir_other +! call assert_equal(["lcd:", s:dir_other], s:li) + call s:After_test_dirchanged() + endfunc + +--- 1237,1248 ---- + call s:Before_test_dirchanged() + autocmd test_dirchanged DirChanged window call add(s:li, "lcd:") + autocmd test_dirchanged DirChanged window call add(s:li, expand("<afile>")) +! exe 'cd' s:dir_foo + call assert_equal([], s:li) +! exe 'lcd' s:dir_bar +! call assert_equal(["lcd:", s:dir_bar], s:li) +! exe 'lcd' s:dir_bar +! call assert_equal(["lcd:", s:dir_bar], s:li) + call s:After_test_dirchanged() + endfunc + +*************** +*** 1250,1258 **** + set acd + exe 'cd ..' + call assert_equal([], s:li) +! exe 'edit ' . s:dir_other . '/Xfile' +! call assert_equal(s:dir_other, getcwd()) +! call assert_equal(["auto:", s:dir_other], s:li) + set noacd + bwipe! + call s:After_test_dirchanged() +--- 1257,1265 ---- + set acd + exe 'cd ..' + call assert_equal([], s:li) +! exe 'edit ' . s:dir_foo . '/Xfile' +! call assert_equal(s:dir_foo, getcwd()) +! call assert_equal(["auto:", s:dir_foo], s:li) + set noacd + bwipe! + call s:After_test_dirchanged() +*** ../vim-8.1.0601/src/misc2.c 2018-12-14 21:31:58.012319694 +0100 +--- src/misc2.c 2018-12-16 15:12:14.376386072 +0100 +*************** +*** 3390,3406 **** + * Return OK or FAIL. + */ + int +! vim_chdirfile(char_u *fname, char *trigger_autocmd UNUSED) + { +! char_u dir[MAXPATHL]; + int res; + +! vim_strncpy(dir, fname, MAXPATHL - 1); +! *gettail_sep(dir) = NUL; +! res = mch_chdir((char *)dir) == 0 ? OK : FAIL; +! if (res == OK && trigger_autocmd != NULL) +! apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd, +! dir, FALSE, curbuf); + return res; + } + #endif +--- 3390,3418 ---- + * Return OK or FAIL. + */ + int +! vim_chdirfile(char_u *fname, char *trigger_autocmd) + { +! char_u old_dir[MAXPATHL]; +! char_u new_dir[MAXPATHL]; + int res; + +! if (mch_dirname(old_dir, MAXPATHL) != OK) +! *old_dir = NUL; +! +! vim_strncpy(new_dir, fname, MAXPATHL - 1); +! *gettail_sep(new_dir) = NUL; +! +! if (STRCMP(old_dir, new_dir) == 0) +! // nothing to do +! res = OK; +! else +! { +! res = mch_chdir((char *)new_dir) == 0 ? OK : FAIL; +! +! if (res == OK && trigger_autocmd != NULL) +! apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd, +! new_dir, FALSE, curbuf); +! } + return res; + } + #endif +*** ../vim-8.1.0601/src/testdir/test_autochdir.vim 2017-10-27 00:47:53.000000000 +0200 +--- src/testdir/test_autochdir.vim 2018-12-16 15:21:27.396965776 +0100 +*************** +*** 8,18 **** +--- 8,26 ---- + let cwd = getcwd() + call test_autochdir() + set acd ++ ++ let s:li = [] ++ autocmd DirChanged auto call add(s:li, "autocd") ++ autocmd DirChanged auto call add(s:li, expand("<afile>")) ++ + new + w samples/Xtest + call assert_equal("Xtest", expand('%')) + call assert_equal("samples", substitute(getcwd(), '.*/\(\k*\)', '\1', '')) ++ call assert_equal(["autocd", getcwd()], s:li) ++ + bwipe! ++ au! DirChanged + set noacd + exe 'cd ' . cwd + call delete('samples/Xtest') +*** ../vim-8.1.0601/src/version.c 2018-12-16 14:37:35.845271247 +0100 +--- src/version.c 2018-12-16 15:37:07.343129132 +0100 +*************** +*** 801,802 **** +--- 801,804 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 602, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +26. You check your mail. It says "no new messages." So you check it again. + + /// 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 /// |