0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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)
This commit is contained in:
Bram Moolenaar 2016-06-26 17:11:21 +02:00
parent f4fba6dcd5
commit 5d2ca04029
3 changed files with 46 additions and 3 deletions

View 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

View File

@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1956,
/**/
1955,
/**/

View 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();