0
0
mirror of https://github.com/vim/vim.git synced 2025-10-07 05:54:16 -04:00

patch 8.1.1136: decoding of mouse click escape sequence is not tested

Problem:    Decoding of mouse click escape sequence is not tested.
Solution:   Add a test for xterm and SGR using low-level input.  Make
            low-level input execution with feedkeys() work.
This commit is contained in:
Bram Moolenaar
2019-04-07 14:21:47 +02:00
parent d85c396d51
commit 905dd905de
5 changed files with 56 additions and 2 deletions

View File

@@ -3792,7 +3792,7 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED)
if (!dangerous) if (!dangerous)
++ex_normal_busy; ++ex_normal_busy;
exec_normal(TRUE, FALSE, TRUE); exec_normal(TRUE, lowlevel, TRUE);
if (!dangerous) if (!dangerous)
--ex_normal_busy; --ex_normal_busy;

View File

@@ -10487,12 +10487,15 @@ exec_normal_cmd(char_u *cmd, int remap, int silent)
exec_normal(int was_typed, int use_vpeekc, int may_use_terminal_loop UNUSED) exec_normal(int was_typed, int use_vpeekc, int may_use_terminal_loop UNUSED)
{ {
oparg_T oa; oparg_T oa;
int c;
// When calling vpeekc() from feedkeys() it will return Ctrl_C when there
// is nothing to get, so also check for Ctrl_C.
clear_oparg(&oa); clear_oparg(&oa);
finish_op = FALSE; finish_op = FALSE;
while ((!stuff_empty() while ((!stuff_empty()
|| ((was_typed || !typebuf_typed()) && typebuf.tb_len > 0) || ((was_typed || !typebuf_typed()) && typebuf.tb_len > 0)
|| (use_vpeekc && vpeekc() != NUL)) || (use_vpeekc && (c = vpeekc()) != NUL && c != Ctrl_C))
&& !got_int) && !got_int)
{ {
update_topline_cursor(); update_topline_cursor();

View File

@@ -250,6 +250,7 @@ NEW_TESTS = \
test_taglist \ test_taglist \
test_tcl \ test_tcl \
test_termencoding \ test_termencoding \
test_termcodes \
test_terminal \ test_terminal \
test_terminal_fail \ test_terminal_fail \
test_textformat \ test_textformat \
@@ -402,6 +403,7 @@ NEW_TESTS_RES = \
test_tab.res \ test_tab.res \
test_tcl.res \ test_tcl.res \
test_termencoding.res \ test_termencoding.res \
test_termcodes.res \
test_terminal.res \ test_terminal.res \
test_terminal_fail.res \ test_terminal_fail.res \
test_textformat.res \ test_textformat.res \

View File

@@ -0,0 +1,47 @@
" Tests for decoding escape sequences sent by the terminal.
" This only works for Unix in a terminal
if has('gui_running') || !has('unix')
finish
endif
func Test_xterm_mouse_click()
new
let save_mouse = &mouse
let save_term = &term
let save_ttymouse = &ttymouse
set mouse=a
set term=xterm
call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer'])
redraw
" Xterm mouse click
set ttymouse=xterm
let button = 0x20 " left down
let row = 2 + 32
let col = 6 + 32
call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
let button = 0x23 " release
call feedkeys("\<Esc>[M" .. list2str([button, col, row]), 'Lx!')
call assert_equal([0, 2, 6, 0], getpos('.'))
" SGR mouse click
set ttymouse=sgr
let button = 0 " left down
let row = 3
let col = 9
call feedkeys(printf("\<Esc>[<%d;%d;%dM", button, col, row), 'Lx!')
let button = 3 " release
call feedkeys(printf("\<Esc>[<%d;%d;%dm", button, col, row), 'Lx!')
call assert_equal([0, 3, 9, 0], getpos('.'))
let &mouse = save_mouse
let &term = save_term
let &ttymouse = save_ttymouse
bwipe!
endfunc

View File

@@ -771,6 +771,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1136,
/**/ /**/
1135, 1135,
/**/ /**/