summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0602
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0602')
-rw-r--r--data/vim/patches/8.1.0602279
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 ///