Skip to content

Commit c255b78

Browse files
committed
patch 9.0.0954: cannot detect whether modifyOtherKeys is enabled
Problem: Cannot detect whether modifyOtherKeys is enabled. Solution: Use XTQMODKEYS introduced by xterm version 377 to request the modifyOtherKeys level. Update the keycode check results.
1 parent 837ca8f commit c255b78

File tree

13 files changed

+201
-33
lines changed

13 files changed

+201
-33
lines changed

src/getchar.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2463,7 +2463,11 @@ check_simplify_modifier(int max_offset)
24632463
static int
24642464
key_protocol_enabled(void)
24652465
{
2466-
return seenModifyOtherKeys || kitty_protocol_state == KKPS_ENABLED;
2466+
// If xterm has responded to XTQMODKEYS it overrules seenModifyOtherKeys.
2467+
int using_mok = modify_otherkeys_state != MOKS_INITIAL
2468+
? modify_otherkeys_state == MOKS_ENABLED
2469+
: seenModifyOtherKeys;
2470+
return using_mok || kitty_protocol_state == KKPS_ENABLED;
24672471
}
24682472

24692473
/*

src/globals.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1374,9 +1374,29 @@ EXTERN int reg_executing INIT(= 0); // register being executed or zero
13741374
EXTERN int pending_end_reg_executing INIT(= 0);
13751375

13761376
// Set when a modifyOtherKeys sequence was seen, then simplified mappings will
1377-
// no longer be used.
1377+
// no longer be used. To be combined with modify_otherkeys_state.
13781378
EXTERN int seenModifyOtherKeys INIT(= FALSE);
13791379

1380+
// The state for the modifyOtherKeys level
1381+
typedef enum {
1382+
// Initially we have no clue if the protocol is on or off.
1383+
MOKS_INITIAL,
1384+
// Used when receiving the state and the level is not two.
1385+
MOKS_OFF,
1386+
// Used when receiving the state and the level is two.
1387+
MOKS_ENABLED,
1388+
// Used after outputting t_KE when the state was MOKS_ENABLED. We do not
1389+
// really know if t_KE actually disabled the protocol, the following t_KI
1390+
// is expected to request the state, but the response may come only later.
1391+
MOKS_DISABLED,
1392+
// Used after outputting t_KE when the state was not MOKS_ENABLED.
1393+
MOKS_AFTER_T_KE,
1394+
} mokstate_T;
1395+
1396+
// Set when a response to XTQMODKEYS was received. Only works for xterm
1397+
// version 377 and later.
1398+
EXTERN mokstate_T modify_otherkeys_state INIT(= MOKS_INITIAL);
1399+
13801400
// The state for the Kitty keyboard protocol.
13811401
typedef enum {
13821402
// Initially we have no clue if the protocol is on or off.

src/map.c

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,26 @@ list_mappings(
315315
if (p_verbose > 0 && keyround == 1)
316316
{
317317
if (seenModifyOtherKeys)
318-
msg_puts(_("Seen modifyOtherKeys: true"));
318+
msg_puts(_("Seen modifyOtherKeys: true\n"));
319+
320+
if (modify_otherkeys_state != MOKS_INITIAL)
321+
{
322+
char *name = _("Unknown");
323+
switch (modify_otherkeys_state)
324+
{
325+
case MOKS_INITIAL: break;
326+
case MOKS_OFF: name = _("Off"); break;
327+
case MOKS_ENABLED: name = _("On"); break;
328+
case MOKS_DISABLED: name = _("Disabled"); break;
329+
case MOKS_AFTER_T_KE: name = _("Cleared"); break;
330+
}
331+
332+
char buf[200];
333+
vim_snprintf(buf, sizeof(buf),
334+
_("modifyOtherKeys detected: %s\n"), name);
335+
msg_puts(buf);
336+
}
337+
319338
if (kitty_protocol_state != KKPS_INITIAL)
320339
{
321340
char *name = _("Unknown");
@@ -329,7 +348,8 @@ list_mappings(
329348
}
330349

331350
char buf[200];
332-
vim_snprintf(buf, sizeof(buf), _("Kitty keyboard protocol: %s"), name);
351+
vim_snprintf(buf, sizeof(buf),
352+
_("Kitty keyboard protocol: %s\n"), name);
333353
msg_puts(buf);
334354
}
335355
}

src/term.c

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ static tcap_entry_T builtin_xterm[] = {
450450
{(int)KS_TI, "\0337\033[?47h"},
451451
{(int)KS_TE, "\033[?47l\0338"},
452452
# endif
453-
{(int)KS_CTI, "\033[>4;2m"},
453+
{(int)KS_CTI, "\033[>4;2m\033[?4m"}, // see "builtin_mok2"
454454
{(int)KS_CTE, "\033[>4;m"},
455455
{(int)KS_CIS, "\033]1;"},
456456
{(int)KS_CIE, "\007"},
@@ -591,7 +591,10 @@ static tcap_entry_T builtin_xterm[] = {
591591
* xterm.
592592
*/
593593
static tcap_entry_T builtin_mok2[] = {
594-
{(int)KS_CTI, "\033[>4;2m"},
594+
// XTQMODKEYS was added in xterm version 377: "CSI ? 4 m" which should
595+
// return "{lead} > 4 ; Pv m". Before version 377 we expect it to have no
596+
// effect.
597+
{(int)KS_CTI, "\033[>4;2m\033[?4m"},
595598
{(int)KS_CTE, "\033[>4;m"},
596599

597600
{(int)KS_NAME, NULL} // end marker
@@ -3661,9 +3664,20 @@ out_str_t_TE(void)
36613664
out_str(T_CTE);
36623665

36633666
// The seenModifyOtherKeys flag is not reset here. We do expect t_TE to
3664-
// disable modifyOtherKeys, but there is no way to detect it's enabled
3665-
// again after the following t_TI. We assume that when seenModifyOtherKeys
3666-
// was set before it will still be valid.
3667+
// disable modifyOtherKeys, but until Xterm version 377 there is no way to
3668+
// detect it's enabled again after the following t_TI. We assume that when
3669+
// seenModifyOtherKeys was set before it will still be valid.
3670+
3671+
// When the modifyOtherKeys level is detected to be 2 we expect t_TE to
3672+
// disable it. Remembering that it was detected to be enabled is useful in
3673+
// some situations.
3674+
// The following t_TI is expected to request the state and then
3675+
// modify_otherkeys_state will be set again.
3676+
if (modify_otherkeys_state == MOKS_ENABLED
3677+
|| modify_otherkeys_state == MOKS_DISABLED)
3678+
modify_otherkeys_state = MOKS_DISABLED;
3679+
else if (modify_otherkeys_state != MOKS_INITIAL)
3680+
modify_otherkeys_state = MOKS_AFTER_T_KE;
36673681

36683682
// When the kitty keyboard protocol is enabled we expect t_TE to disable
36693683
// it. Remembering that it was detected to be enabled is useful in some
@@ -5112,6 +5126,8 @@ handle_key_without_modifier(
51125126
* Handle a CSI escape sequence.
51135127
* - Xterm version string.
51145128
*
5129+
* - Response to XTQMODKEYS: "{lead} > 4 ; Pv m".
5130+
*
51155131
* - Cursor position report: {lead}{row};{col}R
51165132
* The final byte must be 'R'. It is used for checking the
51175133
* ambiguous-width character state.
@@ -5121,6 +5137,7 @@ handle_key_without_modifier(
51215137
* - key with modifiers when modifyOtherKeys is enabled:
51225138
* {lead}27;{modifier};{key}~
51235139
* {lead}{key};{modifier}u
5140+
*
51245141
* Return 0 for no match, -1 for partial match, > 0 for full match.
51255142
*/
51265143
static int
@@ -5184,12 +5201,24 @@ handle_csi(
51845201
trail = *ap;
51855202
csi_len = (int)(ap - tp) + 1;
51865203

5204+
// Response to XTQMODKEYS: "CSI > 4 ; Pv m" where Pv indicates the
5205+
// modifyOtherKeys level. Drop similar responses.
5206+
if (first == '>' && (argc == 1 || argc == 2) && trail == 'm')
5207+
{
5208+
if (arg[0] == 4 && argc == 2)
5209+
modify_otherkeys_state = arg[1] == 2 ? MOKS_ENABLED : MOKS_OFF;
5210+
5211+
key_name[0] = (int)KS_EXTRA;
5212+
key_name[1] = (int)KE_IGNORE;
5213+
*slen = csi_len;
5214+
}
5215+
51875216
// Cursor position report: Eat it when there are 2 arguments
51885217
// and it ends in 'R'. Also when u7_status is not "sent", it
51895218
// may be from a previous Vim that just exited. But not for
51905219
// <S-F3>, it sends something similar, check for row and column
51915220
// to make sense.
5192-
if (first == -1 && argc == 2 && trail == 'R')
5221+
else if (first == -1 && argc == 2 && trail == 'R')
51935222
{
51945223
handle_u7_response(arg, tp, csi_len);
51955224

@@ -5822,6 +5851,8 @@ check_termcode(
58225851
* Also eat other possible responses to t_RV, rxvt returns
58235852
* "{lead}?1;2c".
58245853
*
5854+
* - Response to XTQMODKEYS: "{lead} > 4 ; Pv m".
5855+
*
58255856
* - Cursor position report: {lead}{row};{col}R
58265857
* The final byte must be 'R'. It is used for checking the
58275858
* ambiguous-width character state.

src/testdir/keycode_check.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"31kitty":{"Space":"20","version":"1b5b3e313b343030303b323163","C-Tab":"","A-Esc":"1b5b32373b313175","C-Space":"1b5b33323b3575","status":"1b5b3f3175","S-C-I":"1b5b3130353b3675","C-I":"1b5b3130353b3575","S-Tab":"1b5b393b3275","Tab":"09","resource":"","A-Tab":"1b5b393b313175","S-Space":"20","C-Esc":"1b5b32373b3575","protocol":"kitty","A-Space":"1b5b33323b313175","S-Esc":"1b5b32373b3275","Esc":"1b5b323775"},"32libvterm":{"Space":"20","version":"1b5b3e303b3130303b3063","C-Tab":"1b5b393b3575","A-Esc":"1b5b32373b3375","C-Space":"1b5b33323b3575","status":"1b5b3f3175","S-C-I":"1b5b3130353b3675","C-I":"1b5b3130353b3575","S-Tab":"1b5b393b3275","Tab":"09","resource":"","A-Tab":"1b5b393b3375","S-Space":"1b5b33323b3275","C-Esc":"1b5b32373b3575","protocol":"kitty","A-Space":"1b5b33323b3375","S-Esc":"1b5b323775","Esc":"1b5b323775"},"22libvterm":{"Space":"20","version":"1b5b3e303b3130303b3063","C-Tab":"1b5b32373b353b397e","A-Esc":"1b5b32373b333b32377e","C-Space":"1b5b32373b353b33327e","status":"","S-C-I":"1b5b32373b363b37337e","C-I":"1b5b32373b353b3130357e","S-Tab":"1b5b5a","Tab":"09","resource":"","A-Tab":"1b5b32373b333b397e","S-Space":"1b5b32373b323b33327e","C-Esc":"1b5b32373b353b32377e","protocol":"mok2","A-Space":"1b5b32373b333b33327e","S-Esc":"1b","Esc":"1b"},"13kitty":{"Space":"20","version":"1b5b3e313b343030303b323163","C-Tab":"","A-Esc":"1b1b","status":"","S-C-I":"1b5b3130353b3675","C-I":"09","S-Tab":"1b5b5a","Tab":"09","resource":"","A-Tab":"1b09","S-Space":"20","C-Esc":"1b","protocol":"none","A-Space":"1b5b33323b313175","S-Esc":"1b","Esc":"1b"},"21xterm":{"Space":"20","version":"1b5b3e34313b3335363b3063","C-Tab":"1b5b32373b353b397e","A-Esc":"1b5b32373b333b32377e","C-Space":"1b5b32373b353b33327e","status":"","S-C-I":"1b5b32373b363b37337e","C-I":"1b5b32373b353b3130357e","S-Tab":"1b5b5a","Tab":"09","resource":"=30","A-Tab":"1b5b32373b333b397e","S-Space":"1b5b32373b323b33327e","C-Esc":"1b5b32373b353b32377e","protocol":"mok2","A-Space":"1b5b32373b333b33327e","S-Esc":"1b","Esc":"1b"},"12libvterm":{"Space":"20","version":"1b5b3e303b3130303b3063","C-Tab":"1b5b393b3575","A-Esc":"9b00","status":"","S-C-I":"1b5b5a","C-I":"09","S-Tab":"1b5b5a","Tab":"09","S-Space":"1b5b33323b3275","A-Tab":"8900","resource":"","C-Esc":"1b5b32373b3575","protocol":"none","A-Space":"a000","S-Esc":"1b","Esc":"1b"},"11xterm":{"Space":"20","version":"1b5b3e34313b3335363b3063","C-Tab":"09","A-Esc":"9b00","status":"","S-C-I":"09","C-I":"09","S-Tab":"1b5b5a","Tab":"09","S-Space":"20","A-Tab":"8900","C-Esc":"1b","protocol":"none","A-Space":"a000","S-Esc":"1b","Esc":"1b"}}
1+
{"31kitty":{"Space":"20","version":"1b5b3e313b343030303b323163","C-Tab":"","A-Esc":"1b5b32373b313175","C-Space":"1b5b33323b3575","status":"1b5b3f3175","S-C-I":"1b5b3130353b3675","C-I":"1b5b3130353b3575","S-Tab":"1b5b393b3275","Tab":"09","resource":"","A-Tab":"1b5b393b313175","S-Space":"20","C-Esc":"1b5b32373b3575","protocol":"kitty","A-Space":"1b5b33323b313175","S-Esc":"1b5b32373b3275","Esc":"1b5b323775"},"32libvterm":{"Space":"20","version":"1b5b3e303b3130303b3063","C-Tab":"1b5b393b3575","A-Esc":"1b5b32373b3375","C-Space":"1b5b33323b3575","status":"1b5b3f3175","S-C-I":"1b5b3130353b3675","C-I":"1b5b3130353b3575","S-Tab":"1b5b393b3275","Tab":"09","resource":"","A-Tab":"1b5b393b3375","S-Space":"1b5b33323b3275","C-Esc":"1b5b32373b3575","protocol":"kitty","A-Space":"1b5b33323b3375","S-Esc":"1b5b323775","Esc":"1b5b323775"},"22libvterm":{"Space":"20","version":"1b5b3e303b3130303b3063","C-Tab":"1b5b32373b353b397e","A-Esc":"1b5b32373b333b32377e","C-Space":"1b5b32373b353b33327e","status":"","S-C-I":"1b5b32373b363b37337e","C-I":"1b5b32373b353b3130357e","S-Tab":"1b5b5a","Tab":"09","resource":"","A-Tab":"1b5b32373b333b397e","S-Space":"1b5b32373b323b33327e","C-Esc":"1b5b32373b353b32377e","protocol":"mok2","A-Space":"1b5b32373b333b33327e","S-Esc":"1b5b32373b323b32377e","Esc":"1b"},"13kitty":{"Space":"20","version":"1b5b3e313b343030303b323163","C-Tab":"","A-Esc":"1b1b","status":"","S-C-I":"1b5b3130353b3675","C-I":"09","S-Tab":"1b5b5a","Tab":"09","resource":"","A-Tab":"1b09","S-Space":"20","C-Esc":"1b","protocol":"none","A-Space":"1b5b33323b313175","S-Esc":"1b","Esc":"1b"},"21xterm":{"Space":"20","modkeys":"2","version":"1b5b3e34313b3337373b3063","C-Tab":"1b5b32373b353b397e","A-Esc":"1b5b32373b333b32377e","C-Space":"1b5b32373b353b33327e","status":"","S-C-I":"1b5b32373b363b37337e","C-I":"1b5b32373b353b3130357e","S-Tab":"1b5b5a","Tab":"09","resource":"=30","A-Tab":"1b5b32373b333b397e","S-Space":"1b5b32373b323b33327e","C-Esc":"1b5b32373b353b32377e","protocol":"mok2","A-Space":"1b5b32373b333b33327e","S-Esc":"1b5b32373b323b32377e","Esc":"1b"},"12libvterm":{"Space":"20","version":"1b5b3e303b3130303b3063","C-Tab":"1b5b393b3575","A-Esc":"9b00","status":"","S-C-I":"1b5b5a","C-I":"09","S-Tab":"1b5b5a","Tab":"09","S-Space":"1b5b33323b3275","A-Tab":"8900","resource":"","C-Esc":"1b5b32373b3575","protocol":"none","A-Space":"a000","S-Esc":"1b","Esc":"1b"},"11xterm":{"Space":"20","version":"1b5b3e34313b3337373b3063","C-Tab":"09","A-Esc":"9b00","status":"","S-C-I":"09","C-I":"09","S-Tab":"1b5b5a","Tab":"09","resource":"","A-Tab":"8900","S-Space":"20","C-Esc":"1b","protocol":"none","A-Space":"a000","S-Esc":"1b","Esc":"1b"}}

src/testdir/keycode_check.vim

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def ActionList()
134134
endif
135135
sort(terms)
136136

137-
var items = ['protocol', 'version', 'status', 'resource']
137+
var items = ['protocol', 'version', 'status', 'modkeys']
138138
+ key_entries->copy()->map((_, v) => v[1])
139139

140140
# For each terminal compute the needed width, add two.
@@ -198,9 +198,8 @@ def DoTerm(name: string)
198198
if proto == 1
199199
&t_TI = ""
200200
elseif proto == 2
201-
# Enable modifyOtherKeys level 2
202-
# Request the resource value: DCS + Q modifyOtherKeys ST
203-
&t_TI = "\<Esc>[>4;2m" .. "\<Esc>P+Q6d6f646966794f746865724b657973\<Esc>\\"
201+
# Enable modifyOtherKeys level 2. Request the XTQMODKEYS value.
202+
&t_TI = "\<Esc>[>4;2m" .. "\<Esc>[?4m"
204203
proto_name = 'mok2'
205204
elseif proto == 3
206205
# Enable Kitty keyboard protocol and request the status
@@ -218,10 +217,10 @@ def DoTerm(name: string)
218217
# Pattern that matches the line with the version response.
219218
const version_pattern = "\<Esc>\\[>\\d\\+;\\d\\+;\\d*c"
220219

221-
# Pattern that matches the resource value response:
222-
# DCS 1 + R Pt ST valid
223-
# DCS 0 + R Pt ST invalid
224-
const resource_pattern = "\<Esc>P[01]+R.*\<Esc>\\\\"
220+
# Pattern that matches the XTQMODKEYS response:
221+
# CSI > 4;Pv m
222+
# where Pv indicates the modifyOtherKeys level
223+
const modkeys_pattern = "\<Esc>\\[>4;\\dm"
225224

226225
# Pattern that matches the line with the status. Currently what terminals
227226
# return for the Kitty keyboard protocol.
@@ -264,7 +263,7 @@ def DoTerm(name: string)
264263
keycodes[name]['protocol'] = proto_name
265264
keycodes[name]['version'] = ''
266265
keycodes[name]['status'] = ''
267-
keycodes[name]['resource'] = ''
266+
keycodes[name]['modkeys'] = ''
268267

269268
# Check the log file for a status and the version response
270269
ch_logfile('', '')
@@ -275,16 +274,16 @@ def DoTerm(name: string)
275274
if line =~ 'raw key input'
276275
var code = substitute(line, '.*raw key input: "\([^"]*\).*', '\1', '')
277276

278-
# Check for resource value response
279-
if code =~ resource_pattern
280-
var resource = substitute(code, '.*\(' .. resource_pattern .. '\).*', '\1', '')
281-
# use the value as the resource, "=30" means zero
282-
resource = substitute(resource, '.*\(=\p\+\).*', '\1', '')
277+
# Check for the XTQMODKEYS response.
278+
if code =~ modkeys_pattern
279+
var modkeys = substitute(code, '.*\(' .. modkeys_pattern .. '\).*', '\1', '')
280+
# Get the level out of the response
281+
modkeys = substitute(modkeys, '.*4;\(\d\)m', '\1', '')
283282

284-
if keycodes[name]['resource'] != ''
285-
echomsg 'Another resource found after ' .. keycodes[name]['resource']
283+
if keycodes[name]['modkeys'] != ''
284+
echomsg 'Another modkeys found after ' .. keycodes[name]['modkeys']
286285
endif
287-
keycodes[name]['resource'] = resource
286+
keycodes[name]['modkeys'] = modkeys
288287
endif
289288

290289
# Check for kitty keyboard protocol status

src/testdir/setup.vim

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
" Only load this once.
44
if 1
5+
6+
" When using xterm version 377 the response to the modifyOtherKeys status
7+
" interferes with some tests. Remove the request from the t_TI termcap
8+
" entry.
9+
let &t_TI = substitute(&t_TI, "\<Esc>\\[?4m", '', '')
10+
511
if exists('s:did_load')
612
finish
713
endif

src/testdir/shared.vim

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ endif
77

88
source view_util.vim
99

10+
" When 'term' is changed some status requests may be sent. The responses may
11+
" interfere with what is being tested. A short sleep is used to process any of
12+
" those responses first.
13+
func WaitForResponses()
14+
sleep 50m
15+
endfunc
16+
1017
" Get the name of the Python executable.
1118
" Also keeps it in s:python.
1219
func PythonProg()

src/testdir/test_mapping.vim

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -478,10 +478,24 @@ func Test_list_mappings()
478478
\ execute('nmap ,n')->trim()->split("\n"))
479479

480480
" verbose map
481-
" first line might be "seen modifyOtherKeys"
482481
let lines = execute('verbose map ,n')->trim()->split("\n")
482+
483+
" Remove "Seen modifyOtherKeys" and other optional info.
484+
if lines[0] =~ 'Seen modifyOtherKeys'
485+
call remove(lines, 0)
486+
endif
487+
if lines[0] =~ 'modifyOtherKeys detected:'
488+
call remove(lines, 0)
489+
endif
490+
if lines[0] =~ 'Kitty keyboard protocol:'
491+
call remove(lines, 0)
492+
endif
493+
if lines[0] == ''
494+
call remove(lines, 0)
495+
endif
496+
483497
let index = indexof(lines, 'v:val =~ "Last set"')
484-
call assert_inrange(1, 2, index)
498+
call assert_equal(1, index)
485499
call assert_match("\tLast set from .*/test_mapping.vim line \\d\\+$",
486500
\ lines[index])
487501

src/testdir/test_modeless.vim

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ source check.vim
55
CheckNotGui
66
CheckUnix
77

8+
source shared.vim
89
source mouse.vim
910

1011
" Test for modeless characterwise selection (single click)
@@ -15,10 +16,15 @@ func Test_modeless_characterwise_selection()
1516
let save_ttymouse = &ttymouse
1617
call test_override('no_query_mouse', 1)
1718
set mouse=a term=xterm mousetime=200
19+
call WaitForResponses()
20+
1821
new
1922
call setline(1, ['one two three', 'foo bar baz'])
2023
redraw!
2124

25+
" Wait a bit for any terminal responses to get processed.
26+
sleep 50m
27+
2228
for ttymouse_val in g:Ttymouse_values + g:Ttymouse_dec
2329
let msg = 'ttymouse=' .. ttymouse_val
2430
exe 'set ttymouse=' .. ttymouse_val
@@ -250,6 +256,8 @@ func Test_modeless_word_selection()
250256
let save_ttymouse = &ttymouse
251257
call test_override('no_query_mouse', 1)
252258
set mouse=a term=xterm mousetime=200
259+
call WaitForResponses()
260+
253261
new
254262
call setline(1, ['one two three', 'foo bar baz'])
255263
redraw!
@@ -330,6 +338,8 @@ func Test_modeless_line_selection()
330338
let save_ttymouse = &ttymouse
331339
call test_override('no_query_mouse', 1)
332340
set mouse=a term=xterm mousetime=200
341+
call WaitForResponses()
342+
333343
new
334344
call setline(1, ['one two three', 'foo bar baz'])
335345
redraw!

0 commit comments

Comments
 (0)