changeset 16089:4411c38f3d16 v8.1.1049

patch 8.1.1049: when user tries to exit with CTRL-C message is confusing commit https://github.com/vim/vim/commit/a84a3dd6635fcd2e07f510cba6a999585dcc381a Author: Bram Moolenaar <Bram@vim.org> Date: Mon Mar 25 22:21:24 2019 +0100 patch 8.1.1049: when user tries to exit with CTRL-C message is confusing Problem: When user tries to exit with CTRL-C message is confusing. Solution: Only mention ":qa!" when there is a changed buffer. (closes https://github.com/vim/vim/issues/4163)
author Bram Moolenaar <Bram@vim.org>
date Mon, 25 Mar 2019 22:30:05 +0100
parents 5dd54a14decf
children 968fefb28be4
files src/normal.c src/proto/undo.pro src/testdir/test_normal.vim src/undo.c src/version.c
diffstat 5 files changed, 34 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/normal.c
+++ b/src/normal.c
@@ -8886,7 +8886,12 @@ nv_esc(cmdarg_T *cap)
 #endif
 		&& !VIsual_active
 		&& no_reason)
-	    msg(_("Type  :qa!  and press <Enter> to abandon all changes and exit Vim"));
+	{
+	    if (anyBufIsChanged())
+		msg(_("Type  :qa!  and press <Enter> to abandon all changes and exit Vim"));
+	    else
+		msg(_("Type  :qa  and press <Enter> to exit Vim"));
+	}
 
 	/* Don't reset "restart_edit" when 'insertmode' is set, it won't be
 	 * set again below when halfway a mapping. */
--- a/src/proto/undo.pro
+++ b/src/proto/undo.pro
@@ -25,6 +25,7 @@ void u_clearline(void);
 void u_undoline(void);
 void u_blockfree(buf_T *buf);
 int bufIsChanged(buf_T *buf);
+int anyBufIsChanged(void);
 int bufIsChangedNotTerm(buf_T *buf);
 int curbufIsChanged(void);
 void u_eval_tree(u_header_T *first_uhp, list_T *list);
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -1,5 +1,7 @@
 " Test for various Normal mode commands
 
+source shared.vim
+
 func Setup_NewWindow()
   10new
   call setline(1, range(1,100))
@@ -2542,3 +2544,13 @@ func Test_nv_hat_count()
 
   %bwipeout!
 endfunc
+
+func Test_message_when_using_ctrl_c()
+  exe "normal \<C-C>"
+  call assert_match("Type  :qa  and press <Enter> to exit Vim", Screenline(&lines))
+  new
+  cal setline(1, 'hi!')
+  exe "normal \<C-C>"
+  call assert_match("Type  :qa!  and press <Enter> to abandon all changes and exit Vim", Screenline(&lines))
+  bwipe!
+endfunc
--- a/src/undo.c
+++ b/src/undo.c
@@ -3531,6 +3531,19 @@ bufIsChanged(buf_T *buf)
 }
 
 /*
+ * Return TRUE if any buffer has changes.  Also buffers that are not written.
+ */
+    int
+anyBufIsChanged(void)
+{
+    buf_T *buf;
+
+    FOR_ALL_BUFFERS(buf)
+	if (bufIsChanged(buf))
+	    return TRUE;
+}
+
+/*
  * Like bufIsChanged() but ignoring a terminal window.
  */
     int
--- a/src/version.c
+++ b/src/version.c
@@ -776,6 +776,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1049,
+/**/
     1048,
 /**/
     1047,