summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2007-08-10 19:33:47 +0000
committervimboss <devnull@localhost>2007-08-10 19:33:47 +0000
commit059b59094e62ed61a73b66f06701a7f3d815545d (patch)
treeb0ac5d0b1157b13563db61c3c19cd1943ae82897
parent7b9f402f3d93f4f3d476ad3b1c5a6f751f634964 (diff)
downloadvim-059b59094e62ed61a73b66f06701a7f3d815545d.tar.gz
updated for version 7.1-059v7.1.059v7-1-059
-rw-r--r--src/main.c31
-rw-r--r--src/version.c2
2 files changed, 28 insertions, 5 deletions
diff --git a/src/main.c b/src/main.c
index fdfc2b82..7d553f15 100644
--- a/src/main.c
+++ b/src/main.c
@@ -954,7 +954,8 @@ main_loop(cmdwin, noexmode)
int cmdwin; /* TRUE when working in the command-line window */
int noexmode; /* TRUE when return on entering Ex mode */
{
- oparg_T oa; /* operator arguments */
+ oparg_T oa; /* operator arguments */
+ int previous_got_int = FALSE; /* "got_int" was TRUE */
#if defined(FEAT_X11) && defined(FEAT_XCLIPBOARD)
/* Setup to catch a terminating error from the X server. Just ignore
@@ -1015,12 +1016,32 @@ main_loop(cmdwin, noexmode)
need_fileinfo = FALSE;
}
}
- if (got_int && !global_busy)
+
+ /* Reset "got_int" now that we got back to the main loop. Except when
+ * inside a ":g/pat/cmd" command, then the "got_int" needs to abort
+ * the ":g" command.
+ * For ":g/pat/vi" we reset "got_int" when used once. When used
+ * a second time we go back to Ex mode and abort the ":g" command. */
+ if (got_int)
{
- if (!quit_more)
- (void)vgetc(); /* flush all buffers */
- got_int = FALSE;
+ if (noexmode && global_busy && !exmode_active && previous_got_int)
+ {
+ /* Typed two CTRL-C in a row: go back to ex mode as if "Q" was
+ * used and keep "got_int" set, so that it aborts ":g". */
+ exmode_active = EXMODE_NORMAL;
+ State = NORMAL;
+ }
+ else if (!global_busy || !exmode_active)
+ {
+ if (!quit_more)
+ (void)vgetc(); /* flush all buffers */
+ got_int = FALSE;
+ }
+ previous_got_int = TRUE;
}
+ else
+ previous_got_int = FALSE;
+
if (!exmode_active)
msg_scroll = FALSE;
quit_more = FALSE;
diff --git a/src/version.c b/src/version.c
index 128ded47..f2e02104 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 59,
+/**/
58,
/**/
57,