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
index ae99107..1f23deb 100644
--- a/runtime/doc/terminal.txt
+++ b/runtime/doc/terminal.txt
@@ -52,6 +52,7 @@
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 @@
'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 @@
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 @@
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 @@
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 @@
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
index e8e187b..8d15d3a 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1367,9 +1367,6 @@
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 @@
/* 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
index 7b17219..a424c6a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 960,
+/**/
959,
/**/
958,