]> granicus.if.org Git - vim/commitdiff
patch 8.0.0960: job in terminal does not get CTRL-C v8.0.0960
authorBram Moolenaar <Bram@vim.org>
Fri, 18 Aug 2017 20:57:06 +0000 (22:57 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 18 Aug 2017 20:57:06 +0000 (22:57 +0200)
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.

runtime/doc/terminal.txt
src/terminal.c
src/version.c

index ae99107aa8c50288ffa4362022f92e2c6bbbc441..1f23deb7852ab3b1e962fbe66e074c62386d9b72 100644 (file)
@@ -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|
                                                        *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 and window title show "(Terminal)".  If
 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 page:
 
     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*
index e8e187b8924a1551920a9fa4d0f0e3457e081b98..8d15d3a99162400dc27df3ce6cfa71b64b9f1659 100644 (file)
@@ -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 */
index 7b17219fe49558fc0e48b4458899f457800271ec..a424c6aefda50932b1ef058ccd537c7b1ca3e260 100644 (file)
@@ -769,6 +769,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    960,
 /**/
     959,
 /**/