]> granicus.if.org Git - vim/commitdiff
patch 7.4.1956 v7.4.1956
authorBram Moolenaar <Bram@vim.org>
Sun, 26 Jun 2016 15:11:21 +0000 (17:11 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 26 Jun 2016 15:11:21 +0000 (17:11 +0200)
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)

src/testdir/test_window_cmd.vim
src/version.c
src/window.c

index d2e42720d27f214b53aecfe17d480ad8a3c8b0e6..b7f41a711b0339492f48c0b4a904a83a830b62d1 100644 (file)
@@ -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
index 2df5c361433d99f91fa6b8f677582fb41c99a8d1..5e224e81b16377274b8956c638d8570311219af0 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1956,
 /**/
     1955,
 /**/
index 2dc255467262c2001329329deeb44ca0b8592cab..c3cd7a233906878a967ca4908936fcca4a625007 100644 (file)
@@ -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();