# HG changeset patch # User Christian Brabandt # Date 1503090005 -7200 # Node ID b80c0172d1a8340e8a2fe6af1baa211ba29467be # Parent 7798bda28e5d39ae629e1fc4559343ac87899d16 patch 8.0.0960: job in terminal does not get CTRL-C commit https://github.com/vim/vim/commit/8e539c51c31461fc602071373bdff9edd1aed25f Author: Bram Moolenaar Date: Fri Aug 18 22:57:06 2017 +0200 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. diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -52,6 +52,7 @@ Special in the terminal window: *CTRL- 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| *t_CTRL-\_CTRL-N* The special key combination CTRL-\ CTRL-N can be used to switch to Normal mode, just like this works in any other mode. + *t_CTRL-W_CTRL-C* +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()| function. -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* + *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 a the job ends while in Terminal-Normal mode this changes to "(Terminal-finished)". +It is not possible to enter Insert mode from Terminal-Job mode. + Unix ~ @@ -226,7 +242,10 @@ You can download them from the following https://github.com/rprichard/winpty -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 +build. ============================================================================== 2. Remote testing *terminal-testing* diff --git a/src/terminal.c b/src/terminal.c --- a/src/terminal.c +++ b/src/terminal.c @@ -1367,9 +1367,6 @@ terminal_loop(void) if (c == K_IGNORE) continue; -#ifdef UNIX - may_send_sigint(c, curbuf->b_term->tl_job->jv_pid, 0); -#endif #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 */ diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 960, +/**/ 959, /**/ 958,