Mercurial > vim
annotate src/terminal.c @ 12447:b1877a367415 v8.0.1103
patch 8.0.1103: converting cterm color fails for grey ramp
commit https://github.com/vim/vim/commit/478e3a78c37de214aadf7399fac77227b7316f40
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Sep 14 13:37:00 2017 +0200
patch 8.0.1103: converting cterm color fails for grey ramp
Problem: Converting cterm color fails for grey ramp.
Solution: Use index instead of number.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 14 Sep 2017 13:45:04 +0200 |
parents | 65de672be458 |
children | 5d228b1cda64 |
rev | line source |
---|---|
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
2 * |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
3 * VIM - Vi IMproved by Bram Moolenaar |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
4 * |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
5 * Do ":help uganda" in Vim to read copying and usage conditions. |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
6 * Do ":help credits" in Vim to see a list of people who contributed. |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
7 * See README.txt for an overview of the Vim source code. |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
8 */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
9 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
10 /* |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
11 * Terminal window support, see ":help :terminal". |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
12 * |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
13 * There are three parts: |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
14 * 1. Generic code for all systems. |
11741
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
15 * Uses libvterm for the terminal emulator. |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
16 * 2. The MS-Windows implementation. |
11741
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
17 * Uses winpty. |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
18 * 3. The Unix-like implementation. |
11741
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
19 * Uses pseudo-tty's (pty's). |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
20 * |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
21 * For each terminal one VTerm is constructed. This uses libvterm. A copy of |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
22 * this library is in the libvterm directory. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
23 * |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
24 * When a terminal window is opened, a job is started that will be connected to |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
25 * the terminal emulator. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
26 * |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
27 * If the terminal window has keyboard focus, typed keys are converted to the |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
28 * terminal encoding and writing to the job over a channel. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
29 * |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
30 * If the job produces output, it is written to the terminal emulator. The |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
31 * terminal emulator invokes callbacks when its screen content changes. The |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
32 * line range is stored in tl_dirty_row_start and tl_dirty_row_end. Once in a |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
33 * while, if the terminal window is visible, the screen contents is drawn. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
34 * |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
35 * When the job ends the text is put in a buffer. Redrawing then happens from |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
36 * that buffer, attributes come from the scrollback buffer tl_scrollback. |
12086
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
37 * When the buffer is changed it is turned into a normal buffer, the attributes |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
38 * in tl_scrollback are no longer used. |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
39 * |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
40 * TODO: |
12415
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
41 * - patch to add tmap, jakalope (Jacob Askeland) #2073 |
12441
854f49cf0abe
patch 8.0.1100: stuck in redraw loop when 'lazyredraw' is set
Christian Brabandt <cb@256bit.org>
parents:
12435
diff
changeset
|
42 * - Redirecting output does not work on MS-Windows, Test_terminal_redir_file() |
854f49cf0abe
patch 8.0.1100: stuck in redraw loop when 'lazyredraw' is set
Christian Brabandt <cb@256bit.org>
parents:
12435
diff
changeset
|
43 * is disabled. |
854f49cf0abe
patch 8.0.1100: stuck in redraw loop when 'lazyredraw' is set
Christian Brabandt <cb@256bit.org>
parents:
12435
diff
changeset
|
44 * - test_terminal_no_cmd hangs (Christian) |
11917
00836eb177cb
patch 8.0.0838: buffer hangs around whem terminal window is closed
Christian Brabandt <cb@256bit.org>
parents:
11912
diff
changeset
|
45 * - implement term_setsize() |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
46 * - add test for giving error for invalid 'termsize' value. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
47 * - support minimal size when 'termsize' is "rows*cols". |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
48 * - support minimal size when 'termsize' is empty? |
12220
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
49 * - GUI: when using tabs, focus in terminal, click on tab does not work. |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
50 * - GUI: when 'confirm' is set and trying to exit Vim, dialog offers to save |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
51 * changes to "!shell". |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
52 * (justrajdeep, 2017 Aug 22) |
12104
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
53 * - For the GUI fill termios with default values, perhaps like pangoterm: |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
54 * http://bazaar.launchpad.net/~leonerd/pangoterm/trunk/view/head:/main.c#L134 |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
55 * - if the job in the terminal does not support the mouse, we can use the |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
56 * mouse in the Terminal window for copy/paste. |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
57 * - when 'encoding' is not utf-8, or the job is using another encoding, setup |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
58 * conversions. |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
59 * - In the GUI use a terminal emulator for :!cmd. |
11902
35d7459251fd
patch 8.0.0831: with 8 colors the bold attribute is not set properly
Christian Brabandt <cb@256bit.org>
parents:
11888
diff
changeset
|
60 * - Copy text in the vterm to the Vim buffer once in a while, so that |
35d7459251fd
patch 8.0.0831: with 8 colors the bold attribute is not set properly
Christian Brabandt <cb@256bit.org>
parents:
11888
diff
changeset
|
61 * completion works. |
12363
85fef6805d73
patch 8.0.1061: Coverity: no check for NULL command
Christian Brabandt <cb@256bit.org>
parents:
12345
diff
changeset
|
62 * - add an optional limit for the scrollback size. When reaching it remove |
85fef6805d73
patch 8.0.1061: Coverity: no check for NULL command
Christian Brabandt <cb@256bit.org>
parents:
12345
diff
changeset
|
63 * 10% at the start. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
64 */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
65 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
66 #include "vim.h" |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
67 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
68 #if defined(FEAT_TERMINAL) || defined(PROTO) |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
69 |
11971
2baa88d64217
patch 8.0.0866: Solaris also doesn't have MIN and MAX
Christian Brabandt <cb@256bit.org>
parents:
11967
diff
changeset
|
70 #ifndef MIN |
2baa88d64217
patch 8.0.0866: Solaris also doesn't have MIN and MAX
Christian Brabandt <cb@256bit.org>
parents:
11967
diff
changeset
|
71 # define MIN(x,y) ((x) < (y) ? (x) : (y)) |
2baa88d64217
patch 8.0.0866: Solaris also doesn't have MIN and MAX
Christian Brabandt <cb@256bit.org>
parents:
11967
diff
changeset
|
72 #endif |
2baa88d64217
patch 8.0.0866: Solaris also doesn't have MIN and MAX
Christian Brabandt <cb@256bit.org>
parents:
11967
diff
changeset
|
73 #ifndef MAX |
2baa88d64217
patch 8.0.0866: Solaris also doesn't have MIN and MAX
Christian Brabandt <cb@256bit.org>
parents:
11967
diff
changeset
|
74 # define MAX(x,y) ((x) > (y) ? (x) : (y)) |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
75 #endif |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
76 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
77 #include "libvterm/include/vterm.h" |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
78 |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
79 /* This is VTermScreenCell without the characters, thus much smaller. */ |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
80 typedef struct { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
81 VTermScreenCellAttrs attrs; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
82 char width; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
83 VTermColor fg, bg; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
84 } cellattr_T; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
85 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
86 typedef struct sb_line_S { |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
87 int sb_cols; /* can differ per line */ |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
88 cellattr_T *sb_cells; /* allocated */ |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
89 cellattr_T sb_fill_attr; /* for short line */ |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
90 } sb_line_T; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
91 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
92 /* typedef term_T in structs.h */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
93 struct terminal_S { |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
94 term_T *tl_next; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
95 |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
96 VTerm *tl_vterm; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
97 job_T *tl_job; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
98 buf_T *tl_buffer; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
99 |
11933
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
100 /* used when tl_job is NULL and only a pty was created */ |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
101 int tl_tty_fd; |
12389
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
102 char_u *tl_tty_in; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
103 char_u *tl_tty_out; |
11933
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
104 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
105 int tl_normal_mode; /* TRUE: Terminal-Normal mode */ |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
106 int tl_channel_closed; |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
107 int tl_finish; /* 'c' for ++close, 'o' for ++open */ |
12072
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
108 char_u *tl_opencmd; |
12313
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
109 char_u *tl_eof_chars; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
110 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
111 #ifdef WIN3264 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
112 void *tl_winpty_config; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
113 void *tl_winpty; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
114 #endif |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
115 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
116 /* last known vterm size */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
117 int tl_rows; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
118 int tl_cols; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
119 /* vterm size does not follow window size */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
120 int tl_rows_fixed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
121 int tl_cols_fixed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
122 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
123 char_u *tl_title; /* NULL or allocated */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
124 char_u *tl_status_text; /* NULL or allocated */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
125 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
126 /* Range of screen rows to update. Zero based. */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
127 int tl_dirty_row_start; /* -1 if nothing dirty */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
128 int tl_dirty_row_end; /* row below last one to update */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
129 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
130 garray_T tl_scrollback; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
131 int tl_scrollback_scrolled; |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
132 cellattr_T tl_default_color; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
133 |
11874
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
134 VTermPos tl_cursor_pos; |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
135 int tl_cursor_visible; |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
136 int tl_cursor_blink; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
137 int tl_cursor_shape; /* 1: block, 2: underline, 3: bar */ |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
138 char_u *tl_cursor_color; /* NULL or allocated */ |
12035
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
139 |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
140 int tl_using_altscreen; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
141 }; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
142 |
11985
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
143 #define TMODE_ONCE 1 /* CTRL-\ CTRL-N used */ |
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
144 #define TMODE_LOOP 2 /* CTRL-W N used */ |
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
145 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
146 /* |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
147 * List of all active terminals. |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
148 */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
149 static term_T *first_term = NULL; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
150 |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
151 /* Terminal active in terminal_loop(). */ |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
152 static term_T *in_terminal_loop = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
153 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
154 #define MAX_ROW 999999 /* used for tl_dirty_row_end to update all rows */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
155 #define KEY_BUF_LEN 200 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
156 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
157 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
158 * Functions with separate implementation for MS-Windows and Unix-like systems. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
159 */ |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
160 static int term_and_job_init(term_T *term, typval_T *argvar, jobopt_T *opt); |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
161 static int create_pty_only(term_T *term, jobopt_T *opt); |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
162 static void term_report_winsize(term_T *term, int rows, int cols); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
163 static void term_free_vterm(term_T *term); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
164 |
12104
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
165 /* The characters that we know (or assume) that the terminal expects for the |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
166 * backspace and enter keys. */ |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
167 static int term_backspace_char = BS; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
168 static int term_enter_char = CAR; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
169 static int term_nl_does_cr = FALSE; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
170 |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
171 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
172 /************************************** |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
173 * 1. Generic code for all systems. |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
174 */ |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
175 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
176 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
177 * Determine the terminal size from 'termsize' and the current window. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
178 * Assumes term->tl_rows and term->tl_cols are zero. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
179 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
180 static void |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
181 set_term_and_win_size(term_T *term) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
182 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
183 if (*curwin->w_p_tms != NUL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
184 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
185 char_u *p = vim_strchr(curwin->w_p_tms, 'x') + 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
186 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
187 term->tl_rows = atoi((char *)curwin->w_p_tms); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
188 term->tl_cols = atoi((char *)p); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
189 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
190 if (term->tl_rows == 0) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
191 term->tl_rows = curwin->w_height; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
192 else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
193 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
194 win_setheight_win(term->tl_rows, curwin); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
195 term->tl_rows_fixed = TRUE; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
196 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
197 if (term->tl_cols == 0) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
198 term->tl_cols = curwin->w_width; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
199 else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
200 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
201 win_setwidth_win(term->tl_cols, curwin); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
202 term->tl_cols_fixed = TRUE; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
203 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
204 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
205 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
206 /* |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
207 * Initialize job options for a terminal job. |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
208 * Caller may overrule some of them. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
209 */ |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
210 static void |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
211 init_job_options(jobopt_T *opt) |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
212 { |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
213 clear_job_options(opt); |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
214 |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
215 opt->jo_mode = MODE_RAW; |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
216 opt->jo_out_mode = MODE_RAW; |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
217 opt->jo_err_mode = MODE_RAW; |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
218 opt->jo_set = JO_MODE | JO_OUT_MODE | JO_ERR_MODE; |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
219 } |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
220 |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
221 /* |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
222 * Set job options mandatory for a terminal job. |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
223 */ |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
224 static void |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
225 setup_job_options(jobopt_T *opt, int rows, int cols) |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
226 { |
12345
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
227 if (!(opt->jo_set & JO_OUT_IO)) |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
228 { |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
229 /* Connect stdout to the terminal. */ |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
230 opt->jo_io[PART_OUT] = JIO_BUFFER; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
231 opt->jo_io_buf[PART_OUT] = curbuf->b_fnum; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
232 opt->jo_modifiable[PART_OUT] = 0; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
233 opt->jo_set |= JO_OUT_IO + JO_OUT_BUF + JO_OUT_MODIFIABLE; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
234 } |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
235 |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
236 if (!(opt->jo_set & JO_ERR_IO)) |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
237 { |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
238 /* Connect stderr to the terminal. */ |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
239 opt->jo_io[PART_ERR] = JIO_BUFFER; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
240 opt->jo_io_buf[PART_ERR] = curbuf->b_fnum; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
241 opt->jo_modifiable[PART_ERR] = 0; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
242 opt->jo_set |= JO_ERR_IO + JO_ERR_BUF + JO_ERR_MODIFIABLE; |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
243 } |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
244 |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
245 opt->jo_pty = TRUE; |
12056
0498547dace0
patch 8.0.0908: cannot set terminal size with options
Christian Brabandt <cb@256bit.org>
parents:
12043
diff
changeset
|
246 if ((opt->jo_set2 & JO2_TERM_ROWS) == 0) |
0498547dace0
patch 8.0.0908: cannot set terminal size with options
Christian Brabandt <cb@256bit.org>
parents:
12043
diff
changeset
|
247 opt->jo_term_rows = rows; |
0498547dace0
patch 8.0.0908: cannot set terminal size with options
Christian Brabandt <cb@256bit.org>
parents:
12043
diff
changeset
|
248 if ((opt->jo_set2 & JO2_TERM_COLS) == 0) |
0498547dace0
patch 8.0.0908: cannot set terminal size with options
Christian Brabandt <cb@256bit.org>
parents:
12043
diff
changeset
|
249 opt->jo_term_cols = cols; |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
250 } |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
251 |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
252 /* |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
253 * Start a terminal window and return its buffer. |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
254 * Returns NULL when failed. |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
255 */ |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
256 static buf_T * |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
257 term_start(typval_T *argvar, jobopt_T *opt, int forceit) |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
258 { |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
259 exarg_T split_ea; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
260 win_T *old_curwin = curwin; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
261 term_T *term; |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
262 buf_T *old_curbuf = NULL; |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
263 int res; |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
264 buf_T *newbuf; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
265 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
266 if (check_restricted() || check_secure()) |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
267 return NULL; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
268 |
12345
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
269 if ((opt->jo_set & (JO_IN_IO + JO_OUT_IO + JO_ERR_IO)) |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
270 == (JO_IN_IO + JO_OUT_IO + JO_ERR_IO) |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
271 || (!(opt->jo_set & JO_OUT_IO) && (opt->jo_set & JO_OUT_BUF)) |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
272 || (!(opt->jo_set & JO_ERR_IO) && (opt->jo_set & JO_ERR_BUF))) |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
273 { |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
274 EMSG(_(e_invarg)); |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
275 return NULL; |
12345
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
276 } |
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
277 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
278 term = (term_T *)alloc_clear(sizeof(term_T)); |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
279 if (term == NULL) |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
280 return NULL; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
281 term->tl_dirty_row_end = MAX_ROW; |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
282 term->tl_cursor_visible = TRUE; |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
283 term->tl_cursor_shape = VTERM_PROP_CURSORSHAPE_BLOCK; |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
284 term->tl_finish = opt->jo_term_finish; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
285 ga_init2(&term->tl_scrollback, sizeof(sb_line_T), 300); |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
286 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
287 vim_memset(&split_ea, 0, sizeof(split_ea)); |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
288 if (opt->jo_curwin) |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
289 { |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
290 /* Create a new buffer in the current window. */ |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
291 if (!can_abandon(curbuf, forceit)) |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
292 { |
12146
59c1e09cf1a9
patch 8.0.0953: get "no write since last change" error in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12144
diff
changeset
|
293 no_write_message(); |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
294 vim_free(term); |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
295 return NULL; |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
296 } |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
297 if (do_ecmd(0, NULL, NULL, &split_ea, ECMD_ONE, |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
298 ECMD_HIDE + (forceit ? ECMD_FORCEIT : 0), curwin) == FAIL) |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
299 { |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
300 vim_free(term); |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
301 return NULL; |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
302 } |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
303 } |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
304 else if (opt->jo_hidden) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
305 { |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
306 buf_T *buf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
307 |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
308 /* Create a new buffer without a window. Make it the current buffer for |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
309 * a moment to be able to do the initialisations. */ |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
310 buf = buflist_new((char_u *)"", NULL, (linenr_T)0, |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
311 BLN_NEW | BLN_LISTED); |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
312 if (buf == NULL || ml_open(buf) == FAIL) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
313 { |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
314 vim_free(term); |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
315 return NULL; |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
316 } |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
317 old_curbuf = curbuf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
318 --curbuf->b_nwindows; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
319 curbuf = buf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
320 curwin->w_buffer = buf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
321 ++curbuf->b_nwindows; |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
322 } |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
323 else |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
324 { |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
325 /* Open a new window or tab. */ |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
326 split_ea.cmdidx = CMD_new; |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
327 split_ea.cmd = (char_u *)"new"; |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
328 split_ea.arg = (char_u *)""; |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
329 if (opt->jo_term_rows > 0 && !(cmdmod.split & WSP_VERT)) |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
330 { |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
331 split_ea.line2 = opt->jo_term_rows; |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
332 split_ea.addr_count = 1; |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
333 } |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
334 if (opt->jo_term_cols > 0 && (cmdmod.split & WSP_VERT)) |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
335 { |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
336 split_ea.line2 = opt->jo_term_cols; |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
337 split_ea.addr_count = 1; |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
338 } |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
339 |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
340 ex_splitview(&split_ea); |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
341 if (curwin == old_curwin) |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
342 { |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
343 /* split failed */ |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
344 vim_free(term); |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
345 return NULL; |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
346 } |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
347 } |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
348 term->tl_buffer = curbuf; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
349 curbuf->b_term = term; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
350 |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
351 if (!opt->jo_hidden) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
352 { |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
353 /* only one size was taken care of with :new, do the other one */ |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
354 if (opt->jo_term_rows > 0 && (cmdmod.split & WSP_VERT)) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
355 win_setheight(opt->jo_term_rows); |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
356 if (opt->jo_term_cols > 0 && !(cmdmod.split & WSP_VERT)) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
357 win_setwidth(opt->jo_term_cols); |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
358 } |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
359 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
360 /* Link the new terminal in the list of active terminals. */ |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
361 term->tl_next = first_term; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
362 first_term = term; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
363 |
11967
12833414cc02
patch 8.0.0864: cannot specify the name of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11965
diff
changeset
|
364 if (opt->jo_term_name != NULL) |
12833414cc02
patch 8.0.0864: cannot specify the name of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11965
diff
changeset
|
365 curbuf->b_ffname = vim_strsave(opt->jo_term_name); |
12833414cc02
patch 8.0.0864: cannot specify the name of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11965
diff
changeset
|
366 else |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
367 { |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
368 int i; |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
369 size_t len; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
370 char_u *cmd, *p; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
371 |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
372 if (argvar->v_type == VAR_STRING) |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
373 { |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
374 cmd = argvar->vval.v_string; |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
375 if (cmd == NULL) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
376 cmd = (char_u *)""; |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
377 else if (STRCMP(cmd, "NONE") == 0) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
378 cmd = (char_u *)"pty"; |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
379 } |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
380 else if (argvar->v_type != VAR_LIST |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
381 || argvar->vval.v_list == NULL |
12363
85fef6805d73
patch 8.0.1061: Coverity: no check for NULL command
Christian Brabandt <cb@256bit.org>
parents:
12345
diff
changeset
|
382 || argvar->vval.v_list->lv_len < 1 |
85fef6805d73
patch 8.0.1061: Coverity: no check for NULL command
Christian Brabandt <cb@256bit.org>
parents:
12345
diff
changeset
|
383 || (cmd = get_tv_string_chk( |
85fef6805d73
patch 8.0.1061: Coverity: no check for NULL command
Christian Brabandt <cb@256bit.org>
parents:
12345
diff
changeset
|
384 &argvar->vval.v_list->lv_first->li_tv)) == NULL) |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
385 cmd = (char_u*)""; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
386 |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
387 len = STRLEN(cmd) + 10; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
388 p = alloc((int)len); |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
389 |
11912
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
390 for (i = 0; p != NULL; ++i) |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
391 { |
11912
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
392 /* Prepend a ! to the command name to avoid the buffer name equals |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
393 * the executable, otherwise ":w!" would overwrite it. */ |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
394 if (i == 0) |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
395 vim_snprintf((char *)p, len, "!%s", cmd); |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
396 else |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
397 vim_snprintf((char *)p, len, "!%s (%d)", cmd, i); |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
398 if (buflist_findname(p) == NULL) |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
399 { |
12401
eb8d5c4936f1
patch 8.0.1080: memory leak for eof_chars terminal option and buffer name
Christian Brabandt <cb@256bit.org>
parents:
12393
diff
changeset
|
400 vim_free(curbuf->b_ffname); |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
401 curbuf->b_ffname = p; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
402 break; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
403 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
404 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
405 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
406 curbuf->b_fname = curbuf->b_ffname; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
407 |
12072
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
408 if (opt->jo_term_opencmd != NULL) |
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
409 term->tl_opencmd = vim_strsave(opt->jo_term_opencmd); |
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
410 |
12309
e1f44e4afe67
patch 8.0.1034: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12277
diff
changeset
|
411 if (opt->jo_eof_chars != NULL) |
e1f44e4afe67
patch 8.0.1034: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12277
diff
changeset
|
412 term->tl_eof_chars = vim_strsave(opt->jo_eof_chars); |
e1f44e4afe67
patch 8.0.1034: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12277
diff
changeset
|
413 |
11957
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11953
diff
changeset
|
414 set_string_option_direct((char_u *)"buftype", -1, |
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11953
diff
changeset
|
415 (char_u *)"terminal", OPT_FREE|OPT_LOCAL, 0); |
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11953
diff
changeset
|
416 |
11912
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
417 /* Mark the buffer as not modifiable. It can only be made modifiable after |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
418 * the job finished. */ |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
419 curbuf->b_p_ma = FALSE; |
11957
bc0fee081e1e
patch 8.0.0858: can exit while a terminal is still running a job
Christian Brabandt <cb@256bit.org>
parents:
11953
diff
changeset
|
420 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
421 set_term_and_win_size(term); |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
422 setup_job_options(opt, term->tl_rows, term->tl_cols); |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
423 |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
424 /* System dependent: setup the vterm and maybe start the job in it. */ |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
425 if (argvar->v_type == VAR_STRING |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
426 && argvar->vval.v_string != NULL |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
427 && STRCMP(argvar->vval.v_string, "NONE") == 0) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
428 res = create_pty_only(term, opt); |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
429 else |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
430 res = term_and_job_init(term, argvar, opt); |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
431 |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
432 newbuf = curbuf; |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
433 if (res == OK) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
434 { |
12023
0197e3f52192
patch 8.0.0892: when opening a terminal the pty size doesn't always match
Christian Brabandt <cb@256bit.org>
parents:
12021
diff
changeset
|
435 /* Get and remember the size we ended up with. Update the pty. */ |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
436 vterm_get_size(term->tl_vterm, &term->tl_rows, &term->tl_cols); |
12023
0197e3f52192
patch 8.0.0892: when opening a terminal the pty size doesn't always match
Christian Brabandt <cb@256bit.org>
parents:
12021
diff
changeset
|
437 term_report_winsize(term, term->tl_rows, term->tl_cols); |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
438 |
12154
71e10b81226d
patch 8.0.0957: a terminal job can deadlock when sending many keys
Christian Brabandt <cb@256bit.org>
parents:
12152
diff
changeset
|
439 /* Make sure we don't get stuck on sending keys to the job, it leads to |
71e10b81226d
patch 8.0.0957: a terminal job can deadlock when sending many keys
Christian Brabandt <cb@256bit.org>
parents:
12152
diff
changeset
|
440 * a deadlock if the job is waiting for Vim to read. */ |
71e10b81226d
patch 8.0.0957: a terminal job can deadlock when sending many keys
Christian Brabandt <cb@256bit.org>
parents:
12152
diff
changeset
|
441 channel_set_nonblock(term->tl_job->jv_channel, PART_IN); |
71e10b81226d
patch 8.0.0957: a terminal job can deadlock when sending many keys
Christian Brabandt <cb@256bit.org>
parents:
12152
diff
changeset
|
442 |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
443 if (old_curbuf != NULL) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
444 { |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
445 --curbuf->b_nwindows; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
446 curbuf = old_curbuf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
447 curwin->w_buffer = curbuf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
448 ++curbuf->b_nwindows; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
449 } |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
450 } |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
451 else |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
452 { |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
453 buf_T *buf = curbuf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
454 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
455 free_terminal(curbuf); |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
456 if (old_curbuf != NULL) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
457 { |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
458 --curbuf->b_nwindows; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
459 curbuf = old_curbuf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
460 curwin->w_buffer = curbuf; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
461 ++curbuf->b_nwindows; |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
462 } |
11727
cb1dc90d22cc
patch 8.0.0746: when :term fails the job is not properly cleaned up
Christian Brabandt <cb@256bit.org>
parents:
11725
diff
changeset
|
463 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
464 /* Wiping out the buffer will also close the window and call |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
465 * free_terminal(). */ |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
466 do_buffer(DOBUF_WIPE, DOBUF_FIRST, FORWARD, buf->b_fnum, TRUE); |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
467 return NULL; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
468 } |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
469 return newbuf; |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
470 } |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
471 |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
472 /* |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
473 * ":terminal": open a terminal window and execute a job in it. |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
474 */ |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
475 void |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
476 ex_terminal(exarg_T *eap) |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
477 { |
12367
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
478 typval_T argvar[2]; |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
479 jobopt_T opt; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
480 char_u *cmd; |
12124
4e9c14cb1f5d
patch 8.0.0942: using freed memory with ":terminal"
Christian Brabandt <cb@256bit.org>
parents:
12116
diff
changeset
|
481 char_u *tofree = NULL; |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
482 |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
483 init_job_options(&opt); |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
484 |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
485 cmd = eap->arg; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
486 while (*cmd && *cmd == '+' && *(cmd + 1) == '+') |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
487 { |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
488 char_u *p, *ep; |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
489 |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
490 cmd += 2; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
491 p = skiptowhite(cmd); |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
492 ep = vim_strchr(cmd, '='); |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
493 if (ep != NULL && ep < p) |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
494 p = ep; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
495 |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
496 if ((int)(p - cmd) == 5 && STRNICMP(cmd, "close", 5) == 0) |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
497 opt.jo_term_finish = 'c'; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
498 else if ((int)(p - cmd) == 4 && STRNICMP(cmd, "open", 4) == 0) |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
499 opt.jo_term_finish = 'o'; |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
500 else if ((int)(p - cmd) == 6 && STRNICMP(cmd, "curwin", 6) == 0) |
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
501 opt.jo_curwin = 1; |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
502 else if ((int)(p - cmd) == 6 && STRNICMP(cmd, "hidden", 6) == 0) |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
503 opt.jo_hidden = 1; |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
504 else if ((int)(p - cmd) == 4 && STRNICMP(cmd, "rows", 4) == 0 |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
505 && ep != NULL && isdigit(ep[1])) |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
506 { |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
507 opt.jo_set2 |= JO2_TERM_ROWS; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
508 opt.jo_term_rows = atoi((char *)ep + 1); |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
509 p = skiptowhite(cmd); |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
510 } |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
511 else if ((int)(p - cmd) == 4 && STRNICMP(cmd, "cols", 4) == 0 |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
512 && ep != NULL && isdigit(ep[1])) |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
513 { |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
514 opt.jo_set2 |= JO2_TERM_COLS; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
515 opt.jo_term_cols = atoi((char *)ep + 1); |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
516 p = skiptowhite(cmd); |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
517 } |
12311
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
518 else if ((int)(p - cmd) == 3 && STRNICMP(cmd, "eof", 3) == 0 |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
519 && ep != NULL) |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
520 { |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
521 char_u *buf = NULL; |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
522 char_u *keys; |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
523 |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
524 p = skiptowhite(cmd); |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
525 *p = NUL; |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
526 keys = replace_termcodes(ep + 1, &buf, TRUE, TRUE, TRUE); |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
527 opt.jo_set2 |= JO2_EOF_CHARS; |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
528 opt.jo_eof_chars = vim_strsave(keys); |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
529 vim_free(buf); |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
530 *p = ' '; |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
531 } |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
532 else |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
533 { |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
534 if (*p) |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
535 *p = NUL; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
536 EMSG2(_("E181: Invalid attribute: %s"), cmd); |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
537 return; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
538 } |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
539 cmd = skipwhite(p); |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
540 } |
12367
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
541 if (*cmd == NUL) |
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
542 /* Make a copy of 'shell', an autocommand may change the option. */ |
12124
4e9c14cb1f5d
patch 8.0.0942: using freed memory with ":terminal"
Christian Brabandt <cb@256bit.org>
parents:
12116
diff
changeset
|
543 tofree = cmd = vim_strsave(p_sh); |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
544 |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
545 if (eap->addr_count > 0) |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
546 { |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
547 /* Write lines from current buffer to the job. */ |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
548 opt.jo_set |= JO_IN_IO | JO_IN_BUF | JO_IN_TOP | JO_IN_BOT; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
549 opt.jo_io[PART_IN] = JIO_BUFFER; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
550 opt.jo_io_buf[PART_IN] = curbuf->b_fnum; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
551 opt.jo_in_top = eap->line1; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
552 opt.jo_in_bot = eap->line2; |
11975
5cc005cf312f
patch 8.0.0868: cannot specify the terminal size on the command line
Christian Brabandt <cb@256bit.org>
parents:
11971
diff
changeset
|
553 } |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
554 |
12367
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
555 argvar[0].v_type = VAR_STRING; |
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
556 argvar[0].vval.v_string = cmd; |
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
557 argvar[1].v_type = VAR_UNKNOWN; |
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
558 term_start(argvar, &opt, eap->forceit); |
12124
4e9c14cb1f5d
patch 8.0.0942: using freed memory with ":terminal"
Christian Brabandt <cb@256bit.org>
parents:
12116
diff
changeset
|
559 vim_free(tofree); |
12401
eb8d5c4936f1
patch 8.0.1080: memory leak for eof_chars terminal option and buffer name
Christian Brabandt <cb@256bit.org>
parents:
12393
diff
changeset
|
560 vim_free(opt.jo_eof_chars); |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
561 } |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
562 |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
563 /* |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
564 * Free the scrollback buffer for "term". |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
565 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
566 static void |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
567 free_scrollback(term_T *term) |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
568 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
569 int i; |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
570 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
571 for (i = 0; i < term->tl_scrollback.ga_len; ++i) |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
572 vim_free(((sb_line_T *)term->tl_scrollback.ga_data + i)->sb_cells); |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
573 ga_clear(&term->tl_scrollback); |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
574 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
575 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
576 /* |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
577 * Free a terminal and everything it refers to. |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
578 * Kills the job if there is one. |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
579 * Called when wiping out a buffer. |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
580 */ |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
581 void |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
582 free_terminal(buf_T *buf) |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
583 { |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
584 term_T *term = buf->b_term; |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
585 term_T *tp; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
586 |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
587 if (term == NULL) |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
588 return; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
589 if (first_term == term) |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
590 first_term = term->tl_next; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
591 else |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
592 for (tp = first_term; tp->tl_next != NULL; tp = tp->tl_next) |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
593 if (tp->tl_next == term) |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
594 { |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
595 tp->tl_next = term->tl_next; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
596 break; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
597 } |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
598 |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
599 if (term->tl_job != NULL) |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
600 { |
11727
cb1dc90d22cc
patch 8.0.0746: when :term fails the job is not properly cleaned up
Christian Brabandt <cb@256bit.org>
parents:
11725
diff
changeset
|
601 if (term->tl_job->jv_status != JOB_ENDED |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
602 && term->tl_job->jv_status != JOB_FINISHED |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
603 && term->tl_job->jv_status != JOB_FAILED) |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
604 job_stop(term->tl_job, NULL, "kill"); |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
605 job_unref(term->tl_job); |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
606 } |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
607 |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
608 free_scrollback(term); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
609 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
610 term_free_vterm(term); |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
611 vim_free(term->tl_title); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
612 vim_free(term->tl_status_text); |
12072
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
613 vim_free(term->tl_opencmd); |
12309
e1f44e4afe67
patch 8.0.1034: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12277
diff
changeset
|
614 vim_free(term->tl_eof_chars); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
615 vim_free(term->tl_cursor_color); |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
616 vim_free(term); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
617 buf->b_term = NULL; |
12086
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
618 if (in_terminal_loop == term) |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
619 in_terminal_loop = NULL; |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
620 } |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
621 |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
622 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
623 * Write job output "msg[len]" to the vterm. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
624 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
625 static void |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
626 term_write_job_output(term_T *term, char_u *msg, size_t len) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
627 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
628 VTerm *vterm = term->tl_vterm; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
629 char_u *p; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
630 size_t done; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
631 size_t len_now; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
632 |
12104
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
633 if (term_nl_does_cr) |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
634 vterm_input_write(vterm, (char *)msg, len); |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
635 else |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
636 /* need to convert NL to CR-NL */ |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
637 for (done = 0; done < len; done += len_now) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
638 { |
12104
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
639 for (p = msg + done; p < msg + len; ) |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
640 { |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
641 if (*p == NL) |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
642 break; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
643 p += utf_ptr2len_len(p, (int)(len - (p - msg))); |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
644 } |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
645 len_now = p - msg - done; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
646 vterm_input_write(vterm, (char *)msg + done, len_now); |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
647 if (p < msg + len && *p == NL) |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
648 { |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
649 vterm_input_write(vterm, "\r\n", 2); |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
650 ++len_now; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
651 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
652 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
653 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
654 /* this invokes the damage callbacks */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
655 vterm_screen_flush_damage(vterm_obtain_screen(vterm)); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
656 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
657 |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
658 static void |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
659 update_cursor(term_T *term, int redraw) |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
660 { |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
661 if (term->tl_normal_mode) |
11888
4db6c74df788
patch 8.0.0824: in Terminal mode the cursor and screen gets redrawn
Christian Brabandt <cb@256bit.org>
parents:
11886
diff
changeset
|
662 return; |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
663 setcursor(); |
12088
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
664 if (redraw) |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
665 { |
12088
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
666 if (term->tl_buffer == curbuf && term->tl_cursor_visible) |
11792
4bc1f94afc34
patch 8.0.0778: in a terminal the cursor may be hidden
Christian Brabandt <cb@256bit.org>
parents:
11790
diff
changeset
|
667 cursor_on(); |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
668 out_flush(); |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
669 #ifdef FEAT_GUI |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
670 if (gui.in_use) |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
671 gui_update_cursor(FALSE, FALSE); |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
672 #endif |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
673 } |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
674 } |
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
675 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
676 /* |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
677 * Invoked when "msg" output from a job was received. Write it to the terminal |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
678 * of "buffer". |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
679 */ |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
680 void |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
681 write_to_term(buf_T *buffer, char_u *msg, channel_T *channel) |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
682 { |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
683 size_t len = STRLEN(msg); |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
684 term_T *term = buffer->b_term; |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
685 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
686 if (term->tl_vterm == NULL) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
687 { |
11937
c893d6c00497
patch 8.0.0848: using multiple ch_log functions is clumsy
Christian Brabandt <cb@256bit.org>
parents:
11933
diff
changeset
|
688 ch_log(channel, "NOT writing %d bytes to terminal", (int)len); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
689 return; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
690 } |
11937
c893d6c00497
patch 8.0.0848: using multiple ch_log functions is clumsy
Christian Brabandt <cb@256bit.org>
parents:
11933
diff
changeset
|
691 ch_log(channel, "writing %d bytes to terminal", (int)len); |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
692 term_write_job_output(term, msg, len); |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
693 |
12088
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
694 /* In Terminal-Normal mode we are displaying the buffer, not the terminal |
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
695 * contents, thus no screen update is needed. */ |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
696 if (!term->tl_normal_mode) |
11888
4db6c74df788
patch 8.0.0824: in Terminal mode the cursor and screen gets redrawn
Christian Brabandt <cb@256bit.org>
parents:
11886
diff
changeset
|
697 { |
4db6c74df788
patch 8.0.0824: in Terminal mode the cursor and screen gets redrawn
Christian Brabandt <cb@256bit.org>
parents:
11886
diff
changeset
|
698 /* TODO: only update once in a while. */ |
12088
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
699 ch_log(term->tl_job->jv_channel, "updating screen"); |
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
700 if (buffer == curbuf) |
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
701 { |
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
702 update_screen(0); |
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
703 update_cursor(term, TRUE); |
ca1e425a5fbf
patch 8.0.0924: terminal window not updated after using term_sendkeys()
Christian Brabandt <cb@256bit.org>
parents:
12086
diff
changeset
|
704 } |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
705 else if (buffer->b_nwindows > 0) |
12244
d0b039e2ed56
patch 8.0.1002: unnecessarily updating screen after timer callback
Christian Brabandt <cb@256bit.org>
parents:
12240
diff
changeset
|
706 redraw_after_callback(TRUE); |
11888
4db6c74df788
patch 8.0.0824: in Terminal mode the cursor and screen gets redrawn
Christian Brabandt <cb@256bit.org>
parents:
11886
diff
changeset
|
707 } |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
708 } |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
709 |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
710 /* |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
711 * Send a mouse position and click to the vterm |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
712 */ |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
713 static int |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
714 term_send_mouse(VTerm *vterm, int button, int pressed) |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
715 { |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
716 VTermModifier mod = VTERM_MOD_NONE; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
717 |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
718 vterm_mouse_move(vterm, mouse_row - W_WINROW(curwin), |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
719 mouse_col - W_WINCOL(curwin), mod); |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
720 vterm_mouse_button(vterm, button, pressed, mod); |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
721 return TRUE; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
722 } |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
723 |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
724 /* |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
725 * Convert typed key "c" into bytes to send to the job. |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
726 * Return the number of bytes in "buf". |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
727 */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
728 static int |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
729 term_convert_key(term_T *term, int c, char *buf) |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
730 { |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
731 VTerm *vterm = term->tl_vterm; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
732 VTermKey key = VTERM_KEY_NONE; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
733 VTermModifier mod = VTERM_MOD_NONE; |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
734 int mouse = FALSE; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
735 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
736 switch (c) |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
737 { |
12104
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
738 case CAR: c = term_enter_char; break; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
739 /* don't use VTERM_KEY_BACKSPACE, it always |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
740 * becomes 0x7f DEL */ |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
741 case K_BS: c = term_backspace_char; break; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
742 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
743 case ESC: key = VTERM_KEY_ESCAPE; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
744 case K_DEL: key = VTERM_KEY_DEL; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
745 case K_DOWN: key = VTERM_KEY_DOWN; break; |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
746 case K_S_DOWN: mod = VTERM_MOD_SHIFT; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
747 key = VTERM_KEY_DOWN; break; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
748 case K_END: key = VTERM_KEY_END; break; |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
749 case K_S_END: mod = VTERM_MOD_SHIFT; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
750 key = VTERM_KEY_END; break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
751 case K_C_END: mod = VTERM_MOD_CTRL; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
752 key = VTERM_KEY_END; break; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
753 case K_F10: key = VTERM_KEY_FUNCTION(10); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
754 case K_F11: key = VTERM_KEY_FUNCTION(11); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
755 case K_F12: key = VTERM_KEY_FUNCTION(12); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
756 case K_F1: key = VTERM_KEY_FUNCTION(1); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
757 case K_F2: key = VTERM_KEY_FUNCTION(2); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
758 case K_F3: key = VTERM_KEY_FUNCTION(3); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
759 case K_F4: key = VTERM_KEY_FUNCTION(4); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
760 case K_F5: key = VTERM_KEY_FUNCTION(5); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
761 case K_F6: key = VTERM_KEY_FUNCTION(6); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
762 case K_F7: key = VTERM_KEY_FUNCTION(7); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
763 case K_F8: key = VTERM_KEY_FUNCTION(8); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
764 case K_F9: key = VTERM_KEY_FUNCTION(9); break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
765 case K_HOME: key = VTERM_KEY_HOME; break; |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
766 case K_S_HOME: mod = VTERM_MOD_SHIFT; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
767 key = VTERM_KEY_HOME; break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
768 case K_C_HOME: mod = VTERM_MOD_CTRL; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
769 key = VTERM_KEY_HOME; break; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
770 case K_INS: key = VTERM_KEY_INS; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
771 case K_K0: key = VTERM_KEY_KP_0; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
772 case K_K1: key = VTERM_KEY_KP_1; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
773 case K_K2: key = VTERM_KEY_KP_2; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
774 case K_K3: key = VTERM_KEY_KP_3; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
775 case K_K4: key = VTERM_KEY_KP_4; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
776 case K_K5: key = VTERM_KEY_KP_5; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
777 case K_K6: key = VTERM_KEY_KP_6; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
778 case K_K7: key = VTERM_KEY_KP_7; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
779 case K_K8: key = VTERM_KEY_KP_8; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
780 case K_K9: key = VTERM_KEY_KP_9; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
781 case K_KDEL: key = VTERM_KEY_DEL; break; /* TODO */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
782 case K_KDIVIDE: key = VTERM_KEY_KP_DIVIDE; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
783 case K_KEND: key = VTERM_KEY_KP_1; break; /* TODO */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
784 case K_KENTER: key = VTERM_KEY_KP_ENTER; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
785 case K_KHOME: key = VTERM_KEY_KP_7; break; /* TODO */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
786 case K_KINS: key = VTERM_KEY_KP_0; break; /* TODO */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
787 case K_KMINUS: key = VTERM_KEY_KP_MINUS; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
788 case K_KMULTIPLY: key = VTERM_KEY_KP_MULT; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
789 case K_KPAGEDOWN: key = VTERM_KEY_KP_3; break; /* TODO */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
790 case K_KPAGEUP: key = VTERM_KEY_KP_9; break; /* TODO */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
791 case K_KPLUS: key = VTERM_KEY_KP_PLUS; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
792 case K_KPOINT: key = VTERM_KEY_KP_PERIOD; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
793 case K_LEFT: key = VTERM_KEY_LEFT; break; |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
794 case K_S_LEFT: mod = VTERM_MOD_SHIFT; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
795 key = VTERM_KEY_LEFT; break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
796 case K_C_LEFT: mod = VTERM_MOD_CTRL; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
797 key = VTERM_KEY_LEFT; break; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
798 case K_PAGEDOWN: key = VTERM_KEY_PAGEDOWN; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
799 case K_PAGEUP: key = VTERM_KEY_PAGEUP; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
800 case K_RIGHT: key = VTERM_KEY_RIGHT; break; |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
801 case K_S_RIGHT: mod = VTERM_MOD_SHIFT; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
802 key = VTERM_KEY_RIGHT; break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
803 case K_C_RIGHT: mod = VTERM_MOD_CTRL; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
804 key = VTERM_KEY_RIGHT; break; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
805 case K_UP: key = VTERM_KEY_UP; break; |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
806 case K_S_UP: mod = VTERM_MOD_SHIFT; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
807 key = VTERM_KEY_UP; break; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
808 case TAB: key = VTERM_KEY_TAB; break; |
11711
dac96f8800be
patch 8.0.0738: cannot use the mouse to resize a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11694
diff
changeset
|
809 |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
810 case K_MOUSEUP: mouse = term_send_mouse(vterm, 5, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
811 case K_MOUSEDOWN: mouse = term_send_mouse(vterm, 4, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
812 case K_MOUSELEFT: /* TODO */ return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
813 case K_MOUSERIGHT: /* TODO */ return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
814 |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
815 case K_LEFTMOUSE: |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
816 case K_LEFTMOUSE_NM: mouse = term_send_mouse(vterm, 1, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
817 case K_LEFTDRAG: mouse = term_send_mouse(vterm, 1, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
818 case K_LEFTRELEASE: |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
819 case K_LEFTRELEASE_NM: mouse = term_send_mouse(vterm, 1, 0); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
820 case K_MIDDLEMOUSE: mouse = term_send_mouse(vterm, 2, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
821 case K_MIDDLEDRAG: mouse = term_send_mouse(vterm, 2, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
822 case K_MIDDLERELEASE: mouse = term_send_mouse(vterm, 2, 0); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
823 case K_RIGHTMOUSE: mouse = term_send_mouse(vterm, 3, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
824 case K_RIGHTDRAG: mouse = term_send_mouse(vterm, 3, 1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
825 case K_RIGHTRELEASE: mouse = term_send_mouse(vterm, 3, 0); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
826 case K_X1MOUSE: /* TODO */ return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
827 case K_X1DRAG: /* TODO */ return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
828 case K_X1RELEASE: /* TODO */ return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
829 case K_X2MOUSE: /* TODO */ return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
830 case K_X2DRAG: /* TODO */ return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
831 case K_X2RELEASE: /* TODO */ return 0; |
11711
dac96f8800be
patch 8.0.0738: cannot use the mouse to resize a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11694
diff
changeset
|
832 |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
833 case K_IGNORE: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
834 case K_NOP: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
835 case K_UNDO: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
836 case K_HELP: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
837 case K_XF1: key = VTERM_KEY_FUNCTION(1); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
838 case K_XF2: key = VTERM_KEY_FUNCTION(2); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
839 case K_XF3: key = VTERM_KEY_FUNCTION(3); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
840 case K_XF4: key = VTERM_KEY_FUNCTION(4); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
841 case K_SELECT: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
842 #ifdef FEAT_GUI |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
843 case K_VER_SCROLLBAR: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
844 case K_HOR_SCROLLBAR: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
845 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
846 #ifdef FEAT_GUI_TABLINE |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
847 case K_TABLINE: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
848 case K_TABMENU: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
849 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
850 #ifdef FEAT_NETBEANS_INTG |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
851 case K_F21: key = VTERM_KEY_FUNCTION(21); break; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
852 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
853 #ifdef FEAT_DND |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
854 case K_DROP: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
855 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
856 #ifdef FEAT_AUTOCMD |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
857 case K_CURSORHOLD: return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
858 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
859 case K_PS: vterm_keyboard_start_paste(vterm); return 0; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
860 case K_PE: vterm_keyboard_end_paste(vterm); return 0; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
861 } |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
862 |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
863 /* |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
864 * Convert special keys to vterm keys: |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
865 * - Write keys to vterm: vterm_keyboard_key() |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
866 * - Write output to channel. |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
867 * TODO: use mod_mask |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
868 */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
869 if (key != VTERM_KEY_NONE) |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
870 /* Special key, let vterm convert it. */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
871 vterm_keyboard_key(vterm, key, mod); |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
872 else if (!mouse) |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
873 /* Normal character, let vterm convert it. */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
874 vterm_keyboard_unichar(vterm, c, mod); |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
875 |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
876 /* Read back the converted escape sequence. */ |
11790
4dfebc1b2674
patch 8.0.0777: compiler warnings with 64 bit compiler
Christian Brabandt <cb@256bit.org>
parents:
11786
diff
changeset
|
877 return (int)vterm_output_read(vterm, buf, KEY_BUF_LEN); |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
878 } |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
879 |
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
880 /* |
11882
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
881 * Return TRUE if the job for "term" is still running. |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
882 */ |
11917
00836eb177cb
patch 8.0.0838: buffer hangs around whem terminal window is closed
Christian Brabandt <cb@256bit.org>
parents:
11912
diff
changeset
|
883 int |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
884 term_job_running(term_T *term) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
885 { |
11842
6bfcedcc0262
patch 8.0.0801: terminal window title says "running" after job exits
Christian Brabandt <cb@256bit.org>
parents:
11840
diff
changeset
|
886 /* Also consider the job finished when the channel is closed, to avoid a |
6bfcedcc0262
patch 8.0.0801: terminal window title says "running" after job exits
Christian Brabandt <cb@256bit.org>
parents:
11840
diff
changeset
|
887 * race condition when updating the title. */ |
11947
8b9a1be7bb82
patch 8.0.0853: crash when running terminal with unknown command
Christian Brabandt <cb@256bit.org>
parents:
11939
diff
changeset
|
888 return term != NULL |
8b9a1be7bb82
patch 8.0.0853: crash when running terminal with unknown command
Christian Brabandt <cb@256bit.org>
parents:
11939
diff
changeset
|
889 && term->tl_job != NULL |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
890 && channel_is_open(term->tl_job->jv_channel) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
891 && (term->tl_job->jv_status == JOB_STARTED |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
892 || term->tl_job->jv_channel->ch_keep_open); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
893 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
894 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
895 /* |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
896 * Return TRUE if "term" has an active channel and used ":term NONE". |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
897 */ |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
898 int |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
899 term_none_open(term_T *term) |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
900 { |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
901 /* Also consider the job finished when the channel is closed, to avoid a |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
902 * race condition when updating the title. */ |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
903 return term != NULL |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
904 && term->tl_job != NULL |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
905 && channel_is_open(term->tl_job->jv_channel) |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
906 && term->tl_job->jv_channel->ch_keep_open; |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
907 } |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
908 |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
909 /* |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
910 * Add the last line of the scrollback buffer to the buffer in the window. |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
911 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
912 static void |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
913 add_scrollback_line_to_buffer(term_T *term, char_u *text, int len) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
914 { |
12011
1f4e7361ce89
patch 8.0.0886: crash when using ":term ls"
Christian Brabandt <cb@256bit.org>
parents:
12009
diff
changeset
|
915 buf_T *buf = term->tl_buffer; |
1f4e7361ce89
patch 8.0.0886: crash when using ":term ls"
Christian Brabandt <cb@256bit.org>
parents:
12009
diff
changeset
|
916 int empty = (buf->b_ml.ml_flags & ML_EMPTY); |
1f4e7361ce89
patch 8.0.0886: crash when using ":term ls"
Christian Brabandt <cb@256bit.org>
parents:
12009
diff
changeset
|
917 linenr_T lnum = buf->b_ml.ml_line_count; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
918 |
12208
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
919 #ifdef WIN3264 |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
920 if (!enc_utf8 && enc_codepage > 0) |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
921 { |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
922 WCHAR *ret = NULL; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
923 int length = 0; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
924 |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
925 MultiByteToWideChar_alloc(CP_UTF8, 0, (char*)text, len + 1, |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
926 &ret, &length); |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
927 if (ret != NULL) |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
928 { |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
929 WideCharToMultiByte_alloc(enc_codepage, 0, |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
930 ret, length, (char **)&text, &len, 0, 0); |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
931 vim_free(ret); |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
932 ml_append_buf(term->tl_buffer, lnum, text, len, FALSE); |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
933 vim_free(text); |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
934 } |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
935 } |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
936 else |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
937 #endif |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
938 ml_append_buf(term->tl_buffer, lnum, text, len + 1, FALSE); |
12011
1f4e7361ce89
patch 8.0.0886: crash when using ":term ls"
Christian Brabandt <cb@256bit.org>
parents:
12009
diff
changeset
|
939 if (empty) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
940 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
941 /* Delete the empty line that was in the empty buffer. */ |
12011
1f4e7361ce89
patch 8.0.0886: crash when using ":term ls"
Christian Brabandt <cb@256bit.org>
parents:
12009
diff
changeset
|
942 curbuf = buf; |
1f4e7361ce89
patch 8.0.0886: crash when using ":term ls"
Christian Brabandt <cb@256bit.org>
parents:
12009
diff
changeset
|
943 ml_delete(1, FALSE); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
944 curbuf = curwin->w_buffer; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
945 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
946 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
947 |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
948 static void |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
949 cell2cellattr(const VTermScreenCell *cell, cellattr_T *attr) |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
950 { |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
951 attr->width = cell->width; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
952 attr->attrs = cell->attrs; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
953 attr->fg = cell->fg; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
954 attr->bg = cell->bg; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
955 } |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
956 |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
957 static int |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
958 equal_celattr(cellattr_T *a, cellattr_T *b) |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
959 { |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
960 /* Comparing the colors should be sufficient. */ |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
961 return a->fg.red == b->fg.red |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
962 && a->fg.green == b->fg.green |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
963 && a->fg.blue == b->fg.blue |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
964 && a->bg.red == b->bg.red |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
965 && a->bg.green == b->bg.green |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
966 && a->bg.blue == b->bg.blue; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
967 } |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
968 |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
969 |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
970 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
971 * Add the current lines of the terminal to scrollback and to the buffer. |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
972 * Called after the job has ended and when switching to Terminal-Normal mode. |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
973 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
974 static void |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
975 move_terminal_to_buffer(term_T *term) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
976 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
977 win_T *wp; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
978 int len; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
979 int lines_skipped = 0; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
980 VTermPos pos; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
981 VTermScreenCell cell; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
982 cellattr_T fill_attr, new_fill_attr; |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
983 cellattr_T *p; |
11958
052270a67371
patch 8.0.0859: NULL pointer access when term_free_vterm called twice
Christian Brabandt <cb@256bit.org>
parents:
11957
diff
changeset
|
984 VTermScreen *screen; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
985 |
11958
052270a67371
patch 8.0.0859: NULL pointer access when term_free_vterm called twice
Christian Brabandt <cb@256bit.org>
parents:
11957
diff
changeset
|
986 if (term->tl_vterm == NULL) |
052270a67371
patch 8.0.0859: NULL pointer access when term_free_vterm called twice
Christian Brabandt <cb@256bit.org>
parents:
11957
diff
changeset
|
987 return; |
052270a67371
patch 8.0.0859: NULL pointer access when term_free_vterm called twice
Christian Brabandt <cb@256bit.org>
parents:
11957
diff
changeset
|
988 screen = vterm_obtain_screen(term->tl_vterm); |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
989 fill_attr = new_fill_attr = term->tl_default_color; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
990 |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
991 for (pos.row = 0; pos.row < term->tl_rows; ++pos.row) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
992 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
993 len = 0; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
994 for (pos.col = 0; pos.col < term->tl_cols; ++pos.col) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
995 if (vterm_screen_get_cell(screen, pos, &cell) != 0 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
996 && cell.chars[0] != NUL) |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
997 { |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
998 len = pos.col + 1; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
999 new_fill_attr = term->tl_default_color; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1000 } |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1001 else |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1002 /* Assume the last attr is the filler attr. */ |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1003 cell2cellattr(&cell, &new_fill_attr); |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1004 |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1005 if (len == 0 && equal_celattr(&new_fill_attr, &fill_attr)) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1006 ++lines_skipped; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1007 else |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1008 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1009 while (lines_skipped > 0) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1010 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1011 /* Line was skipped, add an empty line. */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1012 --lines_skipped; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1013 if (ga_grow(&term->tl_scrollback, 1) == OK) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1014 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1015 sb_line_T *line = (sb_line_T *)term->tl_scrollback.ga_data |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1016 + term->tl_scrollback.ga_len; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1017 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1018 line->sb_cols = 0; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1019 line->sb_cells = NULL; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1020 line->sb_fill_attr = fill_attr; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1021 ++term->tl_scrollback.ga_len; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1022 |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1023 add_scrollback_line_to_buffer(term, (char_u *)"", 0); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1024 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1025 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1026 |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1027 if (len == 0) |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1028 p = NULL; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1029 else |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1030 p = (cellattr_T *)alloc((int)sizeof(cellattr_T) * len); |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1031 if ((p != NULL || len == 0) |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1032 && ga_grow(&term->tl_scrollback, 1) == OK) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1033 { |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1034 garray_T ga; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1035 int width; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1036 sb_line_T *line = (sb_line_T *)term->tl_scrollback.ga_data |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1037 + term->tl_scrollback.ga_len; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1038 |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1039 ga_init2(&ga, 1, 100); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1040 for (pos.col = 0; pos.col < len; pos.col += width) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1041 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1042 if (vterm_screen_get_cell(screen, pos, &cell) == 0) |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1043 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1044 width = 1; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1045 vim_memset(p + pos.col, 0, sizeof(cellattr_T)); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1046 if (ga_grow(&ga, 1) == OK) |
12222
43f03e584002
patch 8.0.0991: using wrong character conversion for DBCS
Christian Brabandt <cb@256bit.org>
parents:
12220
diff
changeset
|
1047 ga.ga_len += utf_char2bytes(' ', |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1048 (char_u *)ga.ga_data + ga.ga_len); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1049 } |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1050 else |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1051 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1052 width = cell.width; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1053 |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1054 cell2cellattr(&cell, &p[pos.col]); |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1055 |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1056 if (ga_grow(&ga, MB_MAXBYTES) == OK) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1057 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1058 int i; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1059 int c; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1060 |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1061 for (i = 0; (c = cell.chars[i]) > 0 || i == 0; ++i) |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1062 ga.ga_len += utf_char2bytes(c == NUL ? ' ' : c, |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1063 (char_u *)ga.ga_data + ga.ga_len); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1064 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1065 } |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1066 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1067 line->sb_cols = len; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1068 line->sb_cells = p; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1069 line->sb_fill_attr = new_fill_attr; |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1070 fill_attr = new_fill_attr; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1071 ++term->tl_scrollback.ga_len; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1072 |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1073 if (ga_grow(&ga, 1) == FAIL) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1074 add_scrollback_line_to_buffer(term, (char_u *)"", 0); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1075 else |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1076 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1077 *((char_u *)ga.ga_data + ga.ga_len) = NUL; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1078 add_scrollback_line_to_buffer(term, ga.ga_data, ga.ga_len); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1079 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
1080 ga_clear(&ga); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1081 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1082 else |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1083 vim_free(p); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1084 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1085 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1086 |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1087 /* Obtain the current background color. */ |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1088 vterm_state_get_default_colors(vterm_obtain_state(term->tl_vterm), |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1089 &term->tl_default_color.fg, &term->tl_default_color.bg); |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
1090 |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1091 FOR_ALL_WINDOWS(wp) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1092 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1093 if (wp->w_buffer == term->tl_buffer) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1094 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1095 wp->w_cursor.lnum = term->tl_buffer->b_ml.ml_line_count; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1096 wp->w_cursor.col = 0; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1097 wp->w_valid = 0; |
12092
bf3a61119baf
patch 8.0.0926: when job in terminal window ends topline is wrong
Christian Brabandt <cb@256bit.org>
parents:
12088
diff
changeset
|
1098 if (wp->w_cursor.lnum >= wp->w_height) |
bf3a61119baf
patch 8.0.0926: when job in terminal window ends topline is wrong
Christian Brabandt <cb@256bit.org>
parents:
12088
diff
changeset
|
1099 { |
bf3a61119baf
patch 8.0.0926: when job in terminal window ends topline is wrong
Christian Brabandt <cb@256bit.org>
parents:
12088
diff
changeset
|
1100 linenr_T min_topline = wp->w_cursor.lnum - wp->w_height + 1; |
bf3a61119baf
patch 8.0.0926: when job in terminal window ends topline is wrong
Christian Brabandt <cb@256bit.org>
parents:
12088
diff
changeset
|
1101 |
bf3a61119baf
patch 8.0.0926: when job in terminal window ends topline is wrong
Christian Brabandt <cb@256bit.org>
parents:
12088
diff
changeset
|
1102 if (wp->w_topline < min_topline) |
bf3a61119baf
patch 8.0.0926: when job in terminal window ends topline is wrong
Christian Brabandt <cb@256bit.org>
parents:
12088
diff
changeset
|
1103 wp->w_topline = min_topline; |
bf3a61119baf
patch 8.0.0926: when job in terminal window ends topline is wrong
Christian Brabandt <cb@256bit.org>
parents:
12088
diff
changeset
|
1104 } |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1105 redraw_win_later(wp, NOT_VALID); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1106 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1107 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1108 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1109 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1110 static void |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1111 set_terminal_mode(term_T *term, int normal_mode) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1112 { |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1113 term->tl_normal_mode = normal_mode; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1114 vim_free(term->tl_status_text); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1115 term->tl_status_text = NULL; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1116 if (term->tl_buffer == curbuf) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1117 maketitle(); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1118 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1119 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1120 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1121 * Called after the job if finished and Terminal mode is not active: |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1122 * Move the vterm contents into the scrollback buffer and free the vterm. |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1123 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1124 static void |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1125 cleanup_vterm(term_T *term) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1126 { |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
1127 if (term->tl_finish != 'c') |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
1128 move_terminal_to_buffer(term); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1129 term_free_vterm(term); |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1130 set_terminal_mode(term, FALSE); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1131 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1132 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1133 /* |
11985
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
1134 * Switch from Terminal-Job mode to Terminal-Normal mode. |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1135 * Suspends updating the terminal window. |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1136 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1137 static void |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1138 term_enter_normal_mode(void) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1139 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1140 term_T *term = curbuf->b_term; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1141 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1142 /* Append the current terminal contents to the buffer. */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1143 move_terminal_to_buffer(term); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1144 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1145 set_terminal_mode(term, TRUE); |
11985
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
1146 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1147 /* Move the window cursor to the position of the cursor in the |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1148 * terminal. */ |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1149 curwin->w_cursor.lnum = term->tl_scrollback_scrolled |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1150 + term->tl_cursor_pos.row + 1; |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1151 check_cursor(); |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1152 coladvance(term->tl_cursor_pos.col); |
11985
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
1153 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1154 /* Display the same lines as in the terminal. */ |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1155 curwin->w_topline = term->tl_scrollback_scrolled + 1; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1156 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1157 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1158 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1159 * Returns TRUE if the current window contains a terminal and we are in |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1160 * Terminal-Normal mode. |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1161 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1162 int |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1163 term_in_normal_mode(void) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1164 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1165 term_T *term = curbuf->b_term; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1166 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1167 return term != NULL && term->tl_normal_mode; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1168 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1169 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1170 /* |
11985
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
1171 * Switch from Terminal-Normal mode to Terminal-Job mode. |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1172 * Restores updating the terminal window. |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1173 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1174 void |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1175 term_enter_job_mode() |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1176 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1177 term_T *term = curbuf->b_term; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1178 sb_line_T *line; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1179 garray_T *gap; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1180 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1181 /* Remove the terminal contents from the scrollback and the buffer. */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1182 gap = &term->tl_scrollback; |
12176
782a06ba2187
patch 8.0.0968: crash when switching terminal modes
Christian Brabandt <cb@256bit.org>
parents:
12170
diff
changeset
|
1183 while (curbuf->b_ml.ml_line_count > term->tl_scrollback_scrolled |
782a06ba2187
patch 8.0.0968: crash when switching terminal modes
Christian Brabandt <cb@256bit.org>
parents:
12170
diff
changeset
|
1184 && gap->ga_len > 0) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1185 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1186 ml_delete(curbuf->b_ml.ml_line_count, FALSE); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1187 line = (sb_line_T *)gap->ga_data + gap->ga_len - 1; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1188 vim_free(line->sb_cells); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1189 --gap->ga_len; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1190 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1191 check_cursor(); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1192 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1193 set_terminal_mode(term, FALSE); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1194 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1195 if (term->tl_channel_closed) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1196 cleanup_vterm(term); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1197 redraw_buf_and_status_later(curbuf, NOT_VALID); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1198 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1199 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1200 /* |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1201 * Get a key from the user without mapping. |
12086
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1202 * Note: while waiting a terminal may be closed and freed if the channel is |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1203 * closed and ++close was used. |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1204 * TODO: use terminal mode mappings. |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1205 */ |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1206 static int |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1207 term_vgetc() |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1208 { |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1209 int c; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1210 |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1211 ++no_mapping; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1212 ++allow_keys; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1213 got_int = FALSE; |
12066
8ad282dee649
patch 8.0.0913: MS-Windows: CTRL-C kills shell in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12064
diff
changeset
|
1214 #ifdef WIN3264 |
8ad282dee649
patch 8.0.0913: MS-Windows: CTRL-C kills shell in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12064
diff
changeset
|
1215 ctrl_break_was_pressed = FALSE; |
8ad282dee649
patch 8.0.0913: MS-Windows: CTRL-C kills shell in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12064
diff
changeset
|
1216 #endif |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1217 c = vgetc(); |
11870
c29e498aa77d
patch 8.0.0815: terminal window not correctly updated
Christian Brabandt <cb@256bit.org>
parents:
11866
diff
changeset
|
1218 got_int = FALSE; |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1219 --no_mapping; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1220 --allow_keys; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1221 return c; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1222 } |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1223 |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1224 /* |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1225 * Get the part that is connected to the tty. Normally this is PART_IN, but |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1226 * when writing buffer lines to the job it can be another. This makes it |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1227 * possible to do "1,5term vim -". |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1228 */ |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1229 static ch_part_T |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1230 get_tty_part(term_T *term) |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1231 { |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1232 #ifdef UNIX |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1233 ch_part_T parts[3] = {PART_IN, PART_OUT, PART_ERR}; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1234 int i; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1235 |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1236 for (i = 0; i < 3; ++i) |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1237 { |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1238 int fd = term->tl_job->jv_channel->ch_part[parts[i]].ch_fd; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1239 |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1240 if (isatty(fd)) |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1241 return parts[i]; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1242 } |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1243 #endif |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1244 return PART_IN; |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1245 } |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1246 |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1247 /* |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1248 * Send keys to terminal. |
11965
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1249 * Return FAIL when the key needs to be handled in Normal mode. |
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1250 * Return OK when the key was dropped or sent to the terminal. |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1251 */ |
11983
448635f73e09
patch 8.0.0872: no mouse scroll with a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11979
diff
changeset
|
1252 int |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1253 send_keys_to_term(term_T *term, int c, int typed) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1254 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1255 char msg[KEY_BUF_LEN]; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1256 size_t len; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1257 static int mouse_was_outside = FALSE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1258 int dragging_outside = FALSE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1259 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1260 /* Catch keys that need to be handled as in Normal mode. */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1261 switch (c) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1262 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1263 case NUL: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1264 case K_ZERO: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1265 if (typed) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1266 stuffcharReadbuff(c); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1267 return FAIL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1268 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1269 case K_IGNORE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1270 return FAIL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1271 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1272 case K_LEFTDRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1273 case K_MIDDLEDRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1274 case K_RIGHTDRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1275 case K_X1DRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1276 case K_X2DRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1277 dragging_outside = mouse_was_outside; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1278 /* FALLTHROUGH */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1279 case K_LEFTMOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1280 case K_LEFTMOUSE_NM: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1281 case K_LEFTRELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1282 case K_LEFTRELEASE_NM: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1283 case K_MIDDLEMOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1284 case K_MIDDLERELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1285 case K_RIGHTMOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1286 case K_RIGHTRELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1287 case K_X1MOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1288 case K_X1RELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1289 case K_X2MOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1290 case K_X2RELEASE: |
11983
448635f73e09
patch 8.0.0872: no mouse scroll with a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11979
diff
changeset
|
1291 |
448635f73e09
patch 8.0.0872: no mouse scroll with a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11979
diff
changeset
|
1292 case K_MOUSEUP: |
448635f73e09
patch 8.0.0872: no mouse scroll with a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11979
diff
changeset
|
1293 case K_MOUSEDOWN: |
448635f73e09
patch 8.0.0872: no mouse scroll with a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11979
diff
changeset
|
1294 case K_MOUSELEFT: |
448635f73e09
patch 8.0.0872: no mouse scroll with a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11979
diff
changeset
|
1295 case K_MOUSERIGHT: |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1296 if (mouse_row < W_WINROW(curwin) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1297 || mouse_row >= (W_WINROW(curwin) + curwin->w_height) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1298 || mouse_col < W_WINCOL(curwin) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1299 || mouse_col >= W_ENDCOL(curwin) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1300 || dragging_outside) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1301 { |
11983
448635f73e09
patch 8.0.0872: no mouse scroll with a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11979
diff
changeset
|
1302 /* click or scroll outside the current window */ |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1303 if (typed) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1304 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1305 stuffcharReadbuff(c); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1306 mouse_was_outside = TRUE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1307 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1308 return FAIL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1309 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1310 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1311 if (typed) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1312 mouse_was_outside = FALSE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1313 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1314 /* Convert the typed key to a sequence of bytes for the job. */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1315 len = term_convert_key(term, c, msg); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1316 if (len > 0) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1317 /* TODO: if FAIL is returned, stop? */ |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1318 channel_send(term->tl_job->jv_channel, get_tty_part(term), |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1319 (char_u *)msg, (int)len, NULL); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1320 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1321 return OK; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1322 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1323 |
11878
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1324 static void |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1325 position_cursor(win_T *wp, VTermPos *pos) |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1326 { |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1327 wp->w_wrow = MIN(pos->row, MAX(0, wp->w_height - 1)); |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1328 wp->w_wcol = MIN(pos->col, MAX(0, wp->w_width - 1)); |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1329 wp->w_valid |= (VALID_WCOL|VALID_WROW); |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1330 } |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1331 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1332 /* |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1333 * Handle CTRL-W "": send register contents to the job. |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1334 */ |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1335 static void |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1336 term_paste_register(int prev_c UNUSED) |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1337 { |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1338 int c; |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1339 list_T *l; |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1340 listitem_T *item; |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1341 long reglen = 0; |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1342 int type; |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1343 |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1344 #ifdef FEAT_CMDL_INFO |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1345 if (add_to_showcmd(prev_c)) |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1346 if (add_to_showcmd('"')) |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1347 out_flush(); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1348 #endif |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1349 c = term_vgetc(); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1350 #ifdef FEAT_CMDL_INFO |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1351 clear_showcmd(); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1352 #endif |
12086
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1353 if (!term_use_loop()) |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1354 /* job finished while waiting for a character */ |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1355 return; |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1356 |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1357 /* CTRL-W "= prompt for expression to evaluate. */ |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1358 if (c == '=' && get_expr_register() != '=') |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1359 return; |
12086
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1360 if (!term_use_loop()) |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1361 /* job finished while waiting for a character */ |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1362 return; |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1363 |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1364 l = (list_T *)get_reg_contents(c, GREG_LIST); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1365 if (l != NULL) |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1366 { |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1367 type = get_reg_type(c, ®len); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1368 for (item = l->lv_first; item != NULL; item = item->li_next) |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1369 { |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1370 char_u *s = get_tv_string(&item->li_tv); |
12220
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1371 #ifdef WIN3264 |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1372 char_u *tmp = s; |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1373 |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1374 if (!enc_utf8 && enc_codepage > 0) |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1375 { |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1376 WCHAR *ret = NULL; |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1377 int length = 0; |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1378 |
12277
8b453c1299f7
patch 8.0.1018: warnings from 64-bit compiler
Christian Brabandt <cb@256bit.org>
parents:
12267
diff
changeset
|
1379 MultiByteToWideChar_alloc(enc_codepage, 0, (char *)s, |
8b453c1299f7
patch 8.0.1018: warnings from 64-bit compiler
Christian Brabandt <cb@256bit.org>
parents:
12267
diff
changeset
|
1380 (int)STRLEN(s), &ret, &length); |
12220
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1381 if (ret != NULL) |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1382 { |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1383 WideCharToMultiByte_alloc(CP_UTF8, 0, |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1384 ret, length, (char **)&s, &length, 0, 0); |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1385 vim_free(ret); |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1386 } |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1387 } |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1388 #endif |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1389 channel_send(curbuf->b_term->tl_job->jv_channel, PART_IN, |
12277
8b453c1299f7
patch 8.0.1018: warnings from 64-bit compiler
Christian Brabandt <cb@256bit.org>
parents:
12267
diff
changeset
|
1390 s, (int)STRLEN(s), NULL); |
12220
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1391 #ifdef WIN3264 |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1392 if (tmp != s) |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1393 vim_free(s); |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1394 #endif |
0ecfee22a2e2
patch 8.0.0990: with DBCS 'encoding' wrong pasting register into terminal
Christian Brabandt <cb@256bit.org>
parents:
12214
diff
changeset
|
1395 |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1396 if (item->li_next != NULL || type == MLINE) |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1397 channel_send(curbuf->b_term->tl_job->jv_channel, PART_IN, |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1398 (char_u *)"\r", 1, NULL); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1399 } |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1400 list_free(l); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1401 } |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1402 } |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1403 |
12082
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1404 #if defined(FEAT_GUI) || defined(PROTO) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1405 /* |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1406 * Return TRUE when the cursor of the terminal should be displayed. |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1407 */ |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1408 int |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1409 use_terminal_cursor() |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1410 { |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1411 return in_terminal_loop != NULL; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1412 } |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1413 |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1414 cursorentry_T * |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1415 term_get_cursor_shape(guicolor_T *fg, guicolor_T *bg) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1416 { |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1417 term_T *term = in_terminal_loop; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1418 static cursorentry_T entry; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1419 |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1420 vim_memset(&entry, 0, sizeof(entry)); |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1421 entry.shape = entry.mshape = |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1422 term->tl_cursor_shape == VTERM_PROP_CURSORSHAPE_UNDERLINE ? SHAPE_HOR : |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1423 term->tl_cursor_shape == VTERM_PROP_CURSORSHAPE_BAR_LEFT ? SHAPE_VER : |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1424 SHAPE_BLOCK; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1425 entry.percentage = 20; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1426 if (term->tl_cursor_blink) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1427 { |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1428 entry.blinkwait = 700; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1429 entry.blinkon = 400; |
12208
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
1430 entry.blinkoff = 250; |
12082
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1431 } |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1432 *fg = gui.back_pixel; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1433 if (term->tl_cursor_color == NULL) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1434 *bg = gui.norm_pixel; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1435 else |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1436 *bg = color_name2handle(term->tl_cursor_color); |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1437 entry.name = "n"; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1438 entry.used_for = SHAPE_CURSOR; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1439 |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1440 return &entry; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1441 } |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1442 #endif |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1443 |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1444 static int did_change_cursor = FALSE; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1445 |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1446 static void |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1447 may_set_cursor_props(term_T *term) |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1448 { |
12082
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1449 #ifdef FEAT_GUI |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1450 /* For the GUI the cursor properties are obtained with |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1451 * term_get_cursor_shape(). */ |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1452 if (gui.in_use) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1453 return; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1454 #endif |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1455 if (in_terminal_loop == term) |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1456 { |
12080
93024e778745
patch 8.0.0920: cursor wrong after switching altscreen in terminal
Christian Brabandt <cb@256bit.org>
parents:
12076
diff
changeset
|
1457 did_change_cursor = TRUE; |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1458 if (term->tl_cursor_color != NULL) |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1459 term_cursor_color(term->tl_cursor_color); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1460 else |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1461 term_cursor_color((char_u *)""); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1462 term_cursor_shape(term->tl_cursor_shape, term->tl_cursor_blink); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1463 } |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1464 } |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1465 |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1466 static void |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1467 may_restore_cursor_props(void) |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1468 { |
12082
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1469 #ifdef FEAT_GUI |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1470 if (gui.in_use) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1471 return; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1472 #endif |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1473 if (did_change_cursor) |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1474 { |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1475 did_change_cursor = FALSE; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1476 term_cursor_color((char_u *)""); |
12170
1345621ecdfb
patch 8.0.0965: not restoring cursor shape after it was set in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12160
diff
changeset
|
1477 /* this will restore the initial cursor style, if possible */ |
1345621ecdfb
patch 8.0.0965: not restoring cursor shape after it was set in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12160
diff
changeset
|
1478 ui_cursor_shape_forced(TRUE); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1479 } |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1480 } |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1481 |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1482 /* |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1483 * Returns TRUE if the current window contains a terminal and we are sending |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1484 * keys to the job. |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1485 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1486 int |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1487 term_use_loop(void) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1488 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1489 term_T *term = curbuf->b_term; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1490 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1491 return term != NULL |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1492 && !term->tl_normal_mode |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1493 && term->tl_vterm != NULL |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1494 && term_job_running(term); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1495 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1496 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1497 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1498 * Wait for input and send it to the job. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1499 * Return when the start of a CTRL-W command is typed or anything else that |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1500 * should be handled as a Normal mode command. |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1501 * Returns OK if a typed character is to be handled in Normal mode, FAIL if |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1502 * the terminal was closed. |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1503 */ |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1504 int |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1505 terminal_loop(void) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1506 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1507 int c; |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
1508 int termkey = 0; |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1509 int ret; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1510 |
12086
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1511 /* Remember the terminal we are sending keys to. However, the terminal |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1512 * might be closed while waiting for a character, e.g. typing "exit" in a |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1513 * shell and ++close was used. Therefore use curbuf->b_term instead of a |
69f2392e6cfb
patch 8.0.0923: crash in GUI when terminal job exits
Christian Brabandt <cb@256bit.org>
parents:
12082
diff
changeset
|
1514 * stored reference. */ |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1515 in_terminal_loop = curbuf->b_term; |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
1516 |
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
1517 if (*curwin->w_p_tk != NUL) |
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
1518 termkey = string_to_key(curwin->w_p_tk, TRUE); |
11878
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
1519 position_cursor(curwin, &curbuf->b_term->tl_cursor_pos); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1520 may_set_cursor_props(curbuf->b_term); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1521 |
12104
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1522 #ifdef UNIX |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1523 { |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1524 int part = get_tty_part(curbuf->b_term); |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
1525 int fd = curbuf->b_term->tl_job->jv_channel->ch_part[part].ch_fd; |
12104
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1526 |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1527 if (isatty(fd)) |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1528 { |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1529 ttyinfo_T info; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1530 |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1531 /* Get the current backspace and enter characters of the pty. */ |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1532 if (get_tty_info(fd, &info) == OK) |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1533 { |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1534 term_backspace_char = info.backspace; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1535 term_enter_char = info.enter; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1536 term_nl_does_cr = info.nl_does_cr; |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1537 } |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1538 } |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1539 } |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1540 #endif |
3bf5fe164a9f
patch 8.0.0932: terminal may not use right characters for BS and Enter
Christian Brabandt <cb@256bit.org>
parents:
12098
diff
changeset
|
1541 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1542 for (;;) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1543 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1544 /* TODO: skip screen update when handling a sequence of keys. */ |
11870
c29e498aa77d
patch 8.0.0815: terminal window not correctly updated
Christian Brabandt <cb@256bit.org>
parents:
11866
diff
changeset
|
1545 /* Repeat redrawing in case a message is received while redrawing. */ |
c29e498aa77d
patch 8.0.0815: terminal window not correctly updated
Christian Brabandt <cb@256bit.org>
parents:
11866
diff
changeset
|
1546 while (curwin->w_redr_type != 0) |
12441
854f49cf0abe
patch 8.0.1100: stuck in redraw loop when 'lazyredraw' is set
Christian Brabandt <cb@256bit.org>
parents:
12435
diff
changeset
|
1547 if (update_screen(0) == FAIL) |
854f49cf0abe
patch 8.0.1100: stuck in redraw loop when 'lazyredraw' is set
Christian Brabandt <cb@256bit.org>
parents:
12435
diff
changeset
|
1548 break; |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1549 update_cursor(curbuf->b_term, FALSE); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1550 |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1551 c = term_vgetc(); |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1552 if (!term_use_loop()) |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1553 /* job finished while waiting for a character */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1554 break; |
12082
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1555 if (c == K_IGNORE) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1556 continue; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1557 |
11919
cca097489de5
patch 8.0.0839: cannot kill a job in a terminal with CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
11917
diff
changeset
|
1558 #ifdef WIN3264 |
12074
ca55e69d9d1b
patch 8.0.0917: MS-Windows:CTRL-C handling in terminal window is wrong
Christian Brabandt <cb@256bit.org>
parents:
12072
diff
changeset
|
1559 /* On Windows winpty handles CTRL-C, don't send a CTRL_C_EVENT. |
12066
8ad282dee649
patch 8.0.0913: MS-Windows: CTRL-C kills shell in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12064
diff
changeset
|
1560 * Use CTRL-BREAK to kill the job. */ |
8ad282dee649
patch 8.0.0913: MS-Windows: CTRL-C kills shell in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12064
diff
changeset
|
1561 if (ctrl_break_was_pressed) |
8ad282dee649
patch 8.0.0913: MS-Windows: CTRL-C kills shell in terminal window
Christian Brabandt <cb@256bit.org>
parents:
12064
diff
changeset
|
1562 mch_signal_job(curbuf->b_term->tl_job, (char_u *)"kill"); |
11919
cca097489de5
patch 8.0.0839: cannot kill a job in a terminal with CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
11917
diff
changeset
|
1563 #endif |
cca097489de5
patch 8.0.0839: cannot kill a job in a terminal with CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
11917
diff
changeset
|
1564 |
11965
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1565 if (c == (termkey == 0 ? Ctrl_W : termkey) || c == Ctrl_BSL) |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
1566 { |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1567 int prev_c = c; |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1568 |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1569 #ifdef FEAT_CMDL_INFO |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1570 if (add_to_showcmd(c)) |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1571 out_flush(); |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1572 #endif |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1573 c = term_vgetc(); |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1574 #ifdef FEAT_CMDL_INFO |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1575 clear_showcmd(); |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1576 #endif |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1577 if (!term_use_loop()) |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1578 /* job finished while waiting for a character */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1579 break; |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1580 |
11965
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1581 if (prev_c == Ctrl_BSL) |
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1582 { |
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1583 if (c == Ctrl_N) |
11985
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
1584 { |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1585 /* CTRL-\ CTRL-N : go to Terminal-Normal mode. */ |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1586 term_enter_normal_mode(); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1587 ret = FAIL; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1588 goto theend; |
11985
d036c1c8537d
patch 8.0.0873: in terminal cannot use CTRL- CTRL-N to start Visual mode
Christian Brabandt <cb@256bit.org>
parents:
11983
diff
changeset
|
1589 } |
11965
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1590 /* Send both keys to the terminal. */ |
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1591 send_keys_to_term(curbuf->b_term, prev_c, TRUE); |
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1592 } |
12160
b80c0172d1a8
patch 8.0.0960: job in terminal does not get CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
12154
diff
changeset
|
1593 else if (c == Ctrl_C) |
b80c0172d1a8
patch 8.0.0960: job in terminal does not get CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
12154
diff
changeset
|
1594 { |
b80c0172d1a8
patch 8.0.0960: job in terminal does not get CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
12154
diff
changeset
|
1595 /* "CTRL-W CTRL-C" or 'termkey' CTRL-C: end the job */ |
b80c0172d1a8
patch 8.0.0960: job in terminal does not get CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
12154
diff
changeset
|
1596 mch_signal_job(curbuf->b_term->tl_job, (char_u *)"kill"); |
b80c0172d1a8
patch 8.0.0960: job in terminal does not get CTRL-C
Christian Brabandt <cb@256bit.org>
parents:
12154
diff
changeset
|
1597 } |
11965
a932d3da41c8
patch 8.0.0863: a remote command does not work in the terminal window
Christian Brabandt <cb@256bit.org>
parents:
11958
diff
changeset
|
1598 else if (termkey == 0 && c == '.') |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1599 { |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1600 /* "CTRL-W .": send CTRL-W to the job */ |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1601 c = Ctrl_W; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1602 } |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1603 else if (c == 'N') |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1604 { |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1605 /* CTRL-W N : go to Terminal-Normal mode. */ |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1606 term_enter_normal_mode(); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1607 ret = FAIL; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1608 goto theend; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1609 } |
11886
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1610 else if (c == '"') |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1611 { |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1612 term_paste_register(prev_c); |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1613 continue; |
7928d62d29ee
patch 8.0.0823: cannot paste text into a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11882
diff
changeset
|
1614 } |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1615 else if (termkey == 0 || c != termkey) |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1616 { |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1617 stuffcharReadbuff(Ctrl_W); |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1618 stuffcharReadbuff(c); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1619 ret = OK; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1620 goto theend; |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
1621 } |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
1622 } |
12208
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
1623 # ifdef WIN3264 |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1624 if (!enc_utf8 && has_mbyte && c >= 0x80) |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1625 { |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1626 WCHAR wc; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1627 char_u mb[3]; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1628 |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1629 mb[0] = (unsigned)c >> 8; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1630 mb[1] = c; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1631 if (MultiByteToWideChar(GetACP(), 0, (char*)mb, 2, &wc, 1) > 0) |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1632 c = wc; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1633 } |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1634 # endif |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1635 if (send_keys_to_term(curbuf->b_term, c, TRUE) != OK) |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1636 { |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1637 ret = OK; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1638 goto theend; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1639 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1640 } |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1641 ret = FAIL; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1642 |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1643 theend: |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1644 in_terminal_loop = NULL; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1645 may_restore_cursor_props(); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1646 return ret; |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1647 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1648 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1649 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1650 * Called when a job has finished. |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
1651 * This updates the title and status, but does not close the vterm, because |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1652 * there might still be pending output in the channel. |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1653 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1654 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1655 term_job_ended(job_T *job) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1656 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1657 term_T *term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1658 int did_one = FALSE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1659 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1660 for (term = first_term; term != NULL; term = term->tl_next) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1661 if (term->tl_job == job) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1662 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1663 vim_free(term->tl_title); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1664 term->tl_title = NULL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1665 vim_free(term->tl_status_text); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1666 term->tl_status_text = NULL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1667 redraw_buf_and_status_later(term->tl_buffer, VALID); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1668 did_one = TRUE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1669 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1670 if (did_one) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1671 redraw_statuslines(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1672 if (curbuf->b_term != NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1673 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1674 if (curbuf->b_term->tl_job == job) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1675 maketitle(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1676 update_cursor(curbuf->b_term, TRUE); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1677 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1678 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1679 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1680 static void |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1681 may_toggle_cursor(term_T *term) |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1682 { |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1683 if (in_terminal_loop == term) |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1684 { |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1685 if (term->tl_cursor_visible) |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1686 cursor_on(); |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1687 else |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1688 cursor_off(); |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1689 } |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1690 } |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1691 |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1692 /* |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1693 * Reverse engineer the RGB value into a cterm color index. |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1694 * First color is 1. Return 0 if no match found. |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1695 */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1696 static int |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1697 color2index(VTermColor *color, int fg, int *boldp) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1698 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1699 int red = color->red; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1700 int blue = color->blue; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1701 int green = color->green; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1702 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1703 /* The argument for lookup_color() is for the color_names[] table. */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1704 if (red == 0) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1705 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1706 if (green == 0) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1707 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1708 if (blue == 0) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1709 return lookup_color(0, fg, boldp) + 1; /* black */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1710 if (blue == 224) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1711 return lookup_color(1, fg, boldp) + 1; /* dark blue */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1712 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1713 else if (green == 224) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1714 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1715 if (blue == 0) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1716 return lookup_color(2, fg, boldp) + 1; /* dark green */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1717 if (blue == 224) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1718 return lookup_color(3, fg, boldp) + 1; /* dark cyan */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1719 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1720 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1721 else if (red == 224) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1722 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1723 if (green == 0) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1724 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1725 if (blue == 0) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1726 return lookup_color(4, fg, boldp) + 1; /* dark red */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1727 if (blue == 224) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1728 return lookup_color(5, fg, boldp) + 1; /* dark magenta */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1729 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1730 else if (green == 224) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1731 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1732 if (blue == 0) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1733 return lookup_color(6, fg, boldp) + 1; /* dark yellow / brown */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1734 if (blue == 224) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1735 return lookup_color(8, fg, boldp) + 1; /* white / light grey */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1736 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1737 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1738 else if (red == 128) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1739 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1740 if (green == 128 && blue == 128) |
12445
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
1741 return lookup_color(12, fg, boldp) + 1; /* dark grey */ |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1742 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1743 else if (red == 255) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1744 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1745 if (green == 64) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1746 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1747 if (blue == 64) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1748 return lookup_color(20, fg, boldp) + 1; /* light red */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1749 if (blue == 255) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1750 return lookup_color(22, fg, boldp) + 1; /* light magenta */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1751 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1752 else if (green == 255) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1753 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1754 if (blue == 64) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1755 return lookup_color(24, fg, boldp) + 1; /* yellow */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1756 if (blue == 255) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1757 return lookup_color(26, fg, boldp) + 1; /* white */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1758 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1759 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1760 else if (red == 64) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1761 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1762 if (green == 64) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1763 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1764 if (blue == 255) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1765 return lookup_color(14, fg, boldp) + 1; /* light blue */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1766 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1767 else if (green == 255) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1768 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1769 if (blue == 64) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1770 return lookup_color(16, fg, boldp) + 1; /* light green */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1771 if (blue == 255) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1772 return lookup_color(18, fg, boldp) + 1; /* light cyan */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1773 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1774 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1775 if (t_colors >= 256) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1776 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1777 if (red == blue && red == green) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1778 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1779 /* 24-color greyscale */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1780 static int cutoff[23] = { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1781 0x05, 0x10, 0x1B, 0x26, 0x31, 0x3C, 0x47, 0x52, |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1782 0x5D, 0x68, 0x73, 0x7F, 0x8A, 0x95, 0xA0, 0xAB, |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1783 0xB6, 0xC1, 0xCC, 0xD7, 0xE2, 0xED, 0xF9}; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1784 int i; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1785 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1786 for (i = 0; i < 23; ++i) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1787 if (red < cutoff[i]) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1788 return i + 233; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1789 return 256; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1790 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1791 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1792 /* 216-color cube */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1793 return 17 + ((red + 25) / 0x33) * 36 |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
1794 + ((green + 25) / 0x33) * 6 |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1795 + (blue + 25) / 0x33; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1796 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1797 return 0; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1798 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1799 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1800 /* |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1801 * Convert the attributes of a vterm cell into an attribute index. |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1802 */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1803 static int |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1804 cell2attr(VTermScreenCellAttrs cellattrs, VTermColor cellfg, VTermColor cellbg) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1805 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1806 int attr = 0; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1807 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1808 if (cellattrs.bold) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1809 attr |= HL_BOLD; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1810 if (cellattrs.underline) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1811 attr |= HL_UNDERLINE; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1812 if (cellattrs.italic) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1813 attr |= HL_ITALIC; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1814 if (cellattrs.strike) |
12317
2a8890b80923
patch 8.0.1038: strike-through text not supported
Christian Brabandt <cb@256bit.org>
parents:
12313
diff
changeset
|
1815 attr |= HL_STRIKETHROUGH; |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1816 if (cellattrs.reverse) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1817 attr |= HL_INVERSE; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1818 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1819 #ifdef FEAT_GUI |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1820 if (gui.in_use) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1821 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1822 guicolor_T fg, bg; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1823 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1824 fg = gui_mch_get_rgb_color(cellfg.red, cellfg.green, cellfg.blue); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1825 bg = gui_mch_get_rgb_color(cellbg.red, cellbg.green, cellbg.blue); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1826 return get_gui_attr_idx(attr, fg, bg); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1827 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1828 else |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1829 #endif |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1830 #ifdef FEAT_TERMGUICOLORS |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1831 if (p_tgc) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1832 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1833 guicolor_T fg, bg; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1834 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1835 fg = gui_get_rgb_color_cmn(cellfg.red, cellfg.green, cellfg.blue); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1836 bg = gui_get_rgb_color_cmn(cellbg.red, cellbg.green, cellbg.blue); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1837 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1838 return get_tgc_attr_idx(attr, fg, bg); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1839 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1840 else |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1841 #endif |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1842 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1843 int bold = MAYBE; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1844 int fg = color2index(&cellfg, TRUE, &bold); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1845 int bg = color2index(&cellbg, FALSE, &bold); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1846 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1847 /* with 8 colors set the bold attribute to get a bright foreground */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1848 if (bold == TRUE) |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1849 attr |= HL_BOLD; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1850 return get_cterm_attr_idx(attr, fg, bg); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1851 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1852 return 0; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1853 } |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1854 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1855 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1856 handle_damage(VTermRect rect, void *user) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1857 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1858 term_T *term = (term_T *)user; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1859 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1860 term->tl_dirty_row_start = MIN(term->tl_dirty_row_start, rect.start_row); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1861 term->tl_dirty_row_end = MAX(term->tl_dirty_row_end, rect.end_row); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1862 redraw_buf_later(term->tl_buffer, NOT_VALID); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1863 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1864 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1865 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1866 static int |
12116
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1867 handle_moverect(VTermRect dest, VTermRect src, void *user) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1868 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1869 term_T *term = (term_T *)user; |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1870 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1871 /* Scrolling up is done much more efficiently by deleting lines instead of |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1872 * redrawing the text. */ |
12116
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1873 if (dest.start_col == src.start_col |
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1874 && dest.end_col == src.end_col |
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1875 && dest.start_row < src.start_row) |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1876 { |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1877 win_T *wp; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1878 VTermColor fg, bg; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1879 VTermScreenCellAttrs attr; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1880 int clear_attr; |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1881 |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1882 /* Set the color to clear lines with. */ |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1883 vterm_state_get_default_colors(vterm_obtain_state(term->tl_vterm), |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1884 &fg, &bg); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1885 vim_memset(&attr, 0, sizeof(attr)); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1886 clear_attr = cell2attr(attr, fg, bg); |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1887 |
12116
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1888 FOR_ALL_WINDOWS(wp) |
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1889 { |
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1890 if (wp->w_buffer == term->tl_buffer) |
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1891 win_del_lines(wp, dest.start_row, |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1892 src.start_row - dest.start_row, FALSE, FALSE, |
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1893 clear_attr); |
12116
237bb67962a0
patch 8.0.0938: scrolling in terminal window is inefficient
Christian Brabandt <cb@256bit.org>
parents:
12104
diff
changeset
|
1894 } |
12152
69af108df70e
patch 8.0.0956: scrolling in a terminal window has flicker
Christian Brabandt <cb@256bit.org>
parents:
12146
diff
changeset
|
1895 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1896 redraw_buf_later(term->tl_buffer, NOT_VALID); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1897 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1898 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1899 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1900 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1901 handle_movecursor( |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1902 VTermPos pos, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1903 VTermPos oldpos UNUSED, |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1904 int visible, |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1905 void *user) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1906 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1907 term_T *term = (term_T *)user; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1908 win_T *wp; |
11874
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1909 |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1910 term->tl_cursor_pos = pos; |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1911 term->tl_cursor_visible = visible; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1912 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1913 FOR_ALL_WINDOWS(wp) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1914 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1915 if (wp->w_buffer == term->tl_buffer) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1916 position_cursor(wp, &pos); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1917 } |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
1918 if (term->tl_buffer == curbuf && !term->tl_normal_mode) |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1919 { |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1920 may_toggle_cursor(term); |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
1921 update_cursor(term, term->tl_cursor_visible); |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1922 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1923 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1924 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1925 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1926 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1927 static int |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1928 handle_settermprop( |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1929 VTermProp prop, |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1930 VTermValue *value, |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1931 void *user) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1932 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1933 term_T *term = (term_T *)user; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1934 |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1935 switch (prop) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1936 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1937 case VTERM_PROP_TITLE: |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1938 vim_free(term->tl_title); |
12094
125994e132c7
patch 8.0.0927: if a terminal job sends a blank title "running" is not shown
Christian Brabandt <cb@256bit.org>
parents:
12092
diff
changeset
|
1939 /* a blank title isn't useful, make it empty, so that "running" is |
125994e132c7
patch 8.0.0927: if a terminal job sends a blank title "running" is not shown
Christian Brabandt <cb@256bit.org>
parents:
12092
diff
changeset
|
1940 * displayed */ |
125994e132c7
patch 8.0.0927: if a terminal job sends a blank title "running" is not shown
Christian Brabandt <cb@256bit.org>
parents:
12092
diff
changeset
|
1941 if (*skipwhite((char_u *)value->string) == NUL) |
125994e132c7
patch 8.0.0927: if a terminal job sends a blank title "running" is not shown
Christian Brabandt <cb@256bit.org>
parents:
12092
diff
changeset
|
1942 term->tl_title = NULL; |
12224
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1943 #ifdef WIN3264 |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1944 else if (!enc_utf8 && enc_codepage > 0) |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1945 { |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1946 WCHAR *ret = NULL; |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1947 int length = 0; |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1948 |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1949 MultiByteToWideChar_alloc(CP_UTF8, 0, |
12277
8b453c1299f7
patch 8.0.1018: warnings from 64-bit compiler
Christian Brabandt <cb@256bit.org>
parents:
12267
diff
changeset
|
1950 (char*)value->string, (int)STRLEN(value->string), |
12224
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1951 &ret, &length); |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1952 if (ret != NULL) |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1953 { |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1954 WideCharToMultiByte_alloc(enc_codepage, 0, |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1955 ret, length, (char**)&term->tl_title, |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1956 &length, 0, 0); |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1957 vim_free(ret); |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1958 } |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1959 } |
bccf3de74724
patch 8.0.0992: terminal title is wrong when 'encoding' is DBCS
Christian Brabandt <cb@256bit.org>
parents:
12222
diff
changeset
|
1960 #endif |
12094
125994e132c7
patch 8.0.0927: if a terminal job sends a blank title "running" is not shown
Christian Brabandt <cb@256bit.org>
parents:
12092
diff
changeset
|
1961 else |
125994e132c7
patch 8.0.0927: if a terminal job sends a blank title "running" is not shown
Christian Brabandt <cb@256bit.org>
parents:
12092
diff
changeset
|
1962 term->tl_title = vim_strsave((char_u *)value->string); |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1963 vim_free(term->tl_status_text); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1964 term->tl_status_text = NULL; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1965 if (term == curbuf->b_term) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1966 maketitle(); |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1967 break; |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1968 |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1969 case VTERM_PROP_CURSORVISIBLE: |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1970 term->tl_cursor_visible = value->boolean; |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1971 may_toggle_cursor(term); |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1972 out_flush(); |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1973 break; |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1974 |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1975 case VTERM_PROP_CURSORBLINK: |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1976 term->tl_cursor_blink = value->boolean; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1977 may_set_cursor_props(term); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1978 break; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1979 |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1980 case VTERM_PROP_CURSORSHAPE: |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1981 term->tl_cursor_shape = value->number; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1982 may_set_cursor_props(term); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1983 break; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1984 |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1985 case VTERM_PROP_CURSORCOLOR: |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1986 vim_free(term->tl_cursor_color); |
12082
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1987 if (*value->string == NUL) |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1988 term->tl_cursor_color = NULL; |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1989 else |
504df4aa84c6
patch 8.0.0921: terminal window cursor shape not supported in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12080
diff
changeset
|
1990 term->tl_cursor_color = vim_strsave((char_u *)value->string); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1991 may_set_cursor_props(term); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1992 break; |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
1993 |
12035
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
1994 case VTERM_PROP_ALTSCREEN: |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
1995 /* TODO: do anything else? */ |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
1996 term->tl_using_altscreen = value->boolean; |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
1997 break; |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
1998 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1999 default: |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2000 break; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2001 } |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
2002 /* Always return 1, otherwise vterm doesn't store the value internally. */ |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
2003 return 1; |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2004 } |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2005 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2006 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2007 * The job running in the terminal resized the terminal. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2008 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2009 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2010 handle_resize(int rows, int cols, void *user) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2011 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2012 term_T *term = (term_T *)user; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2013 win_T *wp; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2014 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2015 term->tl_rows = rows; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2016 term->tl_cols = cols; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2017 FOR_ALL_WINDOWS(wp) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2018 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2019 if (wp->w_buffer == term->tl_buffer) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2020 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2021 win_setheight_win(rows, wp); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2022 win_setwidth_win(cols, wp); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2023 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2024 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2025 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2026 redraw_buf_later(term->tl_buffer, NOT_VALID); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2027 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2028 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2029 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2030 /* |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2031 * Handle a line that is pushed off the top of the screen. |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2032 */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2033 static int |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2034 handle_pushline(int cols, const VTermScreenCell *cells, void *user) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2035 { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2036 term_T *term = (term_T *)user; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2037 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2038 /* TODO: Limit the number of lines that are stored. */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2039 if (ga_grow(&term->tl_scrollback, 1) == OK) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2040 { |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2041 cellattr_T *p = NULL; |
11840
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2042 int len = 0; |
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2043 int i; |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2044 int c; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2045 int col; |
11840
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2046 sb_line_T *line; |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2047 garray_T ga; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2048 cellattr_T fill_attr = term->tl_default_color; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2049 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2050 /* do not store empty cells at the end */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2051 for (i = 0; i < cols; ++i) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2052 if (cells[i].chars[0] != 0) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2053 len = i + 1; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2054 else |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2055 cell2cellattr(&cells[i], &fill_attr); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2056 |
12021
a7457aed7e80
patch 8.0.0891: uninitialized memory use with empty line in terminal
Christian Brabandt <cb@256bit.org>
parents:
12017
diff
changeset
|
2057 ga_init2(&ga, 1, 100); |
11840
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2058 if (len > 0) |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2059 p = (cellattr_T *)alloc((int)sizeof(cellattr_T) * len); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2060 if (p != NULL) |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2061 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2062 for (col = 0; col < len; col += cells[col].width) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2063 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2064 if (ga_grow(&ga, MB_MAXBYTES) == FAIL) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2065 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2066 ga.ga_len = 0; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2067 break; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2068 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2069 for (i = 0; (c = cells[col].chars[i]) > 0 || i == 0; ++i) |
12222
43f03e584002
patch 8.0.0991: using wrong character conversion for DBCS
Christian Brabandt <cb@256bit.org>
parents:
12220
diff
changeset
|
2070 ga.ga_len += utf_char2bytes(c == NUL ? ' ' : c, |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2071 (char_u *)ga.ga_data + ga.ga_len); |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2072 cell2cellattr(&cells[col], &p[col]); |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2073 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2074 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2075 if (ga_grow(&ga, 1) == FAIL) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2076 add_scrollback_line_to_buffer(term, (char_u *)"", 0); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2077 else |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2078 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2079 *((char_u *)ga.ga_data + ga.ga_len) = NUL; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2080 add_scrollback_line_to_buffer(term, ga.ga_data, ga.ga_len); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2081 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2082 ga_clear(&ga); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2083 |
11840
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2084 line = (sb_line_T *)term->tl_scrollback.ga_data |
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2085 + term->tl_scrollback.ga_len; |
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2086 line->sb_cols = len; |
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2087 line->sb_cells = p; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2088 line->sb_fill_attr = fill_attr; |
11840
3c1f89d85151
patch 8.0.0800 Problem: Terminal window scrollback contents is wrong. Solution: Fix handling of multi-byte characters (Yasuhiro Matsumoto) Handle empty lines correctly. (closes #1891)
Christian Brabandt <cb@256bit.org>
parents:
11838
diff
changeset
|
2089 ++term->tl_scrollback.ga_len; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2090 ++term->tl_scrollback_scrolled; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2091 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2092 return 0; /* ignored */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2093 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2094 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2095 static VTermScreenCallbacks screen_callbacks = { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2096 handle_damage, /* damage */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2097 handle_moverect, /* moverect */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2098 handle_movecursor, /* movecursor */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2099 handle_settermprop, /* settermprop */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2100 NULL, /* bell */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2101 handle_resize, /* resize */ |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2102 handle_pushline, /* sb_pushline */ |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2103 NULL /* sb_popline */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2104 }; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2105 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2106 /* |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2107 * Called when a channel has been closed. |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2108 * If this was a channel for a terminal window then finish it up. |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2109 */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2110 void |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2111 term_channel_closed(channel_T *ch) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2112 { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2113 term_T *term; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2114 int did_one = FALSE; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2115 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2116 for (term = first_term; term != NULL; term = term->tl_next) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2117 if (term->tl_job == ch->ch_job) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2118 { |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2119 term->tl_channel_closed = TRUE; |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2120 did_one = TRUE; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2121 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2122 vim_free(term->tl_title); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2123 term->tl_title = NULL; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2124 vim_free(term->tl_status_text); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2125 term->tl_status_text = NULL; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2126 |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2127 /* Unless in Terminal-Normal mode: clear the vterm. */ |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2128 if (!term->tl_normal_mode) |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2129 { |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2130 int fnum = term->tl_buffer->b_fnum; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2131 |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2132 cleanup_vterm(term); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2133 |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2134 if (term->tl_finish == 'c') |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2135 { |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2136 /* ++close or term_finish == "close" */ |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
2137 ch_log(NULL, "terminal job finished, closing window"); |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2138 curbuf = term->tl_buffer; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2139 do_bufdel(DOBUF_WIPE, (char_u *)"", 1, fnum, fnum, FALSE); |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2140 break; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2141 } |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2142 if (term->tl_finish == 'o' && term->tl_buffer->b_nwindows == 0) |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2143 { |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2144 char buf[50]; |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2145 |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2146 /* TODO: use term_opencmd */ |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
2147 ch_log(NULL, "terminal job finished, opening window"); |
12072
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
2148 vim_snprintf(buf, sizeof(buf), |
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
2149 term->tl_opencmd == NULL |
12074
ca55e69d9d1b
patch 8.0.0917: MS-Windows:CTRL-C handling in terminal window is wrong
Christian Brabandt <cb@256bit.org>
parents:
12072
diff
changeset
|
2150 ? "botright sbuf %d" |
ca55e69d9d1b
patch 8.0.0917: MS-Windows:CTRL-C handling in terminal window is wrong
Christian Brabandt <cb@256bit.org>
parents:
12072
diff
changeset
|
2151 : (char *)term->tl_opencmd, fnum); |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2152 do_cmdline_cmd((char_u *)buf); |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2153 } |
12064
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
2154 else |
407a475c67fd
patch 8.0.0912: cannot run a job in a hidden terminal
Christian Brabandt <cb@256bit.org>
parents:
12060
diff
changeset
|
2155 ch_log(NULL, "terminal job finished"); |
12031
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2156 } |
9897241c08b5
patch 8.0.0896: cannot close a terminal window when the job ends
Christian Brabandt <cb@256bit.org>
parents:
12025
diff
changeset
|
2157 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2158 redraw_buf_and_status_later(term->tl_buffer, NOT_VALID); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2159 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2160 if (did_one) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2161 { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2162 redraw_statuslines(); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2163 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2164 /* Need to break out of vgetc(). */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2165 ins_char_typebuf(K_IGNORE); |
11949
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
2166 typebuf_was_filled = TRUE; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2167 |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
2168 term = curbuf->b_term; |
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
2169 if (term != NULL) |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2170 { |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
2171 if (term->tl_job == ch->ch_job) |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2172 maketitle(); |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
2173 update_cursor(term, term->tl_cursor_visible); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2174 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2175 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2176 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2177 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2178 /* |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2179 * Called to update a window that contains an active terminal. |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2180 * Returns FAIL when there is no terminal running in this window or in |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2181 * Terminal-Normal mode. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
2182 */ |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2183 int |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2184 term_update_window(win_T *wp) |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
2185 { |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2186 term_T *term = wp->w_buffer->b_term; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2187 VTerm *vterm; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2188 VTermScreen *screen; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2189 VTermState *state; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2190 VTermPos pos; |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
2191 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2192 if (term == NULL || term->tl_vterm == NULL || term->tl_normal_mode) |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2193 return FAIL; |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2194 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2195 vterm = term->tl_vterm; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2196 screen = vterm_obtain_screen(vterm); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2197 state = vterm_obtain_state(vterm); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2198 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2199 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2200 * If the window was resized a redraw will be triggered and we get here. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2201 * Adjust the size of the vterm unless 'termsize' specifies a fixed size. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2202 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2203 if ((!term->tl_rows_fixed && term->tl_rows != wp->w_height) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2204 || (!term->tl_cols_fixed && term->tl_cols != wp->w_width)) |
11741
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
2205 { |
11818
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2206 int rows = term->tl_rows_fixed ? term->tl_rows : wp->w_height; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2207 int cols = term->tl_cols_fixed ? term->tl_cols : wp->w_width; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2208 win_T *twp; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2209 |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2210 FOR_ALL_WINDOWS(twp) |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2211 { |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2212 /* When more than one window shows the same terminal, use the |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2213 * smallest size. */ |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2214 if (twp->w_buffer == term->tl_buffer) |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2215 { |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2216 if (!term->tl_rows_fixed && rows > twp->w_height) |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2217 rows = twp->w_height; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2218 if (!term->tl_cols_fixed && cols > twp->w_width) |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2219 cols = twp->w_width; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2220 } |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
2221 } |
11741
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
2222 |
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
2223 vterm_set_size(vterm, rows, cols); |
11937
c893d6c00497
patch 8.0.0848: using multiple ch_log functions is clumsy
Christian Brabandt <cb@256bit.org>
parents:
11933
diff
changeset
|
2224 ch_log(term->tl_job->jv_channel, "Resizing terminal to %d lines", |
11741
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
2225 rows); |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2226 term_report_winsize(term, rows, cols); |
11741
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
2227 } |
11713
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
2228 |
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
2229 /* The cursor may have been moved when resizing. */ |
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
2230 vterm_state_get_cursorpos(state, &pos); |
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
2231 position_cursor(wp, &pos); |
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
2232 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2233 /* TODO: Only redraw what changed. */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2234 for (pos.row = 0; pos.row < wp->w_height; ++pos.row) |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
2235 { |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2236 int off = screen_get_current_line_off(); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2237 int max_col = MIN(wp->w_width, term->tl_cols); |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
2238 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2239 if (pos.row < term->tl_rows) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2240 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2241 for (pos.col = 0; pos.col < max_col; ) |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2242 { |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2243 VTermScreenCell cell; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2244 int c; |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
2245 |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2246 if (vterm_screen_get_cell(screen, pos, &cell) == 0) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2247 vim_memset(&cell, 0, sizeof(cell)); |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2248 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2249 /* TODO: composing chars */ |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2250 c = cell.chars[0]; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2251 if (c == NUL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2252 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2253 ScreenLines[off] = ' '; |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
2254 if (enc_utf8) |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
2255 ScreenLinesUC[off] = NUL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2256 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2257 else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2258 { |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2259 if (enc_utf8) |
11725
22cef8face93
patch 8.0.0745: multi-byte characters in a terminal don't display well
Christian Brabandt <cb@256bit.org>
parents:
11723
diff
changeset
|
2260 { |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2261 if (c >= 0x80) |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2262 { |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2263 ScreenLines[off] = ' '; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2264 ScreenLinesUC[off] = c; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2265 } |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2266 else |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2267 { |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2268 ScreenLines[off] = c; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2269 ScreenLinesUC[off] = NUL; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2270 } |
11725
22cef8face93
patch 8.0.0745: multi-byte characters in a terminal don't display well
Christian Brabandt <cb@256bit.org>
parents:
11723
diff
changeset
|
2271 } |
12212
3ed8bcc9a013
patch 8.0.0986: terminal feature always requires multi-byte feature
Christian Brabandt <cb@256bit.org>
parents:
12208
diff
changeset
|
2272 #ifdef WIN3264 |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2273 else if (has_mbyte && c >= 0x80) |
11725
22cef8face93
patch 8.0.0745: multi-byte characters in a terminal don't display well
Christian Brabandt <cb@256bit.org>
parents:
11723
diff
changeset
|
2274 { |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2275 char_u mb[MB_MAXBYTES+1]; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2276 WCHAR wc = c; |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2277 |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2278 if (WideCharToMultiByte(GetACP(), 0, &wc, 1, |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2279 (char*)mb, 2, 0, 0) > 1) |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2280 { |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2281 ScreenLines[off] = mb[0]; |
12214
d2eea20ee14a
patch 8.0.0987: terminal: second byte of double-byte char wrong
Christian Brabandt <cb@256bit.org>
parents:
12212
diff
changeset
|
2282 ScreenLines[off + 1] = mb[1]; |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2283 cell.width = mb_ptr2cells(mb); |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2284 } |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2285 else |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2286 ScreenLines[off] = c; |
11725
22cef8face93
patch 8.0.0745: multi-byte characters in a terminal don't display well
Christian Brabandt <cb@256bit.org>
parents:
11723
diff
changeset
|
2287 } |
12212
3ed8bcc9a013
patch 8.0.0986: terminal feature always requires multi-byte feature
Christian Brabandt <cb@256bit.org>
parents:
12208
diff
changeset
|
2288 #endif |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2289 else |
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2290 ScreenLines[off] = c; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2291 } |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2292 ScreenAttrs[off] = cell2attr(cell.attrs, cell.fg, cell.bg); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2293 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2294 ++pos.col; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2295 ++off; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2296 if (cell.width == 2) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2297 { |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
2298 if (enc_utf8) |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
2299 ScreenLinesUC[off] = NUL; |
12214
d2eea20ee14a
patch 8.0.0987: terminal: second byte of double-byte char wrong
Christian Brabandt <cb@256bit.org>
parents:
12212
diff
changeset
|
2300 |
d2eea20ee14a
patch 8.0.0987: terminal: second byte of double-byte char wrong
Christian Brabandt <cb@256bit.org>
parents:
12212
diff
changeset
|
2301 /* don't set the second byte to NUL for a DBCS encoding, it |
d2eea20ee14a
patch 8.0.0987: terminal: second byte of double-byte char wrong
Christian Brabandt <cb@256bit.org>
parents:
12212
diff
changeset
|
2302 * has been set above */ |
d2eea20ee14a
patch 8.0.0987: terminal: second byte of double-byte char wrong
Christian Brabandt <cb@256bit.org>
parents:
12212
diff
changeset
|
2303 if (enc_utf8 || !has_mbyte) |
12204
b49b03085f39
patch 8.0.0982: cannot use a terminal when 'encoding' is non-utf8 multi-byte
Christian Brabandt <cb@256bit.org>
parents:
12202
diff
changeset
|
2304 ScreenLines[off] = NUL; |
12214
d2eea20ee14a
patch 8.0.0987: terminal: second byte of double-byte char wrong
Christian Brabandt <cb@256bit.org>
parents:
12212
diff
changeset
|
2305 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2306 ++pos.col; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2307 ++off; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2308 } |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2309 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2310 } |
11711
dac96f8800be
patch 8.0.0738: cannot use the mouse to resize a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11694
diff
changeset
|
2311 else |
dac96f8800be
patch 8.0.0738: cannot use the mouse to resize a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11694
diff
changeset
|
2312 pos.col = 0; |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
2313 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2314 screen_line(wp->w_winrow + pos.row, wp->w_wincol, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2315 pos.col, wp->w_width, FALSE); |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
2316 } |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2317 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
2318 return OK; |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
2319 } |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
2320 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2321 /* |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2322 * Return TRUE if "wp" is a terminal window where the job has finished. |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2323 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2324 int |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2325 term_is_finished(buf_T *buf) |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2326 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2327 return buf->b_term != NULL && buf->b_term->tl_vterm == NULL; |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2328 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2329 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2330 /* |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2331 * Return TRUE if "wp" is a terminal window where the job has finished or we |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2332 * are in Terminal-Normal mode, thus we show the buffer contents. |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2333 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2334 int |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2335 term_show_buffer(buf_T *buf) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2336 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2337 term_T *term = buf->b_term; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2338 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2339 return term != NULL && (term->tl_vterm == NULL || term->tl_normal_mode); |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2340 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2341 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2342 /* |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2343 * The current buffer is going to be changed. If there is terminal |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2344 * highlighting remove it now. |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2345 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2346 void |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2347 term_change_in_curbuf(void) |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2348 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2349 term_T *term = curbuf->b_term; |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2350 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2351 if (term_is_finished(curbuf) && term->tl_scrollback.ga_len > 0) |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2352 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2353 free_scrollback(term); |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2354 redraw_buf_later(term->tl_buffer, NOT_VALID); |
11912
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
2355 |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
2356 /* The buffer is now like a normal buffer, it cannot be easily |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
2357 * abandoned when changed. */ |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
2358 set_string_option_direct((char_u *)"buftype", -1, |
22658e33203f
patch 8.0.0836: can abandon a terminal buffer after making a change
Christian Brabandt <cb@256bit.org>
parents:
11904
diff
changeset
|
2359 (char_u *)"", OPT_FREE|OPT_LOCAL, 0); |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2360 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2361 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2362 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2363 /* |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2364 * Get the screen attribute for a position in the buffer. |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2365 * Use a negative "col" to get the filler background color. |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2366 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2367 int |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2368 term_get_attr(buf_T *buf, linenr_T lnum, int col) |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2369 { |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2370 term_T *term = buf->b_term; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2371 sb_line_T *line; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2372 cellattr_T *cellattr; |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2373 |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2374 if (lnum > term->tl_scrollback.ga_len) |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2375 cellattr = &term->tl_default_color; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2376 else |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2377 { |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2378 line = (sb_line_T *)term->tl_scrollback.ga_data + lnum - 1; |
12435
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2379 if (col < 0 || col >= line->sb_cols) |
40961647f547
patch 8.0.1097: background color wrong if job changes background color
Christian Brabandt <cb@256bit.org>
parents:
12433
diff
changeset
|
2380 cellattr = &line->sb_fill_attr; |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2381 else |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2382 cellattr = line->sb_cells + col; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2383 } |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2384 return cell2attr(cellattr->attrs, cellattr->fg, cellattr->bg); |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2385 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2386 |
12445
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2387 static VTermColor ansi_table[16] = { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2388 { 0, 0, 0}, /* black */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2389 {224, 0, 0}, /* dark red */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2390 { 0, 224, 0}, /* dark green */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2391 {224, 224, 0}, /* dark yellow / brown */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2392 { 0, 0, 224}, /* dark blue */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2393 {224, 0, 224}, /* dark magenta */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2394 { 0, 224, 224}, /* dark cyan */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2395 {224, 224, 224}, /* light grey */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2396 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2397 {128, 128, 128}, /* dark grey */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2398 {255, 64, 64}, /* light red */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2399 { 64, 255, 64}, /* light green */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2400 {255, 255, 64}, /* yellow */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2401 { 64, 64, 255}, /* light blue */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2402 {255, 64, 255}, /* light magenta */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2403 { 64, 255, 255}, /* light cyan */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2404 {255, 255, 255}, /* white */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2405 }; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2406 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2407 static int cube_value[] = { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2408 0x00, 0x33, 0x66, 0x99, 0xCC, 0xFF, |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2409 }; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2410 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2411 static int grey_ramp[] = { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2412 0x00, 0x0B, 0x16, 0x21, 0x2C, 0x37, 0x42, 0x4D, 0x58, 0x63, 0x6E, 0x79, |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2413 0x85, 0x90, 0x9B, 0xA6, 0xB1, 0xBC, 0xC7, 0xD2, 0xDD, 0xE8, 0xF3, 0xFF, |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2414 }; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2415 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2416 /* |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2417 * Convert a cterm color number 0 - 255 to RGB. |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2418 */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2419 static void |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2420 cterm_color2rgb(int nr, VTermColor *rgb) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2421 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2422 int idx; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2423 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2424 if (nr < 16) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2425 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2426 *rgb = ansi_table[nr]; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2427 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2428 else if (nr < 232) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2429 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2430 /* 216 color cube */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2431 idx = nr - 16; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2432 rgb->blue = cube_value[idx % 6]; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2433 rgb->green = cube_value[idx / 6 % 6]; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2434 rgb->red = cube_value[idx / 36 % 6]; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2435 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2436 else if (nr < 256) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2437 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2438 /* 24 grey scale ramp */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2439 idx = nr - 232; |
12447
b1877a367415
patch 8.0.1103: converting cterm color fails for grey ramp
Christian Brabandt <cb@256bit.org>
parents:
12445
diff
changeset
|
2440 rgb->blue = grey_ramp[idx]; |
b1877a367415
patch 8.0.1103: converting cterm color fails for grey ramp
Christian Brabandt <cb@256bit.org>
parents:
12445
diff
changeset
|
2441 rgb->green = grey_ramp[idx]; |
b1877a367415
patch 8.0.1103: converting cterm color fails for grey ramp
Christian Brabandt <cb@256bit.org>
parents:
12445
diff
changeset
|
2442 rgb->red = grey_ramp[idx]; |
12445
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2443 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2444 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2445 |
11836
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
2446 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2447 * Create a new vterm and initialize it. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2448 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2449 static void |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2450 create_vterm(term_T *term, int rows, int cols) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2451 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2452 VTerm *vterm; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2453 VTermScreen *screen; |
12202
4e0f699582cf
patch 8.0.0981: cursor in terminal window blinks by default
Christian Brabandt <cb@256bit.org>
parents:
12194
diff
changeset
|
2454 VTermValue value; |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2455 VTermColor *fg, *bg; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2456 int fgval, bgval; |
12445
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2457 int id; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2458 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2459 vterm = vterm_new(rows, cols); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2460 term->tl_vterm = vterm; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2461 screen = vterm_obtain_screen(vterm); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2462 vterm_screen_set_callbacks(screen, &screen_callbacks, term); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2463 /* TODO: depends on 'encoding'. */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2464 vterm_set_utf8(vterm, 1); |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2465 |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2466 vim_memset(&term->tl_default_color.attrs, 0, sizeof(VTermScreenCellAttrs)); |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2467 term->tl_default_color.width = 1; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2468 fg = &term->tl_default_color.fg; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2469 bg = &term->tl_default_color.bg; |
12445
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2470 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2471 /* Vterm uses a default black background. Set it to white when |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2472 * 'background' is "light". */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2473 if (*p_bg == 'l') |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2474 { |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2475 fgval = 0; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2476 bgval = 255; |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2477 } |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2478 else |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2479 { |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2480 fgval = 255; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2481 bgval = 0; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2482 } |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2483 fg->red = fg->green = fg->blue = fgval; |
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2484 bg->red = bg->green = bg->blue = bgval; |
12445
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2485 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2486 /* The "Terminal" highlight group overrules the defaults. */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2487 id = syn_name2id((char_u *)"Terminal"); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2488 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2489 /* Use the actual color for the GUI and when 'guitermcolors' is set. */ |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2490 #if defined(FEAT_GUI) || defined(FEAT_TERMGUICOLORS) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2491 if (0 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2492 # ifdef FEAT_GUI |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2493 || gui.in_use |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2494 # endif |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2495 # ifdef FEAT_TERMGUICOLORS |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2496 || p_tgc |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2497 # endif |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2498 ) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2499 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2500 guicolor_T fg_rgb, bg_rgb; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2501 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2502 if (id != 0) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2503 syn_id2colors(id, &fg_rgb, &bg_rgb); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2504 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2505 # ifdef FEAT_GUI |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2506 if (gui.in_use) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2507 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2508 if (fg_rgb == INVALCOLOR) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2509 fg_rgb = gui.norm_pixel; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2510 if (bg_rgb == INVALCOLOR) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2511 bg_rgb = gui.back_pixel; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2512 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2513 # ifdef FEAT_TERMGUICOLORS |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2514 else |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2515 # endif |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2516 # endif |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2517 # ifdef FEAT_TERMGUICOLORS |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2518 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2519 if (fg_rgb == INVALCOLOR) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2520 fg_rgb = cterm_normal_fg_gui_color; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2521 if (bg_rgb == INVALCOLOR) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2522 bg_rgb = cterm_normal_bg_gui_color; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2523 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2524 # endif |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2525 if (fg_rgb != INVALCOLOR) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2526 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2527 long_u rgb = GUI_MCH_GET_RGB(fg_rgb); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2528 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2529 fg->red = (unsigned)(rgb >> 16); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2530 fg->green = (unsigned)(rgb >> 8) & 255; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2531 fg->blue = (unsigned)rgb & 255; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2532 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2533 if (bg_rgb != INVALCOLOR) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2534 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2535 long_u rgb = GUI_MCH_GET_RGB(bg_rgb); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2536 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2537 bg->red = (unsigned)(rgb >> 16); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2538 bg->green = (unsigned)(rgb >> 8) & 255; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2539 bg->blue = (unsigned)rgb & 255; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2540 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2541 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2542 else |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2543 #endif |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2544 if (id != 0 && t_colors >= 16) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2545 { |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2546 int cterm_fg, cterm_bg; |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2547 |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2548 syn_id2cterm_bg(id, &cterm_fg, &cterm_bg); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2549 if (cterm_fg >= 0) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2550 cterm_color2rgb(cterm_fg, fg); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2551 if (cterm_bg >= 0) |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2552 cterm_color2rgb(cterm_bg, bg); |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2553 } |
65de672be458
patch 8.0.1102: terminal window does not use Normal colors
Christian Brabandt <cb@256bit.org>
parents:
12441
diff
changeset
|
2554 |
12433
735b49ff8fbb
patch 8.0.1096: terminal window in Normal mode has wrong background
Christian Brabandt <cb@256bit.org>
parents:
12415
diff
changeset
|
2555 vterm_state_set_default_colors(vterm_obtain_state(vterm), fg, bg); |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
2556 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2557 /* Required to initialize most things. */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2558 vterm_screen_reset(screen, 1 /* hard */); |
12035
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2559 |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2560 /* Allow using alternate screen. */ |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2561 vterm_screen_enable_altscreen(screen, 1); |
12202
4e0f699582cf
patch 8.0.0981: cursor in terminal window blinks by default
Christian Brabandt <cb@256bit.org>
parents:
12194
diff
changeset
|
2562 |
12208
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
2563 /* For unix do not use a blinking cursor. In an xterm this causes the |
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
2564 * cursor to blink if it's blinking in the xterm. |
12228
2e47dc775ec1
patch 8.0.0994: MS-Windows: cursor in terminal blinks undesirably
Christian Brabandt <cb@256bit.org>
parents:
12224
diff
changeset
|
2565 * For Windows we respect the system wide setting. */ |
12208
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
2566 #ifdef WIN3264 |
12228
2e47dc775ec1
patch 8.0.0994: MS-Windows: cursor in terminal blinks undesirably
Christian Brabandt <cb@256bit.org>
parents:
12224
diff
changeset
|
2567 if (GetCaretBlinkTime() == INFINITE) |
2e47dc775ec1
patch 8.0.0994: MS-Windows: cursor in terminal blinks undesirably
Christian Brabandt <cb@256bit.org>
parents:
12224
diff
changeset
|
2568 value.boolean = 0; |
2e47dc775ec1
patch 8.0.0994: MS-Windows: cursor in terminal blinks undesirably
Christian Brabandt <cb@256bit.org>
parents:
12224
diff
changeset
|
2569 else |
2e47dc775ec1
patch 8.0.0994: MS-Windows: cursor in terminal blinks undesirably
Christian Brabandt <cb@256bit.org>
parents:
12224
diff
changeset
|
2570 value.boolean = 1; |
12208
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
2571 #else |
12202
4e0f699582cf
patch 8.0.0981: cursor in terminal window blinks by default
Christian Brabandt <cb@256bit.org>
parents:
12194
diff
changeset
|
2572 value.boolean = 0; |
12208
48394f51e6af
patch 8.0.0984: terminal blinking cursor not correct in the GUI
Christian Brabandt <cb@256bit.org>
parents:
12204
diff
changeset
|
2573 #endif |
12202
4e0f699582cf
patch 8.0.0981: cursor in terminal window blinks by default
Christian Brabandt <cb@256bit.org>
parents:
12194
diff
changeset
|
2574 vterm_state_set_termprop(vterm_obtain_state(vterm), |
4e0f699582cf
patch 8.0.0981: cursor in terminal window blinks by default
Christian Brabandt <cb@256bit.org>
parents:
12194
diff
changeset
|
2575 VTERM_PROP_CURSORBLINK, &value); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2576 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2577 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2578 /* |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2579 * Return the text to show for the buffer name and status. |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2580 */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2581 char_u * |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2582 term_get_status_text(term_T *term) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2583 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2584 if (term->tl_status_text == NULL) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2585 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2586 char_u *txt; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2587 size_t len; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2588 |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2589 if (term->tl_normal_mode) |
11866
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2590 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2591 if (term_job_running(term)) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2592 txt = (char_u *)_("Terminal"); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2593 else |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2594 txt = (char_u *)_("Terminal-finished"); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2595 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
2596 else if (term->tl_title != NULL) |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2597 txt = term->tl_title; |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
2598 else if (term_none_open(term)) |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
2599 txt = (char_u *)_("active"); |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2600 else if (term_job_running(term)) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2601 txt = (char_u *)_("running"); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2602 else |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2603 txt = (char_u *)_("finished"); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2604 len = 9 + STRLEN(term->tl_buffer->b_fname) + STRLEN(txt); |
11790
4dfebc1b2674
patch 8.0.0777: compiler warnings with 64 bit compiler
Christian Brabandt <cb@256bit.org>
parents:
11786
diff
changeset
|
2605 term->tl_status_text = alloc((int)len); |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2606 if (term->tl_status_text != NULL) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2607 vim_snprintf((char *)term->tl_status_text, len, "%s [%s]", |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2608 term->tl_buffer->b_fname, txt); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2609 } |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2610 return term->tl_status_text; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2611 } |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
2612 |
11816
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2613 /* |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2614 * Mark references in jobs of terminals. |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2615 */ |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2616 int |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2617 set_ref_in_term(int copyID) |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2618 { |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2619 int abort = FALSE; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2620 term_T *term; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2621 typval_T tv; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2622 |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2623 for (term = first_term; term != NULL; term = term->tl_next) |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2624 if (term->tl_job != NULL) |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2625 { |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2626 tv.v_type = VAR_JOB; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2627 tv.vval.v_job = term->tl_job; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2628 abort = abort || set_ref_in_item(&tv, copyID, NULL, NULL); |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2629 } |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2630 return abort; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2631 } |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
2632 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2633 /* |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2634 * Get the buffer from the first argument in "argvars". |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2635 * Returns NULL when the buffer is not for a terminal window. |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2636 */ |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2637 static buf_T * |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2638 term_get_buf(typval_T *argvars) |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2639 { |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2640 buf_T *buf; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2641 |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2642 (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */ |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2643 ++emsg_off; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2644 buf = get_buf_tv(&argvars[0], FALSE); |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2645 --emsg_off; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2646 if (buf == NULL || buf->b_term == NULL) |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2647 return NULL; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2648 return buf; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2649 } |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2650 |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2651 /* |
12035
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2652 * "term_getaltscreen(buf)" function |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2653 */ |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2654 void |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2655 f_term_getaltscreen(typval_T *argvars, typval_T *rettv) |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2656 { |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2657 buf_T *buf = term_get_buf(argvars); |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2658 |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2659 if (buf == NULL) |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2660 return; |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2661 rettv->vval.v_number = buf->b_term->tl_using_altscreen; |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2662 } |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2663 |
a3ed3d236839
patch 8.0.0898: can't use the alternate screen in a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12031
diff
changeset
|
2664 /* |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2665 * "term_getattr(attr, name)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2666 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2667 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2668 f_term_getattr(typval_T *argvars, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2669 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2670 int attr; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2671 size_t i; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2672 char_u *name; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2673 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2674 static struct { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2675 char *name; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2676 int attr; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2677 } attrs[] = { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2678 {"bold", HL_BOLD}, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2679 {"italic", HL_ITALIC}, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2680 {"underline", HL_UNDERLINE}, |
12317
2a8890b80923
patch 8.0.1038: strike-through text not supported
Christian Brabandt <cb@256bit.org>
parents:
12313
diff
changeset
|
2681 {"strike", HL_STRIKETHROUGH}, |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2682 {"reverse", HL_INVERSE}, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2683 }; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2684 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2685 attr = get_tv_number(&argvars[0]); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2686 name = get_tv_string_chk(&argvars[1]); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2687 if (name == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2688 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2689 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2690 for (i = 0; i < sizeof(attrs)/sizeof(attrs[0]); ++i) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2691 if (STRCMP(name, attrs[i].name) == 0) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2692 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2693 rettv->vval.v_number = (attr & attrs[i].attr) != 0 ? 1 : 0; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2694 break; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2695 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2696 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2697 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2698 /* |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2699 * "term_getcursor(buf)" function |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2700 */ |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2701 void |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2702 f_term_getcursor(typval_T *argvars, typval_T *rettv) |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2703 { |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2704 buf_T *buf = term_get_buf(argvars); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2705 term_T *term; |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2706 list_T *l; |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2707 dict_T *d; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2708 |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2709 if (rettv_list_alloc(rettv) == FAIL) |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2710 return; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2711 if (buf == NULL) |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2712 return; |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2713 term = buf->b_term; |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2714 |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
2715 l = rettv->vval.v_list; |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2716 list_append_number(l, term->tl_cursor_pos.row + 1); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2717 list_append_number(l, term->tl_cursor_pos.col + 1); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2718 |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2719 d = dict_alloc(); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2720 if (d != NULL) |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2721 { |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2722 dict_add_nr_str(d, "visible", term->tl_cursor_visible, NULL); |
12259
48eac9bc2f82
patch 8.0.1009: Xterm cursor blinking status may be inverted
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
2723 dict_add_nr_str(d, "blink", blink_state_is_inverted() |
48eac9bc2f82
patch 8.0.1009: Xterm cursor blinking status may be inverted
Christian Brabandt <cb@256bit.org>
parents:
12244
diff
changeset
|
2724 ? !term->tl_cursor_blink : term->tl_cursor_blink, NULL); |
12076
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2725 dict_add_nr_str(d, "shape", term->tl_cursor_shape, NULL); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2726 dict_add_nr_str(d, "color", 0L, term->tl_cursor_color == NULL |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2727 ? (char_u *)"" : term->tl_cursor_color); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2728 list_append_dict(l, d); |
ca4931a20f8c
patch 8.0.0918: cannot get terminal window cursor shape or attributes
Christian Brabandt <cb@256bit.org>
parents:
12074
diff
changeset
|
2729 } |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2730 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2731 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2732 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2733 * "term_getjob(buf)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2734 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2735 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2736 f_term_getjob(typval_T *argvars, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2737 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2738 buf_T *buf = term_get_buf(argvars); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2739 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2740 rettv->v_type = VAR_JOB; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2741 rettv->vval.v_job = NULL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2742 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2743 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2744 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2745 rettv->vval.v_job = buf->b_term->tl_job; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2746 if (rettv->vval.v_job != NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2747 ++rettv->vval.v_job->jv_refcount; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2748 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2749 |
11904
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2750 static int |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2751 get_row_number(typval_T *tv, term_T *term) |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2752 { |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2753 if (tv->v_type == VAR_STRING |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2754 && tv->vval.v_string != NULL |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2755 && STRCMP(tv->vval.v_string, ".") == 0) |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2756 return term->tl_cursor_pos.row; |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2757 return (int)get_tv_number(tv) - 1; |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2758 } |
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2759 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2760 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2761 * "term_getline(buf, row)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2762 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2763 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2764 f_term_getline(typval_T *argvars, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2765 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2766 buf_T *buf = term_get_buf(argvars); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2767 term_T *term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2768 int row; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2769 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2770 rettv->v_type = VAR_STRING; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2771 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2772 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2773 term = buf->b_term; |
11904
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2774 row = get_row_number(&argvars[1], term); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2775 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2776 if (term->tl_vterm == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2777 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2778 linenr_T lnum = row + term->tl_scrollback_scrolled + 1; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2779 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2780 /* vterm is finished, get the text from the buffer */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2781 if (lnum > 0 && lnum <= buf->b_ml.ml_line_count) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2782 rettv->vval.v_string = vim_strsave(ml_get_buf(buf, lnum, FALSE)); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2783 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2784 else |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2785 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2786 VTermScreen *screen = vterm_obtain_screen(term->tl_vterm); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2787 VTermRect rect; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2788 int len; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2789 char_u *p; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2790 |
11923
c9da7b42fdf5
patch 8.0.0841: term_getline() may cause a crash
Christian Brabandt <cb@256bit.org>
parents:
11919
diff
changeset
|
2791 if (row < 0 || row >= term->tl_rows) |
c9da7b42fdf5
patch 8.0.0841: term_getline() may cause a crash
Christian Brabandt <cb@256bit.org>
parents:
11919
diff
changeset
|
2792 return; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2793 len = term->tl_cols * MB_MAXBYTES + 1; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2794 p = alloc(len); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2795 if (p == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2796 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2797 rettv->vval.v_string = p; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2798 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2799 rect.start_col = 0; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2800 rect.end_col = term->tl_cols; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2801 rect.start_row = row; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2802 rect.end_row = row + 1; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2803 p[vterm_screen_get_text(screen, (char *)p, len, rect)] = NUL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2804 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2805 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2806 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2807 /* |
12025
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2808 * "term_getscrolled(buf)" function |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2809 */ |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2810 void |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2811 f_term_getscrolled(typval_T *argvars, typval_T *rettv) |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2812 { |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2813 buf_T *buf = term_get_buf(argvars); |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2814 |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2815 if (buf == NULL) |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2816 return; |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2817 rettv->vval.v_number = buf->b_term->tl_scrollback_scrolled; |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2818 } |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2819 |
c0ee48f48a2b
patch 8.0.0893: cannot get the scroll count of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
12023
diff
changeset
|
2820 /* |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2821 * "term_getsize(buf)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2822 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2823 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2824 f_term_getsize(typval_T *argvars, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2825 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2826 buf_T *buf = term_get_buf(argvars); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2827 list_T *l; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2828 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2829 if (rettv_list_alloc(rettv) == FAIL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2830 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2831 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2832 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2833 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2834 l = rettv->vval.v_list; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2835 list_append_number(l, buf->b_term->tl_rows); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2836 list_append_number(l, buf->b_term->tl_cols); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2837 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2838 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2839 /* |
11882
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2840 * "term_getstatus(buf)" function |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2841 */ |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2842 void |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2843 f_term_getstatus(typval_T *argvars, typval_T *rettv) |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2844 { |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2845 buf_T *buf = term_get_buf(argvars); |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2846 term_T *term; |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2847 char_u val[100]; |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2848 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2849 rettv->v_type = VAR_STRING; |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2850 if (buf == NULL) |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2851 return; |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2852 term = buf->b_term; |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2853 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2854 if (term_job_running(term)) |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2855 STRCPY(val, "running"); |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2856 else |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2857 STRCPY(val, "finished"); |
11993
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2858 if (term->tl_normal_mode) |
92a86fe8adc0
patch 8.0.0877: using CTRL- CTRL-N in terminal is inconsistent
Christian Brabandt <cb@256bit.org>
parents:
11985
diff
changeset
|
2859 STRCAT(val, ",normal"); |
11882
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2860 rettv->vval.v_string = vim_strsave(val); |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2861 } |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2862 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2863 /* |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2864 * "term_gettitle(buf)" function |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2865 */ |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2866 void |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2867 f_term_gettitle(typval_T *argvars, typval_T *rettv) |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2868 { |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2869 buf_T *buf = term_get_buf(argvars); |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2870 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2871 rettv->v_type = VAR_STRING; |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2872 if (buf == NULL) |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2873 return; |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2874 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2875 if (buf->b_term->tl_title != NULL) |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2876 rettv->vval.v_string = vim_strsave(buf->b_term->tl_title); |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2877 } |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2878 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
2879 /* |
11933
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2880 * "term_gettty(buf)" function |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2881 */ |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2882 void |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2883 f_term_gettty(typval_T *argvars, typval_T *rettv) |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2884 { |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2885 buf_T *buf = term_get_buf(argvars); |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2886 char_u *p; |
12389
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2887 int num = 0; |
11933
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2888 |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2889 rettv->v_type = VAR_STRING; |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2890 if (buf == NULL) |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2891 return; |
12389
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2892 if (argvars[1].v_type != VAR_UNKNOWN) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2893 num = get_tv_number(&argvars[1]); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2894 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2895 switch (num) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2896 { |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2897 case 0: |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2898 if (buf->b_term->tl_job != NULL) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2899 p = buf->b_term->tl_job->jv_tty_out; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2900 else |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2901 p = buf->b_term->tl_tty_out; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2902 break; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2903 case 1: |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2904 if (buf->b_term->tl_job != NULL) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2905 p = buf->b_term->tl_job->jv_tty_in; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2906 else |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2907 p = buf->b_term->tl_tty_in; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2908 break; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2909 default: |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2910 EMSG2(_(e_invarg2), get_tv_string(&argvars[1])); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2911 return; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
2912 } |
11933
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2913 if (p != NULL) |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2914 rettv->vval.v_string = vim_strsave(p); |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2915 } |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2916 |
d033653d3df8
patch 8.0.0846: cannot get the name of the pty of a job
Christian Brabandt <cb@256bit.org>
parents:
11931
diff
changeset
|
2917 /* |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2918 * "term_list()" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2919 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2920 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2921 f_term_list(typval_T *argvars UNUSED, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2922 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2923 term_T *tp; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2924 list_T *l; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2925 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2926 if (rettv_list_alloc(rettv) == FAIL || first_term == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2927 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2928 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2929 l = rettv->vval.v_list; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2930 for (tp = first_term; tp != NULL; tp = tp->tl_next) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2931 if (tp != NULL && tp->tl_buffer != NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2932 if (list_append_number(l, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2933 (varnumber_T)tp->tl_buffer->b_fnum) == FAIL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2934 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2935 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2936 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2937 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2938 * "term_scrape(buf, row)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2939 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2940 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2941 f_term_scrape(typval_T *argvars, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2942 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2943 buf_T *buf = term_get_buf(argvars); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2944 VTermScreen *screen = NULL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2945 VTermPos pos; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2946 list_T *l; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2947 term_T *term; |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2948 char_u *p; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2949 sb_line_T *line; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2950 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2951 if (rettv_list_alloc(rettv) == FAIL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2952 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2953 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2954 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2955 term = buf->b_term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2956 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2957 l = rettv->vval.v_list; |
11904
40322e8f07e7
patch 8.0.0832: terminal function arguments are not consistent
Christian Brabandt <cb@256bit.org>
parents:
11902
diff
changeset
|
2958 pos.row = get_row_number(&argvars[1], term); |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2959 |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2960 if (term->tl_vterm != NULL) |
12017
e30f3d1fdea7
patch 8.0.0889: gcc gives warnings for uninitialized variables
Christian Brabandt <cb@256bit.org>
parents:
12011
diff
changeset
|
2961 { |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2962 screen = vterm_obtain_screen(term->tl_vterm); |
12017
e30f3d1fdea7
patch 8.0.0889: gcc gives warnings for uninitialized variables
Christian Brabandt <cb@256bit.org>
parents:
12011
diff
changeset
|
2963 p = NULL; |
e30f3d1fdea7
patch 8.0.0889: gcc gives warnings for uninitialized variables
Christian Brabandt <cb@256bit.org>
parents:
12011
diff
changeset
|
2964 line = NULL; |
e30f3d1fdea7
patch 8.0.0889: gcc gives warnings for uninitialized variables
Christian Brabandt <cb@256bit.org>
parents:
12011
diff
changeset
|
2965 } |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2966 else |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2967 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2968 linenr_T lnum = pos.row + term->tl_scrollback_scrolled; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2969 |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2970 if (lnum < 0 || lnum >= term->tl_scrollback.ga_len) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2971 return; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2972 p = ml_get_buf(buf, lnum + 1, FALSE); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2973 line = (sb_line_T *)term->tl_scrollback.ga_data + lnum; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2974 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2975 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2976 for (pos.col = 0; pos.col < term->tl_cols; ) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2977 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2978 dict_T *dcell; |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2979 int width; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2980 VTermScreenCellAttrs attrs; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2981 VTermColor fg, bg; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2982 char_u rgb[8]; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2983 char_u mbs[MB_MAXBYTES * VTERM_MAX_CHARS_PER_CELL + 1]; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2984 int off = 0; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2985 int i; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2986 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2987 if (screen == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2988 { |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2989 cellattr_T *cellattr; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2990 int len; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2991 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2992 /* vterm has finished, get the cell from scrollback */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2993 if (pos.col >= line->sb_cols) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2994 break; |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2995 cellattr = line->sb_cells + pos.col; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2996 width = cellattr->width; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2997 attrs = cellattr->attrs; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2998 fg = cellattr->fg; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
2999 bg = cellattr->bg; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3000 len = MB_PTR2LEN(p); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3001 mch_memmove(mbs, p, len); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3002 mbs[len] = NUL; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3003 p += len; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3004 } |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3005 else |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3006 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3007 VTermScreenCell cell; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3008 if (vterm_screen_get_cell(screen, pos, &cell) == 0) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3009 break; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3010 for (i = 0; i < VTERM_MAX_CHARS_PER_CELL; ++i) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3011 { |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3012 if (cell.chars[i] == 0) |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3013 break; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3014 off += (*utf_char2bytes)((int)cell.chars[i], mbs + off); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3015 } |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3016 mbs[off] = NUL; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3017 width = cell.width; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3018 attrs = cell.attrs; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3019 fg = cell.fg; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3020 bg = cell.bg; |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3021 } |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3022 dcell = dict_alloc(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3023 list_append_dict(l, dcell); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3024 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3025 dict_add_nr_str(dcell, "chars", 0, mbs); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3026 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3027 vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3028 fg.red, fg.green, fg.blue); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3029 dict_add_nr_str(dcell, "fg", 0, rgb); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3030 vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3031 bg.red, bg.green, bg.blue); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3032 dict_add_nr_str(dcell, "bg", 0, rgb); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3033 |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3034 dict_add_nr_str(dcell, "attr", |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3035 cell2attr(attrs, fg, bg), NULL); |
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3036 dict_add_nr_str(dcell, "width", width, NULL); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3037 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3038 ++pos.col; |
12009
0d9bfdb3f6f7
patch 8.0.0885: terminal window scrollback is stored inefficiently
Christian Brabandt <cb@256bit.org>
parents:
12007
diff
changeset
|
3039 if (width == 2) |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3040 ++pos.col; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3041 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3042 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3043 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3044 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3045 * "term_sendkeys(buf, keys)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3046 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3047 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3048 f_term_sendkeys(typval_T *argvars, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3049 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3050 buf_T *buf = term_get_buf(argvars); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3051 char_u *msg; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3052 term_T *term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3053 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3054 rettv->v_type = VAR_UNKNOWN; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3055 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3056 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3057 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3058 msg = get_tv_string_chk(&argvars[1]); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3059 if (msg == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3060 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3061 term = buf->b_term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3062 if (term->tl_vterm == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3063 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3064 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3065 while (*msg != NUL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3066 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3067 send_keys_to_term(term, PTR2CHAR(msg), FALSE); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3068 msg += MB_PTR2LEN(msg); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3069 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3070 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3071 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3072 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3073 * "term_start(command, options)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3074 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3075 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3076 f_term_start(typval_T *argvars, typval_T *rettv) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3077 { |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3078 jobopt_T opt; |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
3079 buf_T *buf; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3080 |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3081 init_job_options(&opt); |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3082 if (argvars[1].v_type != VAR_UNKNOWN |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3083 && get_job_options(&argvars[1], &opt, |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3084 JO_TIMEOUT_ALL + JO_STOPONEXIT |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
3085 + JO_CALLBACK + JO_OUT_CALLBACK + JO_ERR_CALLBACK |
12345
76ab57a79183
patch 8.0.1052: term_start() does not allow in_io, out_io and err_io options
Christian Brabandt <cb@256bit.org>
parents:
12317
diff
changeset
|
3086 + JO_EXIT_CB + JO_CLOSE_CALLBACK + JO_OUT_IO, |
12072
f4e1e1e6886b
patch 8.0.0916: cannot specify properties of window for terminal open
Christian Brabandt <cb@256bit.org>
parents:
12066
diff
changeset
|
3087 JO2_TERM_NAME + JO2_TERM_FINISH + JO2_HIDDEN + JO2_TERM_OPENCMD |
12060
a879814b8a37
patch 8.0.0910: cannot create a terminal in the current window
Christian Brabandt <cb@256bit.org>
parents:
12056
diff
changeset
|
3088 + JO2_TERM_COLS + JO2_TERM_ROWS + JO2_VERTICAL + JO2_CURWIN |
12309
e1f44e4afe67
patch 8.0.1034: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12277
diff
changeset
|
3089 + JO2_CWD + JO2_ENV + JO2_EOF_CHARS) == FAIL) |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3090 return; |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3091 |
12056
0498547dace0
patch 8.0.0908: cannot set terminal size with options
Christian Brabandt <cb@256bit.org>
parents:
12043
diff
changeset
|
3092 if (opt.jo_vertical) |
0498547dace0
patch 8.0.0908: cannot set terminal size with options
Christian Brabandt <cb@256bit.org>
parents:
12043
diff
changeset
|
3093 cmdmod.split = WSP_VERT; |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
3094 buf = term_start(&argvars[0], &opt, FALSE); |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
3095 |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
3096 if (buf != NULL && buf->b_term != NULL) |
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
3097 rettv->vval.v_number = buf->b_fnum; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3098 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3099 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3100 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3101 * "term_wait" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3102 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3103 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3104 f_term_wait(typval_T *argvars, typval_T *rettv UNUSED) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3105 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3106 buf_T *buf = term_get_buf(argvars); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3107 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3108 if (buf == NULL) |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3109 { |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3110 ch_log(NULL, "term_wait(): invalid argument"); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3111 return; |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3112 } |
11949
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3113 if (buf->b_term->tl_job == NULL) |
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3114 { |
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3115 ch_log(NULL, "term_wait(): no job to wait for"); |
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3116 return; |
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3117 } |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3118 if (buf->b_term->tl_job->jv_channel == NULL) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3119 /* channel is closed, nothing to do */ |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3120 return; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3121 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3122 /* Get the job status, this will detect a job that finished. */ |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3123 if ((buf->b_term->tl_job->jv_channel == NULL |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3124 || !buf->b_term->tl_job->jv_channel->ch_keep_open) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3125 && STRCMP(job_status(buf->b_term->tl_job), "dead") == 0) |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3126 { |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3127 /* The job is dead, keep reading channel I/O until the channel is |
12367
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
3128 * closed. buf->b_term may become NULL if the terminal was closed while |
7ae2b2c84ec5
patch 8.0.1063: Coverity warns for NULL check and array use
Christian Brabandt <cb@256bit.org>
parents:
12363
diff
changeset
|
3129 * waiting. */ |
11949
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3130 ch_log(NULL, "term_wait(): waiting for channel to close"); |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3131 while (buf->b_term != NULL && !buf->b_term->tl_channel_closed) |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3132 { |
11949
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3133 mch_check_messages(); |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3134 parse_queued_messages(); |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3135 ui_delay(10L, FALSE); |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3136 } |
11949
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3137 mch_check_messages(); |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3138 parse_queued_messages(); |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3139 } |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3140 else |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3141 { |
12007
64b822c4f7ae
patch 8.0.0884: can't specify the wait time for term_wait()
Christian Brabandt <cb@256bit.org>
parents:
11993
diff
changeset
|
3142 long wait = 10L; |
64b822c4f7ae
patch 8.0.0884: can't specify the wait time for term_wait()
Christian Brabandt <cb@256bit.org>
parents:
11993
diff
changeset
|
3143 |
11949
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3144 mch_check_messages(); |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3145 parse_queued_messages(); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3146 |
12007
64b822c4f7ae
patch 8.0.0884: can't specify the wait time for term_wait()
Christian Brabandt <cb@256bit.org>
parents:
11993
diff
changeset
|
3147 /* Wait for some time for any channel I/O. */ |
64b822c4f7ae
patch 8.0.0884: can't specify the wait time for term_wait()
Christian Brabandt <cb@256bit.org>
parents:
11993
diff
changeset
|
3148 if (argvars[1].v_type != VAR_UNKNOWN) |
64b822c4f7ae
patch 8.0.0884: can't specify the wait time for term_wait()
Christian Brabandt <cb@256bit.org>
parents:
11993
diff
changeset
|
3149 wait = get_tv_number(&argvars[1]); |
64b822c4f7ae
patch 8.0.0884: can't specify the wait time for term_wait()
Christian Brabandt <cb@256bit.org>
parents:
11993
diff
changeset
|
3150 ui_delay(wait, TRUE); |
11949
74e45c11b754
patch 8.0.0854: no redraw after terminal was closed
Christian Brabandt <cb@256bit.org>
parents:
11947
diff
changeset
|
3151 mch_check_messages(); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3152 |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3153 /* Flushing messages on channels is hopefully sufficient. |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3154 * TODO: is there a better way? */ |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3155 parse_queued_messages(); |
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3156 } |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3157 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3158 |
12313
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3159 /* |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3160 * Called when a channel has sent all the lines to a terminal. |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3161 * Send a CTRL-D to mark the end of the text. |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3162 */ |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3163 void |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3164 term_send_eof(channel_T *ch) |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3165 { |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3166 term_T *term; |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3167 |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3168 for (term = first_term; term != NULL; term = term->tl_next) |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3169 if (term->tl_job == ch->ch_job) |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3170 { |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3171 if (term->tl_eof_chars != NULL) |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3172 { |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3173 channel_send(ch, PART_IN, term->tl_eof_chars, |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3174 (int)STRLEN(term->tl_eof_chars), NULL); |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3175 channel_send(ch, PART_IN, (char_u *)"\r", 1, NULL); |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3176 } |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3177 # ifdef WIN3264 |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3178 else |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3179 /* Default: CTRL-D */ |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3180 channel_send(ch, PART_IN, (char_u *)"\004\r", 2, NULL); |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3181 # endif |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3182 } |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3183 } |
44f3c9b7eec4
patch 8.0.1036: ++eof argument for terminal only available on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12311
diff
changeset
|
3184 |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3185 # if defined(WIN3264) || defined(PROTO) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3186 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3187 /************************************** |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3188 * 2. MS-Windows implementation. |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3189 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
3190 |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3191 # ifndef PROTO |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3192 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3193 #define WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN 1ul |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3194 #define WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN 2ull |
12391
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3195 #define WINPTY_MOUSE_MODE_FORCE 2 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3196 |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
3197 void* (*winpty_config_new)(UINT64, void*); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3198 void* (*winpty_open)(void*, void*); |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
3199 void* (*winpty_spawn_config_new)(UINT64, void*, LPCWSTR, void*, void*, void*); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3200 BOOL (*winpty_spawn)(void*, void*, HANDLE*, HANDLE*, DWORD*, void*); |
12391
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3201 void (*winpty_config_set_mouse_mode)(void*, int); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3202 void (*winpty_config_set_initial_size)(void*, int, int); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3203 LPCWSTR (*winpty_conin_name)(void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3204 LPCWSTR (*winpty_conout_name)(void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3205 LPCWSTR (*winpty_conerr_name)(void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3206 void (*winpty_free)(void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3207 void (*winpty_config_free)(void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3208 void (*winpty_spawn_config_free)(void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3209 void (*winpty_error_free)(void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3210 LPCWSTR (*winpty_error_msg)(void*); |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3211 BOOL (*winpty_set_size)(void*, int, int, void*); |
11951
e8b1ef40324a
patch 8.0.0855: MS-Windows: can't get tty name of terminal
Christian Brabandt <cb@256bit.org>
parents:
11949
diff
changeset
|
3212 HANDLE (*winpty_agent_process)(void*); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3213 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3214 #define WINPTY_DLL "winpty.dll" |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3215 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3216 static HINSTANCE hWinPtyDLL = NULL; |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3217 # endif |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3218 |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3219 static int |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3220 dyn_winpty_init(int verbose) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3221 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3222 int i; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3223 static struct |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3224 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3225 char *name; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3226 FARPROC *ptr; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3227 } winpty_entry[] = |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3228 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3229 {"winpty_conerr_name", (FARPROC*)&winpty_conerr_name}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3230 {"winpty_config_free", (FARPROC*)&winpty_config_free}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3231 {"winpty_config_new", (FARPROC*)&winpty_config_new}, |
12391
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3232 {"winpty_config_set_mouse_mode", |
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3233 (FARPROC*)&winpty_config_set_mouse_mode}, |
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3234 {"winpty_config_set_initial_size", |
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3235 (FARPROC*)&winpty_config_set_initial_size}, |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3236 {"winpty_conin_name", (FARPROC*)&winpty_conin_name}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3237 {"winpty_conout_name", (FARPROC*)&winpty_conout_name}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3238 {"winpty_error_free", (FARPROC*)&winpty_error_free}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3239 {"winpty_free", (FARPROC*)&winpty_free}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3240 {"winpty_open", (FARPROC*)&winpty_open}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3241 {"winpty_spawn", (FARPROC*)&winpty_spawn}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3242 {"winpty_spawn_config_free", (FARPROC*)&winpty_spawn_config_free}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3243 {"winpty_spawn_config_new", (FARPROC*)&winpty_spawn_config_new}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3244 {"winpty_error_msg", (FARPROC*)&winpty_error_msg}, |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3245 {"winpty_set_size", (FARPROC*)&winpty_set_size}, |
11951
e8b1ef40324a
patch 8.0.0855: MS-Windows: can't get tty name of terminal
Christian Brabandt <cb@256bit.org>
parents:
11949
diff
changeset
|
3246 {"winpty_agent_process", (FARPROC*)&winpty_agent_process}, |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3247 {NULL, NULL} |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3248 }; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3249 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3250 /* No need to initialize twice. */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3251 if (hWinPtyDLL) |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3252 return OK; |
12138
bee3751f3d4e
patch 8.0.0949: winpty.dll name is fixed
Christian Brabandt <cb@256bit.org>
parents:
12124
diff
changeset
|
3253 /* Load winpty.dll, prefer using the 'winptydll' option, fall back to just |
bee3751f3d4e
patch 8.0.0949: winpty.dll name is fixed
Christian Brabandt <cb@256bit.org>
parents:
12124
diff
changeset
|
3254 * winpty.dll. */ |
bee3751f3d4e
patch 8.0.0949: winpty.dll name is fixed
Christian Brabandt <cb@256bit.org>
parents:
12124
diff
changeset
|
3255 if (*p_winptydll != NUL) |
bee3751f3d4e
patch 8.0.0949: winpty.dll name is fixed
Christian Brabandt <cb@256bit.org>
parents:
12124
diff
changeset
|
3256 hWinPtyDLL = vimLoadLib((char *)p_winptydll); |
bee3751f3d4e
patch 8.0.0949: winpty.dll name is fixed
Christian Brabandt <cb@256bit.org>
parents:
12124
diff
changeset
|
3257 if (!hWinPtyDLL) |
bee3751f3d4e
patch 8.0.0949: winpty.dll name is fixed
Christian Brabandt <cb@256bit.org>
parents:
12124
diff
changeset
|
3258 hWinPtyDLL = vimLoadLib(WINPTY_DLL); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3259 if (!hWinPtyDLL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3260 { |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3261 if (verbose) |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3262 EMSG2(_(e_loadlib), *p_winptydll != NUL ? p_winptydll |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3263 : (char_u *)WINPTY_DLL); |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3264 return FAIL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3265 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3266 for (i = 0; winpty_entry[i].name != NULL |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3267 && winpty_entry[i].ptr != NULL; ++i) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3268 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3269 if ((*winpty_entry[i].ptr = (FARPROC)GetProcAddress(hWinPtyDLL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3270 winpty_entry[i].name)) == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3271 { |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3272 if (verbose) |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3273 EMSG2(_(e_loadfunc), winpty_entry[i].name); |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3274 return FAIL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3275 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3276 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3277 |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3278 return OK; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3279 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3280 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3281 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3282 * Create a new terminal of "rows" by "cols" cells. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3283 * Store a reference in "term". |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3284 * Return OK or FAIL. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3285 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3286 static int |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3287 term_and_job_init( |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3288 term_T *term, |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3289 typval_T *argvar, |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3290 jobopt_T *opt) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3291 { |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3292 WCHAR *cmd_wchar = NULL; |
12415
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
3293 WCHAR *cwd_wchar = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3294 channel_T *channel = NULL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3295 job_T *job = NULL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3296 DWORD error; |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3297 HANDLE jo = NULL; |
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3298 HANDLE child_process_handle; |
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3299 HANDLE child_thread_handle; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3300 void *winpty_err; |
11798
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3301 void *spawn_config = NULL; |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3302 garray_T ga; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3303 char_u *cmd; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3304 |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3305 if (dyn_winpty_init(TRUE) == FAIL) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3306 return FAIL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3307 |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3308 if (argvar->v_type == VAR_STRING) |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3309 cmd = argvar->vval.v_string; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3310 else |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3311 { |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3312 ga_init2(&ga, (int)sizeof(char*), 20); |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3313 if (win32_build_cmd(argvar->vval.v_list, &ga) == FAIL) |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3314 goto failed; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3315 cmd = ga.ga_data; |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3316 } |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3317 |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3318 cmd_wchar = enc_to_utf16(cmd, NULL); |
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3319 if (cmd_wchar == NULL) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3320 return FAIL; |
12415
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
3321 if (opt->jo_cwd != NULL) |
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
3322 cwd_wchar = enc_to_utf16(opt->jo_cwd, NULL); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3323 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3324 job = job_alloc(); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3325 if (job == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3326 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3327 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3328 channel = add_channel(); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3329 if (channel == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3330 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3331 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3332 term->tl_winpty_config = winpty_config_new(0, &winpty_err); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3333 if (term->tl_winpty_config == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3334 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3335 |
12391
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3336 winpty_config_set_mouse_mode(term->tl_winpty_config, |
438c64b76eef
patch 8.0.1075: MS-Windows: mouse does not work in terminal
Christian Brabandt <cb@256bit.org>
parents:
12389
diff
changeset
|
3337 WINPTY_MOUSE_MODE_FORCE); |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3338 winpty_config_set_initial_size(term->tl_winpty_config, |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3339 term->tl_cols, term->tl_rows); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3340 term->tl_winpty = winpty_open(term->tl_winpty_config, &winpty_err); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3341 if (term->tl_winpty == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3342 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3343 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3344 spawn_config = winpty_spawn_config_new( |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3345 WINPTY_SPAWN_FLAG_AUTO_SHUTDOWN | |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3346 WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3347 NULL, |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3348 cmd_wchar, |
12415
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
3349 cwd_wchar, |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3350 NULL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3351 &winpty_err); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3352 if (spawn_config == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3353 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3354 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3355 channel = add_channel(); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3356 if (channel == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3357 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3358 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3359 job = job_alloc(); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3360 if (job == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3361 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3362 |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3363 if (opt->jo_set & JO_IN_BUF) |
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3364 job->jv_in_buf = buflist_findnr(opt->jo_io_buf[PART_IN]); |
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3365 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3366 if (!winpty_spawn(term->tl_winpty, spawn_config, &child_process_handle, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3367 &child_thread_handle, &error, &winpty_err)) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3368 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3369 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3370 channel_set_pipes(channel, |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3371 (sock_T)CreateFileW( |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3372 winpty_conin_name(term->tl_winpty), |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3373 GENERIC_WRITE, 0, NULL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3374 OPEN_EXISTING, 0, NULL), |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3375 (sock_T)CreateFileW( |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3376 winpty_conout_name(term->tl_winpty), |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3377 GENERIC_READ, 0, NULL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3378 OPEN_EXISTING, 0, NULL), |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3379 (sock_T)CreateFileW( |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3380 winpty_conerr_name(term->tl_winpty), |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3381 GENERIC_READ, 0, NULL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3382 OPEN_EXISTING, 0, NULL)); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3383 |
12311
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
3384 /* Write lines with CR instead of NL. */ |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
3385 channel->ch_write_text_mode = TRUE; |
66fa8eabbd6e
patch 8.0.1035: sending buffer lines to terminal doesn't work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12309
diff
changeset
|
3386 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3387 jo = CreateJobObject(NULL, NULL); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3388 if (jo == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3389 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3390 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3391 if (!AssignProcessToJobObject(jo, child_process_handle)) |
11798
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3392 { |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3393 /* Failed, switch the way to terminate process with TerminateProcess. */ |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3394 CloseHandle(jo); |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3395 jo = NULL; |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3396 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3397 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3398 winpty_spawn_config_free(spawn_config); |
12194
53987de2115d
patch 8.0.0977: cannot send lines to a terminal job on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12192
diff
changeset
|
3399 vim_free(cmd_wchar); |
12415
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
3400 vim_free(cwd_wchar); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3401 |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3402 create_vterm(term, term->tl_rows, term->tl_cols); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3403 |
11939
ef1febf04d03
patch 8.0.0849: crash when job exit callback wipes the terminal
Christian Brabandt <cb@256bit.org>
parents:
11937
diff
changeset
|
3404 channel_set_job(channel, job, opt); |
11953
fd714bb0ae24
patch 8.0.0856: MS-Windows: terminal job doesn't take options
Christian Brabandt <cb@256bit.org>
parents:
11951
diff
changeset
|
3405 job_set_options(job, opt); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3406 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3407 job->jv_channel = channel; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3408 job->jv_proc_info.hProcess = child_process_handle; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3409 job->jv_proc_info.dwProcessId = GetProcessId(child_process_handle); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3410 job->jv_job_object = jo; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3411 job->jv_status = JOB_STARTED; |
12389
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3412 job->jv_tty_in = utf16_to_enc( |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3413 (short_u*)winpty_conin_name(term->tl_winpty), NULL); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3414 job->jv_tty_out = utf16_to_enc( |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3415 (short_u*)winpty_conout_name(term->tl_winpty), NULL); |
11802
b1fd49b4eea7
patch 8.0.0783: job of terminal may be freed too early
Christian Brabandt <cb@256bit.org>
parents:
11798
diff
changeset
|
3416 ++job->jv_refcount; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3417 term->tl_job = job; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3418 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3419 return OK; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3420 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3421 failed: |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3422 if (argvar->v_type == VAR_LIST) |
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3423 vim_free(ga.ga_data); |
12415
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
3424 vim_free(cmd_wchar); |
cd66083e371e
patch 8.0.1087: Test_terminal_cwd is flaky
Christian Brabandt <cb@256bit.org>
parents:
12401
diff
changeset
|
3425 vim_free(cwd_wchar); |
11798
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3426 if (spawn_config != NULL) |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
3427 winpty_spawn_config_free(spawn_config); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3428 if (channel != NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3429 channel_clear(channel); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3430 if (job != NULL) |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3431 { |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3432 job->jv_channel = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3433 job_cleanup(job); |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3434 } |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3435 term->tl_job = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3436 if (jo != NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3437 CloseHandle(jo); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3438 if (term->tl_winpty != NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3439 winpty_free(term->tl_winpty); |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3440 term->tl_winpty = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3441 if (term->tl_winpty_config != NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3442 winpty_config_free(term->tl_winpty_config); |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3443 term->tl_winpty_config = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3444 if (winpty_err != NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3445 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3446 char_u *msg = utf16_to_enc( |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3447 (short_u *)winpty_error_msg(winpty_err), NULL); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3448 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3449 EMSG(msg); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3450 winpty_error_free(winpty_err); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3451 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3452 return FAIL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3453 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3454 |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3455 static int |
12389
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3456 create_pty_only(term_T *term, jobopt_T *options) |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3457 { |
12389
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3458 HANDLE hPipeIn = INVALID_HANDLE_VALUE; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3459 HANDLE hPipeOut = INVALID_HANDLE_VALUE; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3460 char in_name[80], out_name[80]; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3461 channel_T *channel = NULL; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3462 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3463 create_vterm(term, term->tl_rows, term->tl_cols); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3464 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3465 vim_snprintf(in_name, sizeof(in_name), "\\\\.\\pipe\\vim-%d-in-%d", |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3466 GetCurrentProcessId(), |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3467 curbuf->b_fnum); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3468 hPipeIn = CreateNamedPipe(in_name, PIPE_ACCESS_OUTBOUND, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3469 PIPE_TYPE_MESSAGE | PIPE_NOWAIT, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3470 PIPE_UNLIMITED_INSTANCES, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3471 0, 0, NMPWAIT_NOWAIT, NULL); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3472 if (hPipeIn == INVALID_HANDLE_VALUE) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3473 goto failed; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3474 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3475 vim_snprintf(out_name, sizeof(out_name), "\\\\.\\pipe\\vim-%d-out-%d", |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3476 GetCurrentProcessId(), |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3477 curbuf->b_fnum); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3478 hPipeOut = CreateNamedPipe(out_name, PIPE_ACCESS_INBOUND, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3479 PIPE_TYPE_MESSAGE | PIPE_NOWAIT, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3480 PIPE_UNLIMITED_INSTANCES, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3481 0, 0, 0, NULL); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3482 if (hPipeOut == INVALID_HANDLE_VALUE) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3483 goto failed; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3484 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3485 ConnectNamedPipe(hPipeIn, NULL); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3486 ConnectNamedPipe(hPipeOut, NULL); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3487 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3488 term->tl_job = job_alloc(); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3489 if (term->tl_job == NULL) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3490 goto failed; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3491 ++term->tl_job->jv_refcount; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3492 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3493 /* behave like the job is already finished */ |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3494 term->tl_job->jv_status = JOB_FINISHED; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3495 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3496 channel = add_channel(); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3497 if (channel == NULL) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3498 goto failed; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3499 term->tl_job->jv_channel = channel; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3500 channel->ch_keep_open = TRUE; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3501 channel->ch_named_pipe = TRUE; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3502 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3503 channel_set_pipes(channel, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3504 (sock_T)hPipeIn, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3505 (sock_T)hPipeOut, |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3506 (sock_T)hPipeOut); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3507 channel_set_job(channel, term->tl_job, options); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3508 term->tl_job->jv_tty_in = vim_strsave((char_u*)in_name); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3509 term->tl_job->jv_tty_out = vim_strsave((char_u*)out_name); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3510 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3511 return OK; |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3512 |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3513 failed: |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3514 if (hPipeIn != NULL) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3515 CloseHandle(hPipeIn); |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3516 if (hPipeOut != NULL) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3517 CloseHandle(hPipeOut); |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3518 return FAIL; |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3519 } |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3520 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3521 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3522 * Free the terminal emulator part of "term". |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3523 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3524 static void |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
3525 term_free_vterm(term_T *term) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3526 { |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3527 if (term->tl_winpty != NULL) |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3528 winpty_free(term->tl_winpty); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
3529 term->tl_winpty = NULL; |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3530 if (term->tl_winpty_config != NULL) |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3531 winpty_config_free(term->tl_winpty_config); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
3532 term->tl_winpty_config = NULL; |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3533 if (term->tl_vterm != NULL) |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3534 vterm_free(term->tl_vterm); |
11838
e6080ed193f6
patch 8.0.0799: missing semicolon
Christian Brabandt <cb@256bit.org>
parents:
11836
diff
changeset
|
3535 term->tl_vterm = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3536 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3537 |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3538 /* |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3539 * Request size to terminal. |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3540 */ |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3541 static void |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3542 term_report_winsize(term_T *term, int rows, int cols) |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3543 { |
12389
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3544 if (term->tl_winpty) |
d0cf7f71b95b
patch 8.0.1074: ":term NONE" does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
12367
diff
changeset
|
3545 winpty_set_size(term->tl_winpty, cols, rows, NULL); |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3546 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3547 |
12144
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3548 int |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3549 terminal_enabled(void) |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3550 { |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3551 return dyn_winpty_init(FALSE) == OK; |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3552 } |
abd69cea3459
patch 8.0.0952: has('terminal') does not check existence of dll file
Christian Brabandt <cb@256bit.org>
parents:
12138
diff
changeset
|
3553 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3554 # else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3555 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3556 /************************************** |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3557 * 3. Unix-like implementation. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3558 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3559 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3560 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3561 * Create a new terminal of "rows" by "cols" cells. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3562 * Start job for "cmd". |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3563 * Store the pointers in "term". |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3564 * Return OK or FAIL. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3565 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3566 static int |
12192
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3567 term_and_job_init( |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3568 term_T *term, |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3569 typval_T *argvar, |
6947d5bcf57f
patch 8.0.0976: cannot send lines to a terminal job
Christian Brabandt <cb@256bit.org>
parents:
12186
diff
changeset
|
3570 jobopt_T *opt) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3571 { |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3572 create_vterm(term, term->tl_rows, term->tl_cols); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3573 |
12096
0a61213afdd2
patch 8.0.0928: MS-Windows: passing arglist to job has escaping problems
Christian Brabandt <cb@256bit.org>
parents:
12094
diff
changeset
|
3574 term->tl_job = job_start(argvar, opt); |
11802
b1fd49b4eea7
patch 8.0.0783: job of terminal may be freed too early
Christian Brabandt <cb@256bit.org>
parents:
11798
diff
changeset
|
3575 if (term->tl_job != NULL) |
b1fd49b4eea7
patch 8.0.0783: job of terminal may be freed too early
Christian Brabandt <cb@256bit.org>
parents:
11798
diff
changeset
|
3576 ++term->tl_job->jv_refcount; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3577 |
11727
cb1dc90d22cc
patch 8.0.0746: when :term fails the job is not properly cleaned up
Christian Brabandt <cb@256bit.org>
parents:
11725
diff
changeset
|
3578 return term->tl_job != NULL |
cb1dc90d22cc
patch 8.0.0746: when :term fails the job is not properly cleaned up
Christian Brabandt <cb@256bit.org>
parents:
11725
diff
changeset
|
3579 && term->tl_job->jv_channel != NULL |
cb1dc90d22cc
patch 8.0.0746: when :term fails the job is not properly cleaned up
Christian Brabandt <cb@256bit.org>
parents:
11725
diff
changeset
|
3580 && term->tl_job->jv_status != JOB_FAILED ? OK : FAIL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3581 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3582 |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3583 static int |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3584 create_pty_only(term_T *term, jobopt_T *opt) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3585 { |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3586 create_vterm(term, term->tl_rows, term->tl_cols); |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3587 |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3588 term->tl_job = job_alloc(); |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3589 if (term->tl_job == NULL) |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3590 return FAIL; |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3591 ++term->tl_job->jv_refcount; |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3592 |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3593 /* behave like the job is already finished */ |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3594 term->tl_job->jv_status = JOB_FINISHED; |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3595 |
12393
128cd982c7b8
patch 8.0.1076: term_start() does not take callbacks
Christian Brabandt <cb@256bit.org>
parents:
12391
diff
changeset
|
3596 return mch_create_pty_channel(term->tl_job, opt); |
12240
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3597 } |
24abce52ad20
patch 8.0.1000: cannot open a terminal without running a job in it
Christian Brabandt <cb@256bit.org>
parents:
12228
diff
changeset
|
3598 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3599 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3600 * Free the terminal emulator part of "term". |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3601 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3602 static void |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
3603 term_free_vterm(term_T *term) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3604 { |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3605 if (term->tl_vterm != NULL) |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
3606 vterm_free(term->tl_vterm); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
3607 term->tl_vterm = NULL; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3608 } |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3609 |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3610 /* |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3611 * Request size to terminal. |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3612 */ |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3613 static void |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3614 term_report_winsize(term_T *term, int rows, int cols) |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3615 { |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3616 /* Use an ioctl() to report the new window size to the job. */ |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3617 if (term->tl_job != NULL && term->tl_job->jv_channel != NULL) |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3618 { |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3619 int fd = -1; |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3620 int part; |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3621 |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3622 for (part = PART_OUT; part < PART_COUNT; ++part) |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3623 { |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3624 fd = term->tl_job->jv_channel->ch_part[part].ch_fd; |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3625 if (isatty(fd)) |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3626 break; |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3627 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3628 if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK) |
12037
85f0f557661e
patch 8.0.0899: function name mch_stop_job() is confusing
Christian Brabandt <cb@256bit.org>
parents:
12035
diff
changeset
|
3629 mch_signal_job(term->tl_job, (char_u *)"winch"); |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3630 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3631 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
3632 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
3633 # endif |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
3634 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
3635 #endif /* FEAT_TERMINAL */ |