summaryrefslogtreecommitdiffstats
path: root/src/ex_docmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r--src/ex_docmd.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a0a7183366..430ca2ccb4 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5957,10 +5957,11 @@ ex_cquit(exarg_T *eap UNUSED)
}
/*
- * ":qall": try to quit all windows
+ * Do preparations for "qall" and "wqall".
+ * Returns FAIL when quitting should be aborted.
*/
- static void
-ex_quit_all(exarg_T *eap)
+ int
+before_quit_all(exarg_T *eap)
{
if (cmdwin_type != 0)
{
@@ -5968,19 +5969,30 @@ ex_quit_all(exarg_T *eap)
cmdwin_result = K_XF1; // ex_window() takes care of this
else
cmdwin_result = K_XF2;
- return;
+ return FAIL;
}
// Don't quit while editing the command line.
if (text_locked())
{
text_locked_msg();
- return;
+ return FAIL;
}
if (before_quit_autocmds(curwin, TRUE, eap->forceit))
- return;
+ return FAIL;
+ return OK;
+}
+
+/*
+ * ":qall": try to quit all windows
+ */
+ static void
+ex_quit_all(exarg_T *eap)
+{
+ if (before_quit_all(eap) == FAIL)
+ return;
exiting = TRUE;
if (eap->forceit || !check_changed_any(FALSE, FALSE))
getout(0);