diff --git a/src/channel.c b/src/channel.c
index 3e7ec96..0b41133 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -904,7 +904,7 @@
 	    *waittime -= elapsed_msec;
 	    if (waitnow > 0)
 	    {
-		mch_delay((long)waitnow, TRUE);
+		mch_delay((long)waitnow, MCH_DELAY_IGNOREINPUT);
 		ui_breakcheck();
 		*waittime -= waitnow;
 	    }
diff --git a/src/if_cscope.c b/src/if_cscope.c
index 0e6f5ae..c027c71 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -2243,7 +2243,7 @@
 	    waitpid_errno = errno;
 	    if (pid != 0)
 		break;  // break unless the process is still running
-	    mch_delay(50L, FALSE); // sleep 50 ms
+	    mch_delay(50L, 0); // sleep 50 ms
 	}
 # endif
 	/*
@@ -2278,7 +2278,7 @@
 			alive = FALSE; // cscope process no longer exists
 			break;
 		    }
-		    mch_delay(50L, FALSE); // sleep 50ms
+		    mch_delay(50L, 0); // sleep 50 ms
 		}
 	    }
 	    if (alive)
diff --git a/src/os_amiga.c b/src/os_amiga.c
index 850c26a..91c13e7 100644
--- a/src/os_amiga.c
+++ b/src/os_amiga.c
@@ -222,10 +222,10 @@
 
 /*
  * Waits a specified amount of time, or until input arrives if
- * ignoreinput is FALSE.
+ * flags does not have MCH_DELAY_IGNOREINPUT.
  */
     void
-mch_delay(long msec, int ignoreinput)
+mch_delay(long msec, int flags)
 {
 #ifndef LATTICE		// SAS declares void Delay(ULONG)
     void	    Delay(long);
@@ -233,7 +233,7 @@
 
     if (msec > 0)
     {
-	if (ignoreinput)
+	if (flags & MCH_DELAY_IGNOREINPUT)
 	    Delay(msec / 20L);	    // Delay works with 20 msec intervals
 	else
 	    WaitForChar(raw_in, msec * 1000L);
diff --git a/src/os_unix.c b/src/os_unix.c
index 0f61367..73caa1a 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -577,15 +577,19 @@
 }
 #endif
 
+/*
+ * "flags": MCH_DELAY_IGNOREINPUT - don't read input
+ *	    MCH_DELAY_SETTMODE - use settmode() even for short delays
+ */
     void
-mch_delay(long msec, int ignoreinput)
+mch_delay(long msec, int flags)
 {
     tmode_T	old_tmode;
 #ifdef FEAT_MZSCHEME
     long	total = msec; // remember original value
 #endif
 
-    if (ignoreinput)
+    if (flags & MCH_DELAY_IGNOREINPUT)
     {
 	// Go to cooked mode without echo, to allow SIGINT interrupting us
 	// here.  But we don't want QUIT to kill us (CTRL-\ used in a
@@ -593,7 +597,8 @@
 	// Only do this if sleeping for more than half a second.
 	in_mch_delay = TRUE;
 	old_tmode = mch_cur_tmode;
-	if (mch_cur_tmode == TMODE_RAW && msec > 500)
+	if (mch_cur_tmode == TMODE_RAW
+			       && (msec > 500 || (flags & MCH_DELAY_SETTMODE)))
 	    settmode(TMODE_SLEEP);
 
 	/*
@@ -636,10 +641,8 @@
 
 	    tv.tv_sec = msec / 1000;
 	    tv.tv_usec = (msec % 1000) * 1000;
-	    /*
-	     * NOTE: Solaris 2.6 has a bug that makes select() hang here.  Get
-	     * a patch from Sun to fix this.  Reported by Gunnar Pedersen.
-	     */
+	    // NOTE: Solaris 2.6 has a bug that makes select() hang here.  Get
+	    // a patch from Sun to fix this.  Reported by Gunnar Pedersen.
 	    select(0, NULL, NULL, NULL, &tv);
 	}
 #  endif // HAVE_SELECT
@@ -650,7 +653,7 @@
 	while (total > 0);
 #endif
 
-	if (msec > 500)
+	if (msec > 500 || (flags & MCH_DELAY_SETTMODE))
 	    settmode(old_tmode);
 	in_mch_delay = FALSE;
     }
@@ -1284,7 +1287,7 @@
 	long wait_time;
 
 	for (wait_time = 0; !sigcont_received && wait_time <= 3L; wait_time++)
-	    mch_delay(wait_time, FALSE);
+	    mch_delay(wait_time, 0);
     }
 # endif
     in_mch_suspend = FALSE;
@@ -4170,7 +4173,7 @@
 	if (wait_pid == 0)
 	{
 	    // Wait for 1 to 10 msec before trying again.
-	    mch_delay(delay_msec, TRUE);
+	    mch_delay(delay_msec, MCH_DELAY_IGNOREINPUT | MCH_DELAY_SETTMODE);
 	    if (++delay_msec > 10)
 		delay_msec = 10;
 	    continue;
@@ -5262,6 +5265,9 @@
 	    {
 		long delay_msec = 1;
 
+		out_str(T_CTE);	// possibly disables modifyOtherKeys, so that
+				// the system can recognize CTRL-C
+
 		/*
 		 * Similar to the loop above, but only handle X events, no
 		 * I/O.
@@ -5295,11 +5301,14 @@
 		    clip_update();
 
 		    // Wait for 1 to 10 msec. 1 is faster but gives the child
-		    // less time.
-		    mch_delay(delay_msec, TRUE);
+		    // less time, gradually wait longer.
+		    mch_delay(delay_msec,
+				   MCH_DELAY_IGNOREINPUT | MCH_DELAY_SETTMODE);
 		    if (++delay_msec > 10)
 			delay_msec = 10;
 		}
+
+		out_str(T_CTI);	// possibly enables modifyOtherKeys again
 	    }
 # endif
 
@@ -6710,7 +6719,7 @@
     // When running in the background, give it some time to create the temp
     // file, but don't wait for it to finish.
     if (ampersand)
-	mch_delay(10L, TRUE);
+	mch_delay(10L, MCH_DELAY_IGNOREINPUT);
 
     extra_shell_arg = NULL;		// cleanup
     show_shell_mess = TRUE;
diff --git a/src/os_win32.c b/src/os_win32.c
index 43ad102..96af443 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -6739,7 +6739,7 @@
     void
 mch_delay(
     long    msec,
-    int	    ignoreinput UNUSED)
+    int	    flags UNUSED)
 {
 #if defined(FEAT_GUI_MSWIN) && !defined(VIMDLL)
     Sleep((int)msec);	    // never wait for input
@@ -6751,7 +6751,7 @@
 	return;
     }
 # endif
-    if (ignoreinput)
+    if (flags & MCH_DELAY_IGNOREINPUT)
 # ifdef FEAT_MZSCHEME
 	if (mzthreads_allowed() && p_mzq > 0 && msec > p_mzq)
 	{
diff --git a/src/proto/os_amiga.pro b/src/proto/os_amiga.pro
index b2ad9c3..abebae1 100644
--- a/src/proto/os_amiga.pro
+++ b/src/proto/os_amiga.pro
@@ -5,7 +5,7 @@
 int mch_inchar(char_u *buf, int maxlen, long time, int tb_change_cnt);
 int mch_char_avail(void);
 long_u mch_avail_mem(int special);
-void mch_delay(long msec, int ignoreinput);
+void mch_delay(long msec, int flags);
 void mch_suspend(void);
 void mch_init(void);
 int mch_check_win(int argc, char **argv);
diff --git a/src/proto/os_unix.pro b/src/proto/os_unix.pro
index cb84994..ee22b4a 100644
--- a/src/proto/os_unix.pro
+++ b/src/proto/os_unix.pro
@@ -5,7 +5,7 @@
 int mch_char_avail(void);
 int mch_check_messages(void);
 long_u mch_total_mem(int special);
-void mch_delay(long msec, int ignoreinput);
+void mch_delay(long msec, int flags);
 int mch_stackcheck(char *p);
 void mch_suspend(void);
 void mch_init(void);
diff --git a/src/proto/os_win32.pro b/src/proto/os_win32.pro
index 85c09c0..18c8127 100644
--- a/src/proto/os_win32.pro
+++ b/src/proto/os_win32.pro
@@ -53,7 +53,7 @@
 void mch_clear_job(job_T *job);
 void mch_set_normal_colors(void);
 void mch_write(char_u *s, int len);
-void mch_delay(long msec, int ignoreinput);
+void mch_delay(long msec, int flags);
 int mch_remove(char_u *name);
 void mch_breakcheck(int force);
 long_u mch_total_mem(int special);
diff --git a/src/term.c b/src/term.c
index 3648df6..b1a7a66 100644
--- a/src/term.c
+++ b/src/term.c
@@ -3598,7 +3598,7 @@
 	    {
 # ifdef UNIX
 		// Give the terminal a chance to respond.
-		mch_delay(100L, FALSE);
+		mch_delay(100L, 0);
 # endif
 # ifdef TCIFLUSH
 		// Discard data received but not read.
diff --git a/src/ui.c b/src/ui.c
index e473f85..fc24a01 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -539,7 +539,7 @@
 	gui_wait_for_chars(msec, typebuf.tb_change_cnt);
     else
 #endif
-	mch_delay(msec, ignoreinput);
+	mch_delay(msec, ignoreinput ? MCH_DELAY_IGNOREINPUT : 0);
 }
 
 /*
diff --git a/src/version.c b/src/version.c
index 2b996d6..b52d4a8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1513,
+/**/
     1512,
 /**/
     1511,
diff --git a/src/vim.h b/src/vim.h
index 2b28948..7bcc488 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -2668,4 +2668,8 @@
 #define READDIR_SORT_IC		2  // sort ignoring case (strcasecmp)
 #define READDIR_SORT_COLLATE	3  // sort according to collation (strcoll)
 
+// Flags for mch_delay.
+#define MCH_DELAY_IGNOREINPUT	1
+#define MCH_DELAY_SETTMODE	2
+
 #endif // VIM__H
