vim-patch:8.2.2036: buffer messed up if creating the quickfix window fails (#13365)

Problem:    Current buffer is messed up if creating a new buffer for the
            quickfix window fails.
Solution:   Check that creating the buffer succeeds. (closes vim/vim#7352)
9e40c4b15e
This commit is contained in:
Jan Edmund Lazo 2020-11-24 09:12:58 -05:00 committed by GitHub
parent 71d4f5851f
commit 7e0e0782a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 3 deletions

View File

@ -3608,11 +3608,15 @@ static int qf_open_new_cwindow(qf_info_T *qi, int height)
}
if (qf_buf != NULL) {
// Use the existing quickfix buffer
(void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
ECMD_HIDE + ECMD_OLDBUF, oldwin);
if (do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE,
ECMD_HIDE + ECMD_OLDBUF, oldwin) == FAIL) {
return FAIL;
}
} else {
// Create a new quickfix buffer
(void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin);
if (do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, oldwin) == FAIL) {
return FAIL;
}
}
// Set the options for the quickfix buffer/window (if not already done)

View File

@ -4423,4 +4423,39 @@ func Test_add_invalid_entry_with_qf_window()
cclose
endfunc
" Test for very weird problem: autocommand causes a failure, resulting opening
" the quickfix window to fail. This still splits the window, but otherwise
" should not mess up buffers.
func Test_quickfix_window_fails_to_open()
CheckScreendump
let lines =<< trim END
anything
try
anything
endtry
END
call writefile(lines, 'XquickfixFails')
let lines =<< trim END
split XquickfixFails
silent vimgrep anything %
normal o
au BufLeave * ++once source XquickfixFails
" This will trigger the autocommand, which causes an error, what follows
" is aborted but the window was already split.
silent! cwindow
END
call writefile(lines, 'XtestWinFails')
let buf = RunVimInTerminal('-S XtestWinFails', #{rows: 13})
call VerifyScreenDump(buf, 'Test_quickfix_window_fails', {})
" clean up
call term_sendkeys(buf, ":bwipe!\<CR>")
call term_wait(buf)
call StopVimInTerminal(buf)
call delete('XtestWinFails')
call delete('XquickfixFails')
endfunc
" vim: shiftwidth=2 sts=2 expandtab