changeset 9349:b24900b73f90 v7.4.1956

commit https://github.com/vim/vim/commit/5d2ca0402954ff79b73d9c86cc16c8a6454b75a7 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jun 26 17:11:21 2016 +0200 patch 7.4.1956 Problem: When using CTRL-W f and pressing "q" at the ATTENTION dialog the newly opened window is not closed. Solution: Close the window and go back to the original one. (Norio Takagi, Hirohito Higashi)
author Christian Brabandt <cb@256bit.org>
date Sun, 26 Jun 2016 17:15:04 +0200
parents fc80cc404acc
children 11c29e483829
files src/testdir/test_window_cmd.vim src/version.c src/window.c
diffstat 3 files changed, 46 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -34,4 +34,37 @@ func Test_window_cmd_cmdwin_with_vsp()
   set ls&vim
 endfunc
 
+function Test_window_cmd_wincmd_gf()
+  let fname = 'test_gf.txt'
+  let swp_fname = '.' . fname . '.swp'
+  call writefile([], fname)
+  call writefile([], swp_fname)
+  function s:swap_exists()
+    let v:swapchoice = s:swap_choice
+  endfunc
+  augroup test_window_cmd_wincmd_gf
+    autocmd!
+    exec "autocmd SwapExists " . fname . " call s:swap_exists()"
+  augroup END
+
+  call setline(1, fname)
+  " (E)dit anyway
+  let s:swap_choice = 'e'
+  wincmd gf
+  call assert_equal(2, tabpagenr())
+  call assert_equal(fname, bufname("%"))
+  quit!
+
+  " (Q)uit
+  let s:swap_choice = 'q'
+  wincmd gf
+  call assert_equal(1, tabpagenr())
+  call assert_notequal(fname, bufname("%"))
+  new | only!
+
+  call delete(fname)
+  call delete(swp_fname)
+  augroup! test_window_cmd_wincmd_gf
+endfunc
+
 " vim: sw=2 et
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1956,
+/**/
     1955,
 /**/
     1954,
--- a/src/window.c
+++ b/src/window.c
@@ -475,6 +475,8 @@ wingotofile:
 		ptr = grab_file_name(Prenum1, &lnum);
 		if (ptr != NULL)
 		{
+		    tabpage_T	*oldtab = curtab;
+		    win_T	*oldwin = curwin;
 # ifdef FEAT_GUI
 		    need_mouse_correct = TRUE;
 # endif
@@ -482,9 +484,15 @@ wingotofile:
 		    if (win_split(0, 0) == OK)
 		    {
 			RESET_BINDING(curwin);
-			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
-							   ECMD_HIDE, NULL);
-			if (nchar == 'F' && lnum >= 0)
+			if (do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
+						   ECMD_HIDE, NULL) == FAIL)
+			{
+			    /* Failed to open the file, close the window
+			     * opened for it. */
+			    win_close(curwin, FALSE);
+			    goto_tabpage_win(oldtab, oldwin);
+			}
+			else if (nchar == 'F' && lnum >= 0)
 			{
 			    curwin->w_cursor.lnum = lnum;
 			    check_cursor_lnum();