]> granicus.if.org Git - vim/commitdiff
patch 8.1.1136: decoding of mouse click escape sequence is not tested v8.1.1136
authorBram Moolenaar <Bram@vim.org>
Sun, 7 Apr 2019 12:21:47 +0000 (14:21 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 7 Apr 2019 12:21:47 +0000 (14:21 +0200)
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.

src/evalfunc.c
src/ex_docmd.c
src/testdir/Make_all.mak
src/testdir/test_termcodes.vim [new file with mode: 0644]
src/version.c

index b79284c07bdbc28da391f7d34c9bc4181925b6d6..7f8330f999e25450109f24ab2f7396e0200d0d2f 100644 (file)
@@ -3792,7 +3792,7 @@ f_feedkeys(typval_T *argvars, typval_T *rettv UNUSED)
 
                if (!dangerous)
                    ++ex_normal_busy;
-               exec_normal(TRUE, FALSE, TRUE);
+               exec_normal(TRUE, lowlevel, TRUE);
                if (!dangerous)
                    --ex_normal_busy;
 
index 88d03eefd7a3e768c6316ca5e73b6cca645ef1fe..e37fdfbeb560e329d4954c3f9e0b3ad2f8a7b4b7 100644 (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)
 {
     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);
     finish_op = FALSE;
     while ((!stuff_empty()
                || ((was_typed || !typebuf_typed()) && typebuf.tb_len > 0)
-               || (use_vpeekc && vpeekc() != NUL))
+               || (use_vpeekc && (c = vpeekc()) != NUL && c != Ctrl_C))
            && !got_int)
     {
        update_topline_cursor();
index 81d0dc7f0a8f459e4250f3ea458cfc288bacc407..97cd166f632f9443b7910f7cd2bd18084920ec66 100644 (file)
@@ -250,6 +250,7 @@ NEW_TESTS = \
        test_taglist \
        test_tcl \
        test_termencoding \
+       test_termcodes \
        test_terminal \
        test_terminal_fail \
        test_textformat \
@@ -402,6 +403,7 @@ NEW_TESTS_RES = \
        test_tab.res \
        test_tcl.res \
        test_termencoding.res \
+       test_termcodes.res \
        test_terminal.res \
        test_terminal_fail.res \
        test_textformat.res \
diff --git a/src/testdir/test_termcodes.vim b/src/testdir/test_termcodes.vim
new file mode 100644 (file)
index 0000000..bd2729d
--- /dev/null
@@ -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
+
index 0107b82318b16b550ecf66a0437754be46fb0d73..6b428b48a266070fd90d1f9e2a8d499753f3aacd 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1136,
 /**/
     1135,
 /**/