Browse files

patch 8.0.0960: job in terminal does not get CTRL-C

Problem:    Job in terminal does not get CTRL-C, we send a SIGINT instead.
Solution:   Don't call may_send_sigint() on CTRL-C.  Make CTRL-W CTRL-C end
            the job.
  • Loading branch information...
brammool committed Aug 18, 2017
1 parent f66a2cd commit 8e539c51c31461fc602071373bdff9edd1aed25f
Showing with 31 additions and 8 deletions.
  1. +24 −5 runtime/doc/terminal.txt
  2. +5 −3 src/terminal.c
  3. +2 −0 src/version.c
@@ -52,6 +52,7 @@ Special in the terminal window: *CTRL-W_.* *CTRL-W_N*
CTRL-W " {reg} paste register {reg} *CTRL-W_quote*
Also works with the = register to insert the result of
evaluating an expression.
CTRL-W CTRL-C ends the job, see below |t_CTRL-W_CTRL-C|
See option 'termkey' for specifying another key instead of CTRL-W that
will work like CTRL-W. However, typing 'termkey' twice sends 'termkey' to
@@ -62,16 +63,29 @@ the job. For example:
'termkey' . send a CTRL-W to the job in the terminal
'termkey' N go to terminal Normal mode, see below
'termkey' CTRL-N same as CTRL-W N
'termkey' CTRL-C same as |t_CTRL-W_CTRL-C|
The special key combination CTRL-\ CTRL-N can be used to switch to Normal
mode, just like this works in any other mode.
CTRL-W CTRL-C can be typed to forcefully end the job. On MS-Windows a
CTRL-BREAK will also kill the job.
If you type CTRL-C the effect depends on what the pty has been configured to
do. For simple commands this causes a SIGINT to be sent to the job, which
would end it. Other commands may ignore the SIGINT or handle the CTRL-C
themselves (like Vim does).
Size ~
Size and color ~
See option 'termsize' for controlling the size of the terminal window.
(TODO: scrolling when the terminal is larger than the window)
The terminal uses the 'background' option to decide whether the terminal
window will start with a white or black background. The job running in the
terminal can change the colors.
Syntax ~
@@ -115,8 +129,8 @@ Syntax ~
If you want to use more options use the |term_start()|
When the buffer associated with the terminal is wiped out the job is killed,
similar to calling `job_stop(job, "kill")`
When the buffer associated with the terminal is unloaded or wiped out the job
is killed, similar to calling `job_stop(job, "kill")`
By default the 'bufhidden' option of the buffer will be set to "hide".
So long as the job is running: If the window is closed the buffer becomes
@@ -130,7 +144,7 @@ done, use options like this: >
Note that the window will open at an unexpected moment, this will interrupt
what you are doing.
*E947* *E948*
So long as the job is running, the buffer is considered modified and Vim
cannot be quit easily, see |abandon|.
@@ -187,6 +201,8 @@ In Terminal-Normal mode the statusline and window title show "(Terminal)". If
the job ends while in Terminal-Normal mode this changes to
It is not possible to enter Insert mode from Terminal-Job mode.
Unix ~
@@ -226,7 +242,10 @@ You can download them from the following page:
Just put the files somewhere in your PATH.
Just put the files somewhere in your PATH. You can set the 'winptydll' option
to point to the right file, if needed. If you have both the 32-bit and 64-bit
version, rename to winpty32.dll and winpty64.dll to match the way Vim was
2. Remote testing *terminal-testing*
@@ -1367,9 +1367,6 @@ terminal_loop(void)
if (c == K_IGNORE)
#ifdef UNIX
may_send_sigint(c, curbuf->b_term->tl_job->jv_pid, 0);
#ifdef WIN3264
/* On Windows winpty handles CTRL-C, don't send a CTRL_C_EVENT.
* Use CTRL-BREAK to kill the job. */
@@ -1405,6 +1402,11 @@ terminal_loop(void)
/* Send both keys to the terminal. */
send_keys_to_term(curbuf->b_term, prev_c, TRUE);
else if (c == Ctrl_C)
/* "CTRL-W CTRL-C" or 'termkey' CTRL-C: end the job */
mch_signal_job(curbuf->b_term->tl_job, (char_u *)"kill");
else if (termkey == 0 && c == '.')
/* "CTRL-W .": send CTRL-W to the job */
@@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */

0 comments on commit 8e539c5

Please sign in to comment.