mirror of
https://github.com/neovim/neovim.git
synced 2025-09-19 09:48:19 +00:00
Merge #8953 from janlazo/vim-8.0.1190
This commit is contained in:
@@ -5964,9 +5964,35 @@ void not_exiting(void)
|
||||
exiting = FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* ":quit": quit current window, quit Vim if the last window is closed.
|
||||
*/
|
||||
static bool before_quit_autocmds(win_T *wp, bool quit_all, int forceit)
|
||||
{
|
||||
apply_autocmds(EVENT_QUITPRE, NULL, NULL, false, wp->w_buffer);
|
||||
|
||||
// Bail out when autocommands closed the window.
|
||||
// Refuse to quit when the buffer in the last window is being closed (can
|
||||
// only happen in autocommands).
|
||||
if (!win_valid(wp)
|
||||
|| curbuf_locked()
|
||||
|| (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (quit_all
|
||||
|| (check_more(false, forceit) == OK && only_one_window())) {
|
||||
apply_autocmds(EVENT_EXITPRE, NULL, NULL, false, curbuf);
|
||||
// Refuse to quit when locked or when the buffer in the last window is
|
||||
// being closed (can only happen in autocommands).
|
||||
if (curbuf_locked()
|
||||
|| (curbuf->b_nwindows == 1 && curbuf->b_locked > 0)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// ":quit": quit current window, quit Vim if the last window is closed.
|
||||
// ":{nr}quit": quit window {nr}
|
||||
static void ex_quit(exarg_T *eap)
|
||||
{
|
||||
if (cmdwin_type != 0) {
|
||||
@@ -5996,11 +6022,9 @@ static void ex_quit(exarg_T *eap)
|
||||
if (curbuf_locked()) {
|
||||
return;
|
||||
}
|
||||
apply_autocmds(EVENT_QUITPRE, NULL, NULL, false, wp->w_buffer);
|
||||
// Refuse to quit when locked or when the buffer in the last window is
|
||||
// being closed (can only happen in autocommands).
|
||||
if (!win_valid(wp)
|
||||
|| (wp->w_buffer->b_nwindows == 1 && wp->w_buffer->b_locked > 0)) {
|
||||
|
||||
// Trigger QuitPre and maybe ExitPre
|
||||
if (before_quit_autocmds(wp, false, eap->forceit)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6025,6 +6049,7 @@ static void ex_quit(exarg_T *eap)
|
||||
if (only_one_window() && (ONE_WINDOW || eap->addr_count == 0)) {
|
||||
getout(0);
|
||||
}
|
||||
not_exiting();
|
||||
// close window; may free buffer
|
||||
win_close(wp, !buf_hide(wp->w_buffer) || eap->forceit);
|
||||
}
|
||||
@@ -6057,10 +6082,8 @@ static void ex_quit_all(exarg_T *eap)
|
||||
text_locked_msg();
|
||||
return;
|
||||
}
|
||||
apply_autocmds(EVENT_QUITPRE, NULL, NULL, false, curbuf);
|
||||
// Refuse to quit when locked or when the buffer in the last window is
|
||||
// being closed (can only happen in autocommands).
|
||||
if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_locked > 0)) {
|
||||
|
||||
if (before_quit_autocmds(curwin, true, eap->forceit)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6346,9 +6369,7 @@ static void ex_stop(exarg_T *eap)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* ":exit", ":xit" and ":wq": Write file and exit Vim.
|
||||
*/
|
||||
// ":exit", ":xit" and ":wq": Write file and quite the current window.
|
||||
static void ex_exit(exarg_T *eap)
|
||||
{
|
||||
if (cmdwin_type != 0) {
|
||||
@@ -6360,10 +6381,8 @@ static void ex_exit(exarg_T *eap)
|
||||
text_locked_msg();
|
||||
return;
|
||||
}
|
||||
apply_autocmds(EVENT_QUITPRE, NULL, NULL, false, curbuf);
|
||||
// Refuse to quit when locked or when the buffer in the last window is
|
||||
// being closed (can only happen in autocommands).
|
||||
if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_locked > 0)) {
|
||||
|
||||
if (before_quit_autocmds(curwin, false, eap->forceit)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6382,6 +6401,7 @@ static void ex_exit(exarg_T *eap)
|
||||
// quit last window, exit Vim
|
||||
getout(0);
|
||||
}
|
||||
not_exiting();
|
||||
// Quit current window, may free the buffer.
|
||||
win_close(curwin, !buf_hide(curwin->w_buffer));
|
||||
}
|
||||
|
Reference in New Issue
Block a user