diff options
-rw-r--r-- | src/normal.c | 7 | ||||
-rw-r--r-- | src/proto/undo.pro | 1 | ||||
-rw-r--r-- | src/testdir/test_normal.vim | 12 | ||||
-rw-r--r-- | src/undo.c | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
5 files changed, 34 insertions, 1 deletions
diff --git a/src/normal.c b/src/normal.c index 477907520..f99c7e3ec 100644 --- 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. */ diff --git a/src/proto/undo.pro b/src/proto/undo.pro index 1052d40c2..f2190bfea 100644 --- 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); diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index 1224a3f7d..4c63bb8ab 100644 --- 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 diff --git a/src/undo.c b/src/undo.c index b2d1d9f11..4fd58a332 100644 --- 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 diff --git a/src/version.c b/src/version.c index d5e8c8b59..f0da22a48 100644 --- 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, |