Mercurial > vim
annotate src/terminal.c @ 11882:69e7379f46db v8.0.0821
patch 8.0.0821: cannot get the title and status of a terminal window
commit https://github.com/vim/vim/commit/b000e328efcf859d14454ffd241d44f6d14f300b
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Jul 30 19:38:21 2017 +0200
patch 8.0.0821: cannot get the title and status of a terminal window
Problem: Cannot get the title and status of a terminal window.
Solution: Implement term_gettitle() and term_getstatus().
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 30 Jul 2017 19:45:03 +0200 |
parents | 45558e0507e8 |
children | 7928d62d29ee |
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. |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
37 * |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
38 * TODO: |
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
|
39 * - Make CTRL-W "" paste register content 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
|
40 * - in bash mouse clicks are inserting characters. |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
41 * - mouse scroll: when over other window, scroll that window. |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
42 * - For the scrollback buffer store lines in the buffer, only attributes in |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
43 * tl_scrollback. |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
44 * - When the job ends: |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
45 * - Need an option or argument to drop the window+buffer right away, to be |
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
|
46 * used for a shell or Vim. 'termfinish'; "close", "open" (open window when |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
47 * job finishes). |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
48 * - add option values to the command: |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
49 * :term <24x80> <close> vim notes.txt |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
50 * - support different cursor shapes, colors and attributes |
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
51 * - make term_getcursor() return type (none/block/bar/underline) and |
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
52 * attributes (color, blink, etc.) |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
53 * - To set BS correctly, check get_stty(); Pass the fd of the pty. |
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
|
54 * - do not store terminal window in viminfo. Or prefix term:// ? |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
55 * - add a character in :ls output |
11870
c29e498aa77d
patch 8.0.0815: terminal window not correctly updated
Christian Brabandt <cb@256bit.org>
parents:
11866
diff
changeset
|
56 * - add 't' to mode() |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
57 * - when closing window and job has not ended, make terminal hidden? |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
58 * - when closing window and job has ended, make buffer hidden? |
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
|
59 * - don't allow exiting Vim when a terminal is still running a job |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
60 * - use win_del_lines() to make scroll-up efficient. |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
61 * - 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
|
62 * - 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
|
63 * - support minimal size when 'termsize' is empty? |
11723
1922710ee8fa
patch 8.0.0744: terminal window does not use a pty
Christian Brabandt <cb@256bit.org>
parents:
11719
diff
changeset
|
64 * - implement "term" for job_start(): more job options when starting a |
1922710ee8fa
patch 8.0.0744: terminal window does not use a pty
Christian Brabandt <cb@256bit.org>
parents:
11719
diff
changeset
|
65 * terminal. |
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
|
66 * - 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
|
67 * 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
|
68 * - 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
|
69 * conversions. |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
70 * - In the GUI use a terminal emulator for :!cmd. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
71 */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
72 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
73 #include "vim.h" |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
74 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
75 #if defined(FEAT_TERMINAL) || defined(PROTO) |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
76 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
77 #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
|
78 # define MIN(x,y) (x < y ? x : y) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
79 # 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
|
80 #endif |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
81 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
82 #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
|
83 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
84 typedef struct sb_line_S { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
85 int sb_cols; /* can differ per line */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
86 VTermScreenCell *sb_cells; /* allocated */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
87 } 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
|
88 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
89 /* typedef term_T in structs.h */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
90 struct terminal_S { |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
91 term_T *tl_next; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
92 |
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
|
93 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
|
94 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
|
95 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
|
96 |
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 int tl_terminal_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
|
98 int 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
|
99 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
100 #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
|
101 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
|
102 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
|
103 #endif |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
104 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
105 /* 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
|
106 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
|
107 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
|
108 /* 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
|
109 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
|
110 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
|
111 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
112 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
|
113 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
|
114 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
115 /* 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
|
116 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
|
117 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
|
118 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
119 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
|
120 int 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
|
121 |
11874
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
122 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
|
123 int tl_cursor_visible; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
124 }; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
125 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
126 /* |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
127 * List of all active terminals. |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
128 */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
129 static term_T *first_term = NULL; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
130 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
131 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
132 #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
|
133 #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
|
134 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
135 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
136 * 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
|
137 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
138 static int term_and_job_init(term_T *term, int rows, int cols, char_u *cmd); |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
139 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
|
140 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
|
141 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
142 /************************************** |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
143 * 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
|
144 */ |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
145 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
146 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
147 * 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
|
148 * 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
|
149 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
150 static void |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
151 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
|
152 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
153 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
|
154 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
155 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
|
156 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
157 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
|
158 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
|
159 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
160 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
|
161 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
|
162 else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
163 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
164 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
|
165 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
|
166 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
167 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
|
168 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
|
169 else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
170 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
171 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
|
172 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
|
173 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
174 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
175 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
176 /* |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
177 * ":terminal": open a terminal window and execute a job in it. |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
178 */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
179 void |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
180 ex_terminal(exarg_T *eap) |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
181 { |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
182 exarg_T split_ea; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
183 win_T *old_curwin = curwin; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
184 term_T *term; |
11729
1c8ec1029233
patch 8.0.0747: :terminal without an argument doesn't work
Christian Brabandt <cb@256bit.org>
parents:
11727
diff
changeset
|
185 char_u *cmd = eap->arg; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
186 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
187 if (check_restricted() || check_secure()) |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
188 return; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
189 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
190 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
|
191 if (term == NULL) |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
192 return; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
193 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
|
194 term->tl_cursor_visible = TRUE; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
195 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
|
196 |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
197 /* Open a new window or tab. */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
198 vim_memset(&split_ea, 0, sizeof(split_ea)); |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
199 split_ea.cmdidx = CMD_new; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
200 split_ea.cmd = (char_u *)"new"; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
201 split_ea.arg = (char_u *)""; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
202 ex_splitview(&split_ea); |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
203 if (curwin == old_curwin) |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
204 { |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
205 /* split failed */ |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
206 vim_free(term); |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
207 return; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
208 } |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
209 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
|
210 curbuf->b_term = term; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
211 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
212 /* 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
|
213 term->tl_next = first_term; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
214 first_term = term; |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
215 |
11794
2e7e77e28063
patch 8.0.0779: :term without an argument uses empty buffer name
Christian Brabandt <cb@256bit.org>
parents:
11792
diff
changeset
|
216 if (cmd == NULL || *cmd == NUL) |
2e7e77e28063
patch 8.0.0779: :term without an argument uses empty buffer name
Christian Brabandt <cb@256bit.org>
parents:
11792
diff
changeset
|
217 cmd = p_sh; |
2e7e77e28063
patch 8.0.0779: :term without an argument uses empty buffer name
Christian Brabandt <cb@256bit.org>
parents:
11792
diff
changeset
|
218 |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
219 if (buflist_findname(cmd) == NULL) |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
220 curbuf->b_ffname = vim_strsave(cmd); |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
221 else |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
222 { |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
223 int i; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
224 size_t len = STRLEN(cmd) + 10; |
11790
4dfebc1b2674
patch 8.0.0777: compiler warnings with 64 bit compiler
Christian Brabandt <cb@256bit.org>
parents:
11786
diff
changeset
|
225 char_u *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
|
226 |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
227 for (i = 1; p != NULL; ++i) |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
228 { |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
229 vim_snprintf((char *)p, len, "%s (%d)", cmd, i); |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
230 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
|
231 { |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
232 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
|
233 break; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
234 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
235 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
236 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
237 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
|
238 |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
239 /* Mark the buffer as changed, so that it's not easy to abandon the job. */ |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
240 curbuf->b_changed = TRUE; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
241 curbuf->b_p_ma = FALSE; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
242 set_string_option_direct((char_u *)"buftype", -1, |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
243 (char_u *)"terminal", OPT_FREE|OPT_LOCAL, 0); |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
244 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
245 set_term_and_win_size(term); |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
246 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
247 /* System dependent: setup the vterm and start the job in it. */ |
11729
1c8ec1029233
patch 8.0.0747: :terminal without an argument doesn't work
Christian Brabandt <cb@256bit.org>
parents:
11727
diff
changeset
|
248 if (term_and_job_init(term, term->tl_rows, term->tl_cols, cmd) == OK) |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
249 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
250 /* store the size we ended up with */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
251 vterm_get_size(term->tl_vterm, &term->tl_rows, &term->tl_cols); |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
252 } |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
253 else |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
254 { |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
255 free_terminal(curbuf); |
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
|
256 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
257 /* 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
|
258 * free_terminal(). */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
259 do_buffer(DOBUF_WIPE, DOBUF_CURRENT, FORWARD, 0, TRUE); |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
260 } |
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
261 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
262 /* TODO: Setup pty, see mch_call_shell(). */ |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
263 } |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
264 |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
265 /* |
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
|
266 * 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
|
267 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
268 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
|
269 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
|
270 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
271 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
|
272 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
273 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
|
274 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
|
275 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
|
276 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
277 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
278 /* |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
279 * 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
|
280 * 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
|
281 * 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
|
282 */ |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
283 void |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
284 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
|
285 { |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
286 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
|
287 term_T *tp; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
288 |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
289 if (term == NULL) |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
290 return; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
291 if (first_term == term) |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
292 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
|
293 else |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
294 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
|
295 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
|
296 { |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
297 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
|
298 break; |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
299 } |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
300 |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
301 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
|
302 { |
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
|
303 if (term->tl_job->jv_status != JOB_ENDED |
cb1dc90d22cc
patch 8.0.0746: when :term fails the job is not properly cleaned up
Christian Brabandt <cb@256bit.org>
parents:
11725
diff
changeset
|
304 && 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
|
305 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
|
306 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
|
307 } |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
308 |
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
|
309 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
|
310 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
311 term_free_vterm(term); |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
312 vim_free(term->tl_title); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
313 vim_free(term->tl_status_text); |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
314 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
|
315 buf->b_term = NULL; |
11690
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
316 } |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
317 |
ce434212d682
patch 8.0.0728: the terminal structure is never freed
Christian Brabandt <cb@256bit.org>
parents:
11684
diff
changeset
|
318 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
319 * 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
|
320 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
321 static void |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
322 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
|
323 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
324 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
|
325 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
|
326 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
|
327 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
|
328 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
329 for (done = 0; done < len; done += len_now) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
330 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
331 for (p = msg + done; p < msg + len; ) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
332 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
333 if (*p == NL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
334 break; |
11790
4dfebc1b2674
patch 8.0.0777: compiler warnings with 64 bit compiler
Christian Brabandt <cb@256bit.org>
parents:
11786
diff
changeset
|
335 p += utf_ptr2len_len(p, (int)(len - (p - msg))); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
336 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
337 len_now = p - msg - done; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
338 vterm_input_write(vterm, (char *)msg + done, len_now); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
339 if (p < msg + len && *p == NL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
340 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
341 /* Convert NL to CR-NL, that appears to work best. */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
342 vterm_input_write(vterm, "\r\n", 2); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
343 ++len_now; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
344 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
345 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
346 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
347 /* 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
|
348 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
|
349 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
350 |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
351 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
|
352 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
|
353 { |
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
354 setcursor(); |
11792
4bc1f94afc34
patch 8.0.0778: in a terminal the cursor may be hidden
Christian Brabandt <cb@256bit.org>
parents:
11790
diff
changeset
|
355 if (redraw && term->tl_buffer == curbuf) |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
356 { |
11792
4bc1f94afc34
patch 8.0.0778: in a terminal the cursor may be hidden
Christian Brabandt <cb@256bit.org>
parents:
11790
diff
changeset
|
357 if (term->tl_cursor_visible) |
4bc1f94afc34
patch 8.0.0778: in a terminal the cursor may be hidden
Christian Brabandt <cb@256bit.org>
parents:
11790
diff
changeset
|
358 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
|
359 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
|
360 #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
|
361 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
|
362 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
|
363 #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
|
364 } |
11778
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
365 } |
e8005055f845
patch 8.0.0771: cursor in terminal window not always updated in GUI
Christian Brabandt <cb@256bit.org>
parents:
11774
diff
changeset
|
366 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
367 /* |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
368 * 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
|
369 * of "buffer". |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
370 */ |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
371 void |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
372 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
|
373 { |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
374 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
|
375 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
|
376 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
377 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
|
378 { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
379 ch_logn(channel, "NOT writing %d bytes to terminal", (int)len); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
380 return; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
381 } |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
382 ch_logn(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
|
383 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
|
384 |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
385 /* TODO: only update once in a while. */ |
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
386 update_screen(0); |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
387 update_cursor(term, TRUE); |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
388 } |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
389 |
11670
3b2afa2b77b3
patch 8.0.0718: output of job in terminal is not displayed
Christian Brabandt <cb@256bit.org>
parents:
11668
diff
changeset
|
390 /* |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
391 * 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
|
392 */ |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
393 static int |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
394 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
|
395 { |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
396 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
|
397 |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
398 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
|
399 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
|
400 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
|
401 return TRUE; |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
402 } |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
403 |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
404 /* |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
405 * 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
|
406 * 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
|
407 */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
408 static int |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
409 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
|
410 { |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
411 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
|
412 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
|
413 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
|
414 int mouse = FALSE; |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
415 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
416 switch (c) |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
417 { |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
418 case CAR: key = VTERM_KEY_ENTER; break; |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
419 case ESC: key = VTERM_KEY_ESCAPE; break; |
11715
d7430b56c9ed
patch 8.0.0740: cannot resize a terminal window by the command
Christian Brabandt <cb@256bit.org>
parents:
11713
diff
changeset
|
420 /* VTERM_KEY_BACKSPACE becomes 0x7f DEL */ |
d7430b56c9ed
patch 8.0.0740: cannot resize a terminal window by the command
Christian Brabandt <cb@256bit.org>
parents:
11713
diff
changeset
|
421 case K_BS: c = BS; break; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
422 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
|
423 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
|
424 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
|
425 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 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
|
432 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
|
433 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
|
434 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
|
435 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
|
436 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
|
437 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
|
438 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
|
439 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
|
440 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
|
441 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
|
442 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
|
443 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 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
|
452 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
|
453 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
|
454 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
|
455 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
|
456 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
|
457 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
|
458 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
|
459 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
|
460 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
|
461 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
|
462 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
|
463 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
|
464 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
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 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
|
471 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
|
472 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
|
473 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
|
474 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
|
475 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
|
476 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
|
477 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
|
478 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
|
479 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
|
480 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
|
481 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
|
482 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
|
483 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
|
484 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
|
485 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
|
486 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
|
487 |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
488 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
|
489 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
|
490 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
|
491 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
|
492 |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
493 case K_LEFTMOUSE: |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
494 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
|
495 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
|
496 case K_LEFTRELEASE: |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
497 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
|
498 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
|
499 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
|
500 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
|
501 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
|
502 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
|
503 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
|
504 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
|
505 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
|
506 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
|
507 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
|
508 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
|
509 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
|
510 |
11854
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
511 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
|
512 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
|
513 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
|
514 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
|
515 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
|
516 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
|
517 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
|
518 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
|
519 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
|
520 #ifdef FEAT_GUI |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
521 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
|
522 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
|
523 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
524 #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
|
525 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
|
526 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
|
527 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
528 #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
|
529 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
|
530 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
531 #ifdef FEAT_DND |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
532 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
|
533 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
534 #ifdef FEAT_AUTOCMD |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
535 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
|
536 #endif |
092dd1ef0eda
patch 8.0.0807: terminal window can't handle mouse buttons
Christian Brabandt <cb@256bit.org>
parents:
11846
diff
changeset
|
537 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
|
538 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
|
539 } |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
540 |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
541 /* |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
542 * 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
|
543 * - 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
|
544 * - 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
|
545 * 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
|
546 */ |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
547 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
|
548 /* 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
|
549 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
|
550 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
|
551 /* 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
|
552 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
|
553 |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
554 /* 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
|
555 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
|
556 } |
11684
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
557 |
1ce1376fbbf8
patch 8.0.0725: a terminal window does not handle keyboard input
Christian Brabandt <cb@256bit.org>
parents:
11670
diff
changeset
|
558 /* |
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
|
559 * 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
|
560 */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
561 static int |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
562 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
|
563 { |
11842
6bfcedcc0262
patch 8.0.0801: terminal window title says "running" after job exits
Christian Brabandt <cb@256bit.org>
parents:
11840
diff
changeset
|
564 /* 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
|
565 * race condition when updating the title. */ |
6bfcedcc0262
patch 8.0.0801: terminal window title says "running" after job exits
Christian Brabandt <cb@256bit.org>
parents:
11840
diff
changeset
|
566 return term->tl_job != NULL |
6bfcedcc0262
patch 8.0.0801: terminal window title says "running" after job exits
Christian Brabandt <cb@256bit.org>
parents:
11840
diff
changeset
|
567 && term->tl_job->jv_status == JOB_STARTED |
6bfcedcc0262
patch 8.0.0801: terminal window title says "running" after job exits
Christian Brabandt <cb@256bit.org>
parents:
11840
diff
changeset
|
568 && channel_is_open(term->tl_job->jv_channel); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
569 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
570 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
571 /* |
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
|
572 * 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
|
573 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
574 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
|
575 add_scrollback_line_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
|
576 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
577 linenr_T lnum = term->tl_scrollback.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
|
578 sb_line_T *line = (sb_line_T *)term->tl_scrollback.ga_data + lnum; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
579 garray_T ga; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
580 int c; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
581 int 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
|
582 int i; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
583 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
584 ga_init2(&ga, 1, 100); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
585 for (col = 0; col < line->sb_cols; col += line->sb_cells[col].width) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
586 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
587 if (ga_grow(&ga, MB_MAXBYTES) == FAIL) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
588 goto failed; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
589 for (i = 0; (c = line->sb_cells[col].chars[i]) > 0 || i == 0; ++i) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
590 ga.ga_len += mb_char2bytes(c == NUL ? ' ' : c, |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
591 (char_u *)ga.ga_data + ga.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
|
592 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
593 if (ga_grow(&ga, 1) == FAIL) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
594 goto failed; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
595 *((char_u *)ga.ga_data + ga.ga_len) = NUL; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
596 ml_append_buf(term->tl_buffer, lnum, ga.ga_data, ga.ga_len + 1, 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
|
597 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
598 if (lnum == 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
|
599 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
600 /* Delete the empty line that was in the empty 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
|
601 curbuf = 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
|
602 ml_delete(2, 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
|
603 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
|
604 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
605 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
606 failed: |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
607 ga_clear(&ga); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
608 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
609 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
610 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
611 * Add the current lines of the terminal to scrollback and 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
|
612 * Called after the job has ended and when switching to Terminal 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
|
613 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
614 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
|
615 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
|
616 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
617 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
|
618 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
|
619 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
|
620 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
|
621 VTermScreenCell cell; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
622 VTermScreenCell *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
|
623 VTermScreen *screen = vterm_obtain_screen(term->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
|
624 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
625 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
|
626 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
627 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
|
628 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
|
629 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
|
630 && cell.chars[0] != NUL) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
631 len = pos.col + 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
|
632 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
633 if (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
|
634 ++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
|
635 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
|
636 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
637 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
|
638 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
639 /* 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
|
640 --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
|
641 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
|
642 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
643 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
|
644 + 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
|
645 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
646 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
|
647 line->sb_cells = 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
|
648 ++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
|
649 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
650 add_scrollback_line_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
|
651 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
652 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
653 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
654 p = (VTermScreenCell *)alloc((int)sizeof(VTermScreenCell) * 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
|
655 if (p != NULL && 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
|
656 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
657 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
|
658 + 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
|
659 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
660 for (pos.col = 0; pos.col < len; ++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
|
661 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
662 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
|
663 vim_memset(p + pos.col, 0, sizeof(cell)); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
664 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
|
665 p[pos.col] = cell; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
666 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
667 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
|
668 line->sb_cells = 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
|
669 ++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
|
670 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
671 add_scrollback_line_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
|
672 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
673 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
|
674 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
|
675 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
676 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
677 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
678 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
|
679 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
680 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
|
681 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
682 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
|
683 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
|
684 wp->w_valid = 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
|
685 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
|
686 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
687 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
688 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
689 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
690 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
|
691 set_terminal_mode(term_T *term, int on) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
692 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
693 term->tl_terminal_mode = on; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
694 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
|
695 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
|
696 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
|
697 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
|
698 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
699 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
700 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
701 * 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
|
702 * 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
|
703 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
704 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
|
705 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
|
706 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
707 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
|
708 term_free_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
|
709 set_terminal_mode(term, 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
|
710 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
711 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
712 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
713 * Switch from sending keys to the job to 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
|
714 * 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
|
715 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
716 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
|
717 term_enter_terminal_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
|
718 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
719 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
|
720 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
721 /* 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
|
722 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
|
723 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
724 set_terminal_mode(term, TRUE); |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
725 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
726 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
727 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
728 * 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
|
729 * 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
|
730 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
731 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
|
732 term_in_terminal_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
|
733 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
734 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
|
735 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
736 return term != NULL && term->tl_terminal_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
|
737 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
738 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
739 /* |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
740 * Switch from Terminal-Normal mode to sending 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
|
741 * 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
|
742 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
743 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
|
744 term_leave_terminal_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
|
745 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
746 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
|
747 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
|
748 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
|
749 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
750 /* 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
|
751 gap = &term->tl_scrollback; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
752 while (curbuf->b_ml.ml_line_count > term->tl_scrollback_scrolled) |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
753 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
754 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
|
755 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
|
756 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
|
757 --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
|
758 if (gap->ga_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
|
759 break; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
760 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
761 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
|
762 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
763 set_terminal_mode(term, 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
|
764 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
765 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
|
766 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
|
767 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
|
768 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
769 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
770 /* |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
771 * Get a key from the user without mapping. |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
772 * 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
|
773 */ |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
774 static int |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
775 term_vgetc() |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
776 { |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
777 int c; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
778 |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
779 ++no_mapping; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
780 ++allow_keys; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
781 got_int = FALSE; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
782 c = vgetc(); |
11870
c29e498aa77d
patch 8.0.0815: terminal window not correctly updated
Christian Brabandt <cb@256bit.org>
parents:
11866
diff
changeset
|
783 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
|
784 --no_mapping; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
785 --allow_keys; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
786 return c; |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
787 } |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
788 |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
789 /* |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
790 * Send keys to terminal. |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
791 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
792 static int |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
793 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
|
794 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
795 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
|
796 size_t len; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
797 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
|
798 int dragging_outside = FALSE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
799 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
800 /* 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
|
801 switch (c) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
802 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
803 case NUL: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
804 case K_ZERO: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
805 if (typed) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
806 stuffcharReadbuff(c); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
807 return FAIL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
808 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
809 case K_IGNORE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
810 return FAIL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
811 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
812 case K_LEFTDRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
813 case K_MIDDLEDRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
814 case K_RIGHTDRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
815 case K_X1DRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
816 case K_X2DRAG: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
817 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
|
818 /* FALLTHROUGH */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
819 case K_LEFTMOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
820 case K_LEFTMOUSE_NM: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
821 case K_LEFTRELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
822 case K_LEFTRELEASE_NM: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
823 case K_MIDDLEMOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
824 case K_MIDDLERELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
825 case K_RIGHTMOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
826 case K_RIGHTRELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
827 case K_X1MOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
828 case K_X1RELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
829 case K_X2MOUSE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
830 case K_X2RELEASE: |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
831 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
|
832 || 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
|
833 || 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
|
834 || 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
|
835 || dragging_outside) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
836 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
837 /* click outside the current window */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
838 if (typed) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
839 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
840 stuffcharReadbuff(c); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
841 mouse_was_outside = TRUE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
842 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
843 return FAIL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
844 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
845 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
846 if (typed) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
847 mouse_was_outside = FALSE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
848 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
849 /* 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
|
850 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
|
851 if (len > 0) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
852 /* TODO: if FAIL is returned, stop? */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
853 channel_send(term->tl_job->jv_channel, PART_IN, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
854 (char_u *)msg, (int)len, NULL); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
855 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
856 return OK; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
857 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
858 |
11878
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
859 static void |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
860 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
|
861 { |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
862 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
|
863 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
|
864 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
|
865 } |
a83b19a8d7e4
patch 8.0.0819: cursor not positioned in terminal window
Christian Brabandt <cb@256bit.org>
parents:
11876
diff
changeset
|
866 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
867 /* |
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
|
868 * 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
|
869 * 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
|
870 */ |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
871 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
|
872 term_use_loop() |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
873 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
874 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
|
875 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
876 return term != 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
|
877 && !term->tl_terminal_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
|
878 && 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
|
879 && 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
|
880 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
881 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
882 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
883 * 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
|
884 * 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
|
885 * 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
|
886 * 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
|
887 * 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
|
888 */ |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
889 int |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
890 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
|
891 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
892 int c; |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
893 int termkey = 0; |
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
894 |
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
895 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
|
896 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
|
897 position_cursor(curwin, &curbuf->b_term->tl_cursor_pos); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
898 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
899 for (;;) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
900 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
901 /* 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
|
902 /* 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
|
903 while (curwin->w_redr_type != 0) |
c29e498aa77d
patch 8.0.0815: terminal window not correctly updated
Christian Brabandt <cb@256bit.org>
parents:
11866
diff
changeset
|
904 update_screen(0); |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
905 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
|
906 |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
907 c = term_vgetc(); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
908 if (curbuf->b_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
|
909 || !term_job_running(curbuf->b_term)) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
910 /* 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
|
911 break; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
912 |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
913 if (c == (termkey == 0 ? Ctrl_W : termkey)) |
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
914 { |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
915 #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
|
916 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
|
917 out_flush(); |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
918 #endif |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
919 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
|
920 #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
|
921 clear_showcmd(); |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
922 #endif |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
923 if (curbuf->b_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
|
924 || !term_job_running(curbuf->b_term)) |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
925 /* 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
|
926 break; |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
927 |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
928 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
|
929 { |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
930 /* "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
|
931 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
|
932 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
933 else if (termkey == 0 && c == 'N') |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
934 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
935 term_enter_terminal_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
|
936 return FAIL; |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
937 } |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
938 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
|
939 { |
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
940 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
|
941 stuffcharReadbuff(c); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
942 return OK; |
11814
d3d0db111d17
patch 8.0.0787: cannot send CTRL-W command to terminal job
Christian Brabandt <cb@256bit.org>
parents:
11804
diff
changeset
|
943 } |
11764
b82dad3fa176
patch 8.0.0764: 'termkey' does not work yet
Christian Brabandt <cb@256bit.org>
parents:
11757
diff
changeset
|
944 } |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
945 if (send_keys_to_term(curbuf->b_term, c, TRUE) != OK) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
946 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
|
947 } |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
948 return FAIL; |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
949 } |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
950 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
951 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
952 * Called when a job has finished. |
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
|
953 * This updates the title and status, but does not close the vter, because |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
954 * 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
|
955 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
956 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
957 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
|
958 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
959 term_T *term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
960 int did_one = FALSE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
961 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
962 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
|
963 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
|
964 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
965 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
|
966 term->tl_title = NULL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
967 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
|
968 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
|
969 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
|
970 did_one = TRUE; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
971 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
972 if (did_one) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
973 redraw_statuslines(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
974 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
|
975 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
976 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
|
977 maketitle(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
978 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
|
979 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
980 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
981 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
982 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
|
983 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
|
984 { |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
985 if (curbuf == term->tl_buffer) |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
986 { |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
987 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
|
988 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
|
989 else |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
990 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
|
991 } |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
992 } |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
993 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
994 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
995 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
|
996 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
997 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
|
998 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
999 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
|
1000 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
|
1001 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
|
1002 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1003 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1004 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1005 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1006 handle_moverect(VTermRect dest UNUSED, VTermRect src UNUSED, void *user) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1007 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1008 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
|
1009 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1010 /* TODO */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1011 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
|
1012 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1013 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1014 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1015 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1016 handle_movecursor( |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1017 VTermPos pos, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1018 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
|
1019 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
|
1020 void *user) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1021 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1022 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
|
1023 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
|
1024 |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1025 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
|
1026 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
|
1027 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1028 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
|
1029 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1030 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
|
1031 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
|
1032 } |
11874
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1033 if (term->tl_buffer == curbuf) |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1034 { |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1035 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
|
1036 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
|
1037 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1038 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1039 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1040 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1041 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1042 static int |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1043 handle_settermprop( |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1044 VTermProp prop, |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1045 VTermValue *value, |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1046 void *user) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1047 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1048 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
|
1049 |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1050 switch (prop) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1051 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1052 case VTERM_PROP_TITLE: |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1053 vim_free(term->tl_title); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1054 term->tl_title = vim_strsave((char_u *)value->string); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1055 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
|
1056 term->tl_status_text = NULL; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1057 if (term == curbuf->b_term) |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1058 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
|
1059 break; |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1060 |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1061 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
|
1062 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
|
1063 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
|
1064 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
|
1065 break; |
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1066 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1067 default: |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1068 break; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1069 } |
11786
98154b91e43a
patch 8.0.0775: in a terminal the cursor is updated too often
Christian Brabandt <cb@256bit.org>
parents:
11778
diff
changeset
|
1070 /* 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
|
1071 return 1; |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1072 } |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1073 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1074 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1075 * 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
|
1076 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1077 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1078 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
|
1079 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1080 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
|
1081 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
|
1082 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1083 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
|
1084 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
|
1085 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
|
1086 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1087 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
|
1088 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1089 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
|
1090 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
|
1091 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1092 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1093 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1094 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
|
1095 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1096 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1097 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1098 /* |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1099 * 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
|
1100 */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1101 static int |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1102 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
|
1103 { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1104 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
|
1105 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1106 /* 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
|
1107 /* TODO: put the text in the buffer. */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1108 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
|
1109 { |
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
|
1110 VTermScreenCell *p = NULL; |
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
|
1111 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
|
1112 int i; |
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
|
1113 sb_line_T *line; |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1114 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1115 /* 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
|
1116 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
|
1117 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
|
1118 len = i + 1; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1119 |
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
|
1120 if (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
|
1121 p = (VTermScreenCell *)alloc((int)sizeof(VTermScreenCell) * len); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1122 if (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
|
1123 mch_memmove(p, cells, sizeof(VTermScreenCell) * len); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1124 |
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
|
1125 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
|
1126 + 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
|
1127 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
|
1128 line->sb_cells = p; |
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
|
1129 ++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
|
1130 ++term->tl_scrollback_scrolled; |
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 add_scrollback_line_to_buffer(term); |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1133 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1134 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
|
1135 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1136 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1137 static VTermScreenCallbacks screen_callbacks = { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1138 handle_damage, /* damage */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1139 handle_moverect, /* moverect */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1140 handle_movecursor, /* movecursor */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1141 handle_settermprop, /* settermprop */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1142 NULL, /* bell */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1143 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
|
1144 handle_pushline, /* sb_pushline */ |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1145 NULL /* sb_popline */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1146 }; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1147 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1148 /* |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1149 * 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
|
1150 * 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
|
1151 */ |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1152 void |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1153 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
|
1154 { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1155 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
|
1156 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
|
1157 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1158 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
|
1159 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
|
1160 { |
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
|
1161 term->tl_channel_closed = TRUE; |
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 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1163 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
|
1164 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
|
1165 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
|
1166 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
|
1167 |
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 /* Unless in Terminal-Normal mode: clear 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
|
1169 if (!term->tl_terminal_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
|
1170 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
|
1171 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1172 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
|
1173 did_one = TRUE; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1174 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1175 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
|
1176 { |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1177 redraw_statuslines(); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1178 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1179 /* 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
|
1180 ins_char_typebuf(K_IGNORE); |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1181 |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
1182 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
|
1183 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
|
1184 { |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
1185 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
|
1186 maketitle(); |
11880
45558e0507e8
patch 8.0.0820: GUI: cursor in terminal window lags behind
Christian Brabandt <cb@256bit.org>
parents:
11878
diff
changeset
|
1187 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
|
1188 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1189 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1190 } |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1191 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1192 /* |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1193 * Reverse engineer the RGB value into a cterm color index. |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1194 * First color is 1. Return 0 if no match found. |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1195 */ |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1196 static int |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1197 color2index(VTermColor *color, int foreground) |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1198 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1199 int red = color->red; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1200 int blue = color->blue; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1201 int green = color->green; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1202 |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1203 /* The argument for lookup_color() is for the color_names[] table. */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1204 if (red == 0) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1205 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1206 if (green == 0) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1207 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1208 if (blue == 0) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1209 return lookup_color(0, foreground) + 1; /* black */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1210 if (blue == 224) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1211 return lookup_color(1, foreground) + 1; /* dark blue */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1212 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1213 else if (green == 224) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1214 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1215 if (blue == 0) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1216 return lookup_color(2, foreground) + 1; /* dark green */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1217 if (blue == 224) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1218 return lookup_color(3, foreground) + 1; /* dark cyan */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1219 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1220 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1221 else if (red == 224) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1222 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1223 if (green == 0) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1224 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1225 if (blue == 0) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1226 return lookup_color(4, foreground) + 1; /* dark red */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1227 if (blue == 224) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1228 return lookup_color(5, foreground) + 1; /* dark magenta */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1229 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1230 else if (green == 224) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1231 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1232 if (blue == 0) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1233 return lookup_color(6, foreground) + 1; /* dark yellow / brown */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1234 if (blue == 224) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1235 return lookup_color(8, foreground) + 1; /* white / light grey */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1236 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1237 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1238 else if (red == 128) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1239 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1240 if (green == 128 && blue == 128) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1241 return lookup_color(12, foreground) + 1; /* high intensity black / dark grey */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1242 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1243 else if (red == 255) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1244 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1245 if (green == 64) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1246 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1247 if (blue == 64) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1248 return lookup_color(20, foreground) + 1; /* light red */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1249 if (blue == 255) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1250 return lookup_color(22, foreground) + 1; /* light magenta */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1251 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1252 else if (green == 255) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1253 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1254 if (blue == 64) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1255 return lookup_color(24, foreground) + 1; /* yellow */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1256 if (blue == 255) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1257 return lookup_color(26, foreground) + 1; /* white */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1258 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1259 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1260 else if (red == 64) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1261 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1262 if (green == 64) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1263 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1264 if (blue == 255) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1265 return lookup_color(14, foreground) + 1; /* light blue */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1266 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1267 else if (green == 255) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1268 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1269 if (blue == 64) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1270 return lookup_color(16, foreground) + 1; /* light green */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1271 if (blue == 255) |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1272 return lookup_color(18, foreground) + 1; /* light cyan */ |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1273 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1274 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1275 if (t_colors >= 256) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1276 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1277 if (red == blue && red == green) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1278 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1279 /* 24-color greyscale */ |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1280 static int cutoff[23] = { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1281 0x05, 0x10, 0x1B, 0x26, 0x31, 0x3C, 0x47, 0x52, |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1282 0x5D, 0x68, 0x73, 0x7F, 0x8A, 0x95, 0xA0, 0xAB, |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1283 0xB6, 0xC1, 0xCC, 0xD7, 0xE2, 0xED, 0xF9}; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1284 int i; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1285 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1286 for (i = 0; i < 23; ++i) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1287 if (red < cutoff[i]) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1288 return i + 233; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1289 return 256; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1290 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1291 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1292 /* 216-color cube */ |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1293 return 17 + ((red + 25) / 0x33) * 36 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1294 + ((green + 25) / 0x33) * 6 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1295 + (blue + 25) / 0x33; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1296 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1297 return 0; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1298 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1299 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1300 /* |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1301 * Convert the attributes of a vterm cell into an attribute index. |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1302 */ |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1303 static int |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1304 cell2attr(VTermScreenCell *cell) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1305 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1306 int attr = 0; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1307 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1308 if (cell->attrs.bold) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1309 attr |= HL_BOLD; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1310 if (cell->attrs.underline) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1311 attr |= HL_UNDERLINE; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1312 if (cell->attrs.italic) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1313 attr |= HL_ITALIC; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1314 if (cell->attrs.strike) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1315 attr |= HL_STANDOUT; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1316 if (cell->attrs.reverse) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1317 attr |= HL_INVERSE; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1318 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1319 #ifdef FEAT_GUI |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1320 if (gui.in_use) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1321 { |
11745
5a5709918a98
patch 8.0.0755: terminal window does not have colors in the GUI
Christian Brabandt <cb@256bit.org>
parents:
11743
diff
changeset
|
1322 guicolor_T fg, bg; |
5a5709918a98
patch 8.0.0755: terminal window does not have colors in the GUI
Christian Brabandt <cb@256bit.org>
parents:
11743
diff
changeset
|
1323 |
5a5709918a98
patch 8.0.0755: terminal window does not have colors in the GUI
Christian Brabandt <cb@256bit.org>
parents:
11743
diff
changeset
|
1324 fg = gui_mch_get_rgb_color(cell->fg.red, cell->fg.green, cell->fg.blue); |
5a5709918a98
patch 8.0.0755: terminal window does not have colors in the GUI
Christian Brabandt <cb@256bit.org>
parents:
11743
diff
changeset
|
1325 bg = gui_mch_get_rgb_color(cell->bg.red, cell->bg.green, cell->bg.blue); |
5a5709918a98
patch 8.0.0755: terminal window does not have colors in the GUI
Christian Brabandt <cb@256bit.org>
parents:
11743
diff
changeset
|
1326 return get_gui_attr_idx(attr, fg, bg); |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1327 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1328 else |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1329 #endif |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1330 #ifdef FEAT_TERMGUICOLORS |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1331 if (p_tgc) |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1332 { |
11755
12fa6072977a
patch 8.0.0760: terminal window colors wrong with 'termguicolors'
Christian Brabandt <cb@256bit.org>
parents:
11753
diff
changeset
|
1333 guicolor_T fg, bg; |
12fa6072977a
patch 8.0.0760: terminal window colors wrong with 'termguicolors'
Christian Brabandt <cb@256bit.org>
parents:
11753
diff
changeset
|
1334 |
12fa6072977a
patch 8.0.0760: terminal window colors wrong with 'termguicolors'
Christian Brabandt <cb@256bit.org>
parents:
11753
diff
changeset
|
1335 fg = gui_get_rgb_color_cmn(cell->fg.red, cell->fg.green, cell->fg.blue); |
12fa6072977a
patch 8.0.0760: terminal window colors wrong with 'termguicolors'
Christian Brabandt <cb@256bit.org>
parents:
11753
diff
changeset
|
1336 bg = gui_get_rgb_color_cmn(cell->bg.red, cell->bg.green, cell->bg.blue); |
12fa6072977a
patch 8.0.0760: terminal window colors wrong with 'termguicolors'
Christian Brabandt <cb@256bit.org>
parents:
11753
diff
changeset
|
1337 |
12fa6072977a
patch 8.0.0760: terminal window colors wrong with 'termguicolors'
Christian Brabandt <cb@256bit.org>
parents:
11753
diff
changeset
|
1338 return get_tgc_attr_idx(attr, fg, bg); |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1339 } |
11755
12fa6072977a
patch 8.0.0760: terminal window colors wrong with 'termguicolors'
Christian Brabandt <cb@256bit.org>
parents:
11753
diff
changeset
|
1340 else |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1341 #endif |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1342 { |
11822
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1343 return get_cterm_attr_idx(attr, color2index(&cell->fg, TRUE), |
1e237c5994fc
patch 8.0.0791: terminal colors depend on the system
Christian Brabandt <cb@256bit.org>
parents:
11818
diff
changeset
|
1344 color2index(&cell->bg, FALSE)); |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1345 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1346 return 0; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1347 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1348 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1349 /* |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1350 * Called to update the window that contains a terminal. |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1351 * Returns FAIL when there is no terminal running in this window. |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
1352 */ |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1353 int |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1354 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
|
1355 { |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1356 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
|
1357 VTerm *vterm; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1358 VTermScreen *screen; |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1359 VTermState *state; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
1360 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
|
1361 |
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
|
1362 if (term == NULL || term->tl_vterm == NULL || term->tl_terminal_mode) |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1363 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
|
1364 |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1365 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
|
1366 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
|
1367 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
|
1368 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1369 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1370 * 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
|
1371 * 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
|
1372 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1373 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
|
1374 || (!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
|
1375 { |
11818
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1376 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
|
1377 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
|
1378 win_T *twp; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1379 |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1380 FOR_ALL_WINDOWS(twp) |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1381 { |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1382 /* 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
|
1383 * smallest size. */ |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1384 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
|
1385 { |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1386 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
|
1387 rows = twp->w_height; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1388 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
|
1389 cols = twp->w_width; |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1390 } |
0f9780ee4207
patch 8.0.0789: splitting terminal window has resizing problems
Christian Brabandt <cb@256bit.org>
parents:
11816
diff
changeset
|
1391 } |
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
|
1392 |
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
1393 vterm_set_size(vterm, rows, cols); |
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
1394 ch_logn(term->tl_job->jv_channel, "Resizing terminal to %d lines", |
b4d8f956eb18
patch 8.0.0753: no size reports to a job running in a terminal
Christian Brabandt <cb@256bit.org>
parents:
11729
diff
changeset
|
1395 rows); |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
1396 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
|
1397 } |
11713
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
1398 |
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
1399 /* 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
|
1400 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
|
1401 position_cursor(wp, &pos); |
2ec27561dd76
patch 8.0.0739: terminal resizing doesn't work well.
Christian Brabandt <cb@256bit.org>
parents:
11711
diff
changeset
|
1402 |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
1403 /* 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
|
1404 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
|
1405 { |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
1406 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
|
1407 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
|
1408 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1409 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
|
1410 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1411 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
|
1412 { |
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
1413 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
|
1414 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
|
1415 |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1416 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
|
1417 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
|
1418 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1419 /* 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
|
1420 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
|
1421 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
|
1422 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1423 ScreenLines[off] = ' '; |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1424 #if defined(FEAT_MBYTE) |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1425 if (enc_utf8) |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1426 ScreenLinesUC[off] = NUL; |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1427 #endif |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1428 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1429 else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1430 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1431 #if defined(FEAT_MBYTE) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1432 if (enc_utf8 && 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
|
1433 { |
22cef8face93
patch 8.0.0745: multi-byte characters in a terminal don't display well
Christian Brabandt <cb@256bit.org>
parents:
11723
diff
changeset
|
1434 ScreenLines[off] = ' '; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1435 ScreenLinesUC[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
|
1436 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1437 else |
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
|
1438 { |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1439 ScreenLines[off] = c; |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1440 if (enc_utf8) |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1441 ScreenLinesUC[off] = NUL; |
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
|
1442 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1443 #else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1444 ScreenLines[off] = c; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1445 #endif |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1446 } |
11743
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1447 ScreenAttrs[off] = cell2attr(&cell); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1448 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1449 ++pos.col; |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
1450 ++off; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1451 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
|
1452 { |
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
|
1453 ScreenLines[off] = NUL; |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1454 #if defined(FEAT_MBYTE) |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1455 if (enc_utf8) |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1456 ScreenLinesUC[off] = NUL; |
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
1457 #endif |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1458 ++pos.col; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1459 ++off; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1460 } |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
1461 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1462 } |
11711
dac96f8800be
patch 8.0.0738: cannot use the mouse to resize a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11694
diff
changeset
|
1463 else |
dac96f8800be
patch 8.0.0738: cannot use the mouse to resize a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11694
diff
changeset
|
1464 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
|
1465 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1466 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
|
1467 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
|
1468 } |
11834
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1469 |
0cfe4a07c2ad
patch 8.0.0797: finished job in terminal window is not handled
Christian Brabandt <cb@256bit.org>
parents:
11822
diff
changeset
|
1470 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
|
1471 } |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
1472 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1473 /* |
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
|
1474 * 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
|
1475 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1476 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
|
1477 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
|
1478 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1479 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
|
1480 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1481 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
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 * Return TRUE if "wp" is a terminal window where the job has finished or we |
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 * are in 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
|
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 |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1487 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
|
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 = 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
|
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 && (term->tl_vterm == NULL || term->tl_terminal_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
|
1492 } |
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 |
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 /* |
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
|
1495 * 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
|
1496 * 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
|
1497 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1498 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
|
1499 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
|
1500 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1501 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
|
1502 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1503 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
|
1504 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1505 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
|
1506 redraw_buf_later(term->tl_buffer, NOT_VALID); |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1507 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1508 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1509 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1510 /* |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1511 * Get the screen attribute for a position in the buffer. |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1512 */ |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1513 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
|
1514 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
|
1515 { |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1516 term_T *term = buf->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
|
1517 sb_line_T *line; |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1518 |
11844
42585fee5e66
patch 8.0.0802: last line of terminal window has no color
Christian Brabandt <cb@256bit.org>
parents:
11842
diff
changeset
|
1519 if (lnum > term->tl_scrollback.ga_len) |
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
|
1520 return 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
|
1521 line = (sb_line_T *)term->tl_scrollback.ga_data + lnum - 1; |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1522 if (col >= line->sb_cols) |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1523 return 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
|
1524 return cell2attr(line->sb_cells + 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
|
1525 } |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1526 |
f080b225a2a4
patch 8.0.0798: no highlighting in a terminal window with a finished job
Christian Brabandt <cb@256bit.org>
parents:
11834
diff
changeset
|
1527 /* |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1528 * Set job options common for Unix and MS-Windows. |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1529 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1530 static void |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1531 setup_job_options(jobopt_T *opt, 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
|
1532 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1533 clear_job_options(opt); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1534 opt->jo_mode = MODE_RAW; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1535 opt->jo_out_mode = MODE_RAW; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1536 opt->jo_err_mode = MODE_RAW; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1537 opt->jo_set = JO_MODE | JO_OUT_MODE | JO_ERR_MODE; |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1538 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1539 opt->jo_io[PART_OUT] = JIO_BUFFER; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1540 opt->jo_io[PART_ERR] = JIO_BUFFER; |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1541 opt->jo_set |= JO_OUT_IO + JO_ERR_IO; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1542 |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1543 opt->jo_modifiable[PART_OUT] = 0; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1544 opt->jo_modifiable[PART_ERR] = 0; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1545 opt->jo_set |= JO_OUT_MODIFIABLE + JO_ERR_MODIFIABLE; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1546 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1547 opt->jo_io_buf[PART_OUT] = curbuf->b_fnum; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1548 opt->jo_io_buf[PART_ERR] = curbuf->b_fnum; |
11723
1922710ee8fa
patch 8.0.0744: terminal window does not use a pty
Christian Brabandt <cb@256bit.org>
parents:
11719
diff
changeset
|
1549 opt->jo_pty = TRUE; |
11757
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1550 opt->jo_set |= JO_OUT_BUF + JO_ERR_BUF; |
74abb6c84984
patch 8.0.0761: options not set properly for a terminal buffer
Christian Brabandt <cb@256bit.org>
parents:
11755
diff
changeset
|
1551 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1552 opt->jo_term_rows = rows; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1553 opt->jo_term_cols = cols; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1554 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1555 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1556 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1557 * 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
|
1558 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1559 static void |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1560 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
|
1561 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1562 VTerm *vterm; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1563 VTermScreen *screen; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1564 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1565 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
|
1566 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
|
1567 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
|
1568 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
|
1569 /* 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
|
1570 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
|
1571 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1572 /* Vterm uses a default black background. Set it to white when |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1573 * 'background' is "light". */ |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1574 if (*p_bg == 'l') |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1575 { |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1576 VTermColor fg, bg; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1577 |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1578 fg.red = fg.green = fg.blue = 0; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1579 bg.red = bg.green = bg.blue = 255; |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1580 vterm_state_set_default_colors(vterm_obtain_state(vterm), &fg, &bg); |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1581 } |
6141a21dd232
patch 8.0.0754: terminal window does not support colors
Christian Brabandt <cb@256bit.org>
parents:
11741
diff
changeset
|
1582 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1583 /* 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
|
1584 vterm_screen_reset(screen, 1 /* hard */); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1585 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
1586 |
11772
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1587 /* |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1588 * 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
|
1589 */ |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1590 char_u * |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1591 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
|
1592 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1593 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
|
1594 { |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1595 char_u *txt; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1596 size_t len; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1597 |
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
|
1598 if (term->tl_terminal_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
|
1599 { |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1600 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
|
1601 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
|
1602 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
|
1603 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
|
1604 } |
be40c8a9240d
patch 8.0.0813: cannot use a terminal window while the job is running
Christian Brabandt <cb@256bit.org>
parents:
11854
diff
changeset
|
1605 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
|
1606 txt = term->tl_title; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1607 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
|
1608 txt = (char_u *)_("running"); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1609 else |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1610 txt = (char_u *)_("finished"); |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1611 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
|
1612 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
|
1613 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
|
1614 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
|
1615 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
|
1616 } |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1617 return term->tl_status_text; |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1618 } |
f33b9375ba03
patch 8.0.0768: terminal window status shows "[Scratch]"
Christian Brabandt <cb@256bit.org>
parents:
11764
diff
changeset
|
1619 |
11816
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1620 /* |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1621 * 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
|
1622 */ |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1623 int |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1624 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
|
1625 { |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1626 int abort = FALSE; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1627 term_T *term; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1628 typval_T tv; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1629 |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1630 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
|
1631 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
|
1632 { |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1633 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
|
1634 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
|
1635 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
|
1636 } |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1637 return abort; |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1638 } |
f6575adc6ee8
patch 8.0.0788: MS-Windows: cannot build with terminal feature
Christian Brabandt <cb@256bit.org>
parents:
11814
diff
changeset
|
1639 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1640 /* |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1641 * 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
|
1642 * 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
|
1643 */ |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1644 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
|
1645 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
|
1646 { |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1647 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
|
1648 |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1649 (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
|
1650 ++emsg_off; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1651 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
|
1652 --emsg_off; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1653 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
|
1654 return NULL; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1655 return buf; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1656 } |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1657 |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1658 /* |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1659 * "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
|
1660 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1661 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1662 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
|
1663 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1664 int attr; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1665 size_t i; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1666 char_u *name; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1667 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1668 static struct { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1669 char *name; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1670 int attr; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1671 } attrs[] = { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1672 {"bold", HL_BOLD}, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1673 {"italic", HL_ITALIC}, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1674 {"underline", HL_UNDERLINE}, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1675 {"strike", HL_STANDOUT}, |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1676 {"reverse", HL_INVERSE}, |
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 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
|
1680 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
|
1681 if (name == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1682 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1683 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1684 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
|
1685 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
|
1686 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1687 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
|
1688 break; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1689 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1690 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1691 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1692 /* |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1693 * "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
|
1694 */ |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1695 void |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1696 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
|
1697 { |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1698 buf_T *buf = term_get_buf(argvars); |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1699 list_T *l; |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1700 |
11876
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1701 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
|
1702 return; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1703 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
|
1704 return; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1705 |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1706 l = rettv->vval.v_list; |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1707 list_append_number(l, buf->b_term->tl_cursor_pos.row); |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1708 list_append_number(l, buf->b_term->tl_cursor_pos.col); |
3704ca24c9a2
patch 8.0.0818: cannot get the cursor position of a terminal
Christian Brabandt <cb@256bit.org>
parents:
11874
diff
changeset
|
1709 list_append_number(l, buf->b_term->tl_cursor_visible); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1710 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1711 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1712 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1713 * "term_getjob(buf)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1714 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1715 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1716 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
|
1717 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1718 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
|
1719 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1720 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
|
1721 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
|
1722 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1723 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1724 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1725 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
|
1726 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
|
1727 ++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
|
1728 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1729 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1730 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1731 * "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
|
1732 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1733 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1734 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
|
1735 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1736 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
|
1737 term_T *term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1738 int row; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1739 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1740 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
|
1741 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1742 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1743 term = buf->b_term; |
11874
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1744 if (argvars[1].v_type == VAR_UNKNOWN) |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1745 row = term->tl_cursor_pos.row; |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1746 else |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1747 row = (int)get_tv_number(&argvars[1]); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1748 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1749 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
|
1750 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1751 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
|
1752 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1753 /* 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
|
1754 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
|
1755 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
|
1756 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1757 else |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1758 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1759 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
|
1760 VTermRect rect; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1761 int len; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1762 char_u *p; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1763 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1764 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
|
1765 p = alloc(len); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1766 if (p == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1767 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1768 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
|
1769 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1770 rect.start_col = 0; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1771 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
|
1772 rect.start_row = row; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1773 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
|
1774 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
|
1775 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1776 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1777 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1778 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1779 * "term_getsize(buf)" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1780 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1781 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1782 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
|
1783 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1784 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
|
1785 list_T *l; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1786 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1787 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
|
1788 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1789 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1790 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1791 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1792 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
|
1793 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
|
1794 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
|
1795 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1796 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1797 /* |
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
|
1798 * "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
|
1799 */ |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1800 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
|
1801 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
|
1802 { |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1803 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
|
1804 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
|
1805 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
|
1806 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1807 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
|
1808 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
|
1809 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
|
1810 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
|
1811 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1812 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
|
1813 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
|
1814 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
|
1815 STRCPY(val, "finished"); |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1816 if (term->tl_terminal_mode) |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1817 STRCAT(val, ",terminal"); |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1818 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
|
1819 } |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1820 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1821 /* |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1822 * "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
|
1823 */ |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1824 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
|
1825 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
|
1826 { |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1827 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
|
1828 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1829 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
|
1830 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
|
1831 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
|
1832 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1833 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
|
1834 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
|
1835 } |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1836 |
69e7379f46db
patch 8.0.0821: cannot get the title and status of a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11880
diff
changeset
|
1837 /* |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1838 * "term_list()" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1839 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1840 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1841 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
|
1842 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1843 term_T *tp; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1844 list_T *l; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1845 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1846 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
|
1847 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1848 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1849 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
|
1850 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
|
1851 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
|
1852 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
|
1853 (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
|
1854 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1855 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1856 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1857 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1858 * "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
|
1859 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1860 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1861 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
|
1862 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1863 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
|
1864 VTermScreen *screen = NULL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1865 VTermPos pos; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1866 list_T *l; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1867 term_T *term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1868 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1869 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
|
1870 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1871 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1872 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1873 term = buf->b_term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1874 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
|
1875 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
|
1876 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1877 l = rettv->vval.v_list; |
11874
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1878 if (argvars[1].v_type == VAR_UNKNOWN) |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1879 pos.row = term->tl_cursor_pos.row; |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1880 else |
d444e087b8fd
patch 8.0.0817: cannot get the terminal line at the cursor
Christian Brabandt <cb@256bit.org>
parents:
11872
diff
changeset
|
1881 pos.row = (int)get_tv_number(&argvars[1]); |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1882 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
|
1883 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1884 dict_T *dcell; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1885 VTermScreenCell cell; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1886 char_u rgb[8]; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1887 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
|
1888 int off = 0; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1889 int i; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1890 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1891 if (screen == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1892 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1893 linenr_T lnum = pos.row + term->tl_scrollback_scrolled; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1894 sb_line_T *line; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1895 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1896 /* 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
|
1897 if (lnum < 0 || lnum >= term->tl_scrollback.ga_len) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1898 break; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1899 line = (sb_line_T *)term->tl_scrollback.ga_data + lnum; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1900 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
|
1901 break; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1902 cell = line->sb_cells[pos.col]; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1903 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1904 else if (vterm_screen_get_cell(screen, pos, &cell) == 0) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1905 break; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1906 dcell = dict_alloc(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1907 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
|
1908 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1909 for (i = 0; i < VTERM_MAX_CHARS_PER_CELL; ++i) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1910 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1911 if (cell.chars[i] == 0) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1912 break; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1913 off += (*utf_char2bytes)((int)cell.chars[i], mbs + off); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1914 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1915 mbs[off] = NUL; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1916 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
|
1917 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1918 vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1919 cell.fg.red, cell.fg.green, cell.fg.blue); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1920 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
|
1921 vim_snprintf((char *)rgb, 8, "#%02x%02x%02x", |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1922 cell.bg.red, cell.bg.green, cell.bg.blue); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1923 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
|
1924 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1925 dict_add_nr_str(dcell, "attr", cell2attr(&cell), NULL); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1926 dict_add_nr_str(dcell, "width", cell.width, NULL); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1927 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1928 ++pos.col; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1929 if (cell.width == 2) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1930 ++pos.col; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1931 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1932 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1933 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1934 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1935 * "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
|
1936 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1937 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1938 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
|
1939 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1940 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
|
1941 char_u *msg; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1942 term_T *term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1943 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1944 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
|
1945 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1946 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1947 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1948 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
|
1949 if (msg == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1950 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1951 term = buf->b_term; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1952 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
|
1953 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1954 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1955 while (*msg != NUL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1956 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1957 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
|
1958 msg += MB_PTR2LEN(msg); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1959 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1960 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1961 /* TODO: only update once in a while. */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1962 update_screen(0); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1963 if (buf == curbuf) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1964 update_cursor(term, TRUE); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1965 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1966 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1967 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1968 * "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
|
1969 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1970 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1971 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
|
1972 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1973 char_u *cmd = get_tv_string_chk(&argvars[0]); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1974 exarg_T ea; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1975 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1976 if (cmd == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1977 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1978 ea.arg = cmd; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1979 ex_terminal(&ea); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1980 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1981 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
|
1982 rettv->vval.v_number = curbuf->b_fnum; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1983 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1984 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1985 /* |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1986 * "term_wait" function |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1987 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1988 void |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1989 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
|
1990 { |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1991 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
|
1992 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1993 if (buf == NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1994 return; |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1995 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1996 /* Get the job status, this will detect a job that finished. */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1997 if (buf->b_term->tl_job != NULL) |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
1998 (void)job_status(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
|
1999 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2000 /* Check for any pending channel I/O. */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2001 vpeekc_any(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2002 ui_delay(10L, FALSE); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2003 |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2004 /* Flushing messages on channels is hopefully sufficient. |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2005 * TODO: is there a better way? */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2006 parse_queued_messages(); |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2007 } |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2008 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2009 # ifdef WIN3264 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2010 |
11846
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2011 /************************************** |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2012 * 2. MS-Windows implementation. |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2013 */ |
1c65cad8b967
patch 8.0.0804: terminal window functions not yet implemented
Christian Brabandt <cb@256bit.org>
parents:
11844
diff
changeset
|
2014 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2015 #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
|
2016 #define WINPTY_SPAWN_FLAG_EXIT_AFTER_SHUTDOWN 2ull |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2017 |
11774
edf1a2a247fa
patch 8.0.0769: build problems with terminal on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11772
diff
changeset
|
2018 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
|
2019 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
|
2020 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
|
2021 BOOL (*winpty_spawn)(void*, void*, HANDLE*, HANDLE*, DWORD*, void*); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2022 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
|
2023 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
|
2024 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
|
2025 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
|
2026 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
|
2027 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
|
2028 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
|
2029 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
|
2030 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
|
2031 BOOL (*winpty_set_size)(void*, int, int, void*); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2032 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2033 #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
|
2034 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2035 static HINSTANCE hWinPtyDLL = NULL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2036 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2037 int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2038 dyn_winpty_init(void) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2039 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2040 int i; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2041 static struct |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2042 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2043 char *name; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2044 FARPROC *ptr; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2045 } winpty_entry[] = |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2046 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2047 {"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
|
2048 {"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
|
2049 {"winpty_config_new", (FARPROC*)&winpty_config_new}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2050 {"winpty_config_set_initial_size", (FARPROC*)&winpty_config_set_initial_size}, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2051 {"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
|
2052 {"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
|
2053 {"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
|
2054 {"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
|
2055 {"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
|
2056 {"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
|
2057 {"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
|
2058 {"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
|
2059 {"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
|
2060 {"winpty_set_size", (FARPROC*)&winpty_set_size}, |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2061 {NULL, NULL} |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2062 }; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2063 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2064 /* 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
|
2065 if (hWinPtyDLL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2066 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2067 /* Load winpty.dll */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2068 hWinPtyDLL = vimLoadLib(WINPTY_DLL); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2069 if (!hWinPtyDLL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2070 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2071 EMSG2(_(e_loadlib), WINPTY_DLL); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2072 return 0; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2073 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2074 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
|
2075 && 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
|
2076 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2077 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
|
2078 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
|
2079 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2080 EMSG2(_(e_loadfunc), winpty_entry[i].name); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2081 return 0; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2082 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2083 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2084 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2085 return 1; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2086 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2087 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2088 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2089 * 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
|
2090 * 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
|
2091 * 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
|
2092 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2093 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2094 term_and_job_init(term_T *term, int rows, int cols, char_u *cmd) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2095 { |
11798
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2096 WCHAR *p; |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2097 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
|
2098 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
|
2099 jobopt_T opt; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2100 DWORD error; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2101 HANDLE jo = NULL, child_process_handle, child_thread_handle; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2102 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
|
2103 void *spawn_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
|
2104 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2105 if (!dyn_winpty_init()) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2106 return FAIL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2107 |
11798
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2108 p = enc_to_utf16(cmd, NULL); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2109 if (p == NULL) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2110 return FAIL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2111 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2112 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
|
2113 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
|
2114 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2115 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2116 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
|
2117 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
|
2118 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2119 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2120 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
|
2121 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
|
2122 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2123 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2124 winpty_config_set_initial_size(term->tl_winpty_config, cols, rows); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2125 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
|
2126 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
|
2127 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2128 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2129 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
|
2130 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
|
2131 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
|
2132 NULL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2133 p, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2134 NULL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2135 NULL, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2136 &winpty_err); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2137 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
|
2138 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2139 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2140 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
|
2141 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
|
2142 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2143 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2144 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
|
2145 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
|
2146 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2147 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2148 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
|
2149 &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
|
2150 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2151 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2152 channel_set_pipes(channel, |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2153 (sock_T) CreateFileW( |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2154 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
|
2155 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
|
2156 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
|
2157 (sock_T) CreateFileW( |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2158 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
|
2159 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
|
2160 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
|
2161 (sock_T) CreateFileW( |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2162 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
|
2163 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
|
2164 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
|
2165 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2166 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
|
2167 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
|
2168 goto failed; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2169 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2170 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
|
2171 { |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2172 /* 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
|
2173 CloseHandle(jo); |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2174 jo = NULL; |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2175 } |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2176 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2177 winpty_spawn_config_free(spawn_config); |
11798
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2178 vim_free(p); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2179 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2180 create_vterm(term, rows, cols); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2181 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2182 setup_job_options(&opt, rows, cols); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2183 channel_set_job(channel, job, &opt); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2184 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2185 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
|
2186 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
|
2187 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
|
2188 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
|
2189 job->jv_status = JOB_STARTED; |
11802
b1fd49b4eea7
patch 8.0.0783: job of terminal may be freed too early
Christian Brabandt <cb@256bit.org>
parents:
11798
diff
changeset
|
2190 ++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
|
2191 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
|
2192 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2193 return OK; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2194 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2195 failed: |
11798
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2196 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
|
2197 winpty_spawn_config_free(spawn_config); |
4d545cd33f0a
patch 8.0.0781: MS-Windows: memory leak when using :terminal
Christian Brabandt <cb@256bit.org>
parents:
11794
diff
changeset
|
2198 vim_free(p); |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2199 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
|
2200 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
|
2201 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
|
2202 { |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
2203 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
|
2204 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
|
2205 } |
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
2206 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
|
2207 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
|
2208 CloseHandle(jo); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2209 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
|
2210 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
|
2211 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
|
2212 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
|
2213 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
|
2214 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
|
2215 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
|
2216 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2217 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
|
2218 (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
|
2219 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2220 EMSG(msg); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2221 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
|
2222 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2223 return FAIL; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2224 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2225 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2226 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2227 * 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
|
2228 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2229 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
|
2230 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
|
2231 { |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
2232 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
|
2233 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
|
2234 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
|
2235 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
|
2236 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
|
2237 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
|
2238 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
|
2239 vterm_free(term->tl_vterm); |
11838
e6080ed193f6
patch 8.0.0799: missing semicolon
Christian Brabandt <cb@256bit.org>
parents:
11836
diff
changeset
|
2240 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
|
2241 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2242 |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2243 /* |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2244 * 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
|
2245 */ |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2246 static void |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2247 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
|
2248 { |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2249 winpty_set_size(term->tl_winpty, cols, rows, NULL); |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2250 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2251 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2252 # else |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2253 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2254 /************************************** |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2255 * 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
|
2256 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2257 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2258 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2259 * 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
|
2260 * 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
|
2261 * 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
|
2262 * 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
|
2263 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2264 static int |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2265 term_and_job_init(term_T *term, int rows, int cols, char_u *cmd) |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2266 { |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2267 typval_T argvars[2]; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2268 jobopt_T opt; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2269 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2270 create_vterm(term, rows, cols); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2271 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2272 argvars[0].v_type = VAR_STRING; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2273 argvars[0].vval.v_string = cmd; |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2274 setup_job_options(&opt, rows, cols); |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2275 term->tl_job = job_start(argvars, &opt); |
11802
b1fd49b4eea7
patch 8.0.0783: job of terminal may be freed too early
Christian Brabandt <cb@256bit.org>
parents:
11798
diff
changeset
|
2276 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
|
2277 ++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
|
2278 |
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
|
2279 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
|
2280 && 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
|
2281 && 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
|
2282 } |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2283 |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2284 /* |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2285 * 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
|
2286 */ |
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2287 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
|
2288 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
|
2289 { |
11751
a1815c4f8b70
patch 8.0.0758: possible crash when using a terminal window
Christian Brabandt <cb@256bit.org>
parents:
11745
diff
changeset
|
2290 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
|
2291 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
|
2292 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
|
2293 } |
11753
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2294 |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2295 /* |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2296 * 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
|
2297 */ |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2298 static void |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2299 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
|
2300 { |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2301 /* 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
|
2302 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
|
2303 { |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2304 int fd = -1; |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2305 int part; |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2306 |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2307 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
|
2308 { |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2309 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
|
2310 if (isatty(fd)) |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2311 break; |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2312 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2313 if (part < PART_COUNT && mch_report_winsize(fd, rows, cols) == OK) |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2314 mch_stop_job(term->tl_job, (char_u *)"winch"); |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2315 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2316 } |
f7c2473796b7
patch 8.0.0759: MS-Windows: terminal does not adjust size
Christian Brabandt <cb@256bit.org>
parents:
11751
diff
changeset
|
2317 |
11719
13ecb3e64399
patch 8.0.0742: terminal feature does not work on MS-Windows
Christian Brabandt <cb@256bit.org>
parents:
11715
diff
changeset
|
2318 # endif |
11694
8f5840a59b31
patch 8.0.0730: terminal feature only supports Unix-like systems
Christian Brabandt <cb@256bit.org>
parents:
11690
diff
changeset
|
2319 |
11621
b8299e742f41
patch 8.0.0693: no terminal emulator support
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
2320 #endif /* FEAT_TERMINAL */ |