To: vim_dev@googlegroups.com Subject: Patch 8.1.1248 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.1.1248 Problem: No test for dec mouse. Solution: Add some tests for dec mouse. Add "no_query_mouse". Files: src/evalfunc.c, src/globals.h, src/os_unix.c, src/testdir/test_termcodes.vim, runtime/doc/eval.txt *** ../vim-8.1.1247/src/evalfunc.c 2019-04-28 19:46:17.022060143 +0200 --- src/evalfunc.c 2019-05-02 22:23:44.186970564 +0200 *************** *** 14302,14313 **** --- 14302,14316 ---- } else if (STRCMP(name, (char_u *)"nfa_fail") == 0) nfa_fail_for_testing = val; + else if (STRCMP(name, (char_u *)"no_query_mouse") == 0) + no_query_mouse_for_testing = val; else if (STRCMP(name, (char_u *)"ALL") == 0) { disable_char_avail_for_testing = FALSE; disable_redraw_for_testing = FALSE; ignore_redraw_flag_for_testing = FALSE; nfa_fail_for_testing = FALSE; + no_query_mouse_for_testing = FALSE; if (save_starting >= 0) { starting = save_starting; *** ../vim-8.1.1247/src/globals.h 2019-04-28 22:25:03.240480046 +0200 --- src/globals.h 2019-05-02 22:24:08.050849053 +0200 *************** *** 1613,1623 **** /* set by alloc_fail(), number of times alloc() returns NULL */ EXTERN int alloc_fail_repeat INIT(= 0); ! /* flags set by test_override() */ EXTERN int disable_char_avail_for_testing INIT(= FALSE); EXTERN int disable_redraw_for_testing INIT(= FALSE); EXTERN int ignore_redraw_flag_for_testing INIT(= FALSE); EXTERN int nfa_fail_for_testing INIT(= FALSE); EXTERN int in_free_unref_items INIT(= FALSE); #endif --- 1613,1624 ---- /* set by alloc_fail(), number of times alloc() returns NULL */ EXTERN int alloc_fail_repeat INIT(= 0); ! // flags set by test_override() EXTERN int disable_char_avail_for_testing INIT(= FALSE); EXTERN int disable_redraw_for_testing INIT(= FALSE); EXTERN int ignore_redraw_flag_for_testing INIT(= FALSE); EXTERN int nfa_fail_for_testing INIT(= FALSE); + EXTERN int no_query_mouse_for_testing INIT(= FALSE); EXTERN int in_free_unref_items INIT(= FALSE); #endif *** ../vim-8.1.1247/src/os_unix.c 2019-04-28 22:50:36.157248454 +0200 --- src/os_unix.c 2019-05-02 22:24:41.454678795 +0200 *************** *** 5940,5946 **** if (WantQueryMouse) { WantQueryMouse = FALSE; ! mch_write((char_u *)IF_EB("\033[1'|", ESC_STR "[1'|"), 5); } #endif --- 5940,5947 ---- if (WantQueryMouse) { WantQueryMouse = FALSE; ! if (!no_query_mouse_for_testing) ! mch_write((char_u *)IF_EB("\033[1'|", ESC_STR "[1'|"), 5); } #endif *** ../vim-8.1.1247/src/testdir/test_termcodes.vim 2019-05-02 21:12:15.800625684 +0200 --- src/testdir/test_termcodes.vim 2019-05-02 22:56:32.436832987 +0200 *************** *** 8,16 **** source shared.vim " xterm2 and sgr always work, urxvt is optional. ! let s:test_ttymouse = ['xterm2', 'sgr'] if has('mouse_urxvt') ! call add(s:test_ttymouse, 'urxvt') endif " Helper function to emit a terminal escape code. --- 8,23 ---- source shared.vim " xterm2 and sgr always work, urxvt is optional. ! let s:ttymouse_values = ['xterm2', 'sgr'] if has('mouse_urxvt') ! call add(s:ttymouse_values, 'urxvt') ! endif ! ! " dec doesn't support all the functionality ! if has('mouse_dec') ! let s:ttymouse_dec = ['dec'] ! else ! let s:ttymouse_dec = [] endif " Helper function to emit a terminal escape code. *************** *** 32,43 **** endif endfunc func MouseLeftClick(row, col) ! call TerminalEscapeCode(0, a:row, a:col, 'M') endfunc func MouseMiddleClick(row, col) ! call TerminalEscapeCode(1, a:row, a:col, 'M') endfunc func MouseCtrlLeftClick(row, col) --- 39,62 ---- endif endfunc + func DecEscapeCode(code, down, row, col) + call feedkeys(printf("\[%d;%d;%d;%d&w", a:code, a:down, a:row, a:col), 'Lx!') + endfunc + func MouseLeftClick(row, col) ! if &ttymouse ==# 'dec' ! call DecEscapeCode(2, 4, a:row, a:col) ! else ! call TerminalEscapeCode(0, a:row, a:col, 'M') ! endif endfunc func MouseMiddleClick(row, col) ! if &ttymouse ==# 'dec' ! call DecEscapeCode(4, 2, a:row, a:col) ! else ! call TerminalEscapeCode(1, a:row, a:col, 'M') ! endif endfunc func MouseCtrlLeftClick(row, col) *************** *** 51,61 **** endfunc func MouseLeftRelease(row, col) ! call TerminalEscapeCode(3, a:row, a:col, 'm') endfunc func MouseMiddleRelease(row, col) ! call TerminalEscapeCode(3, a:row, a:col, 'm') endfunc func MouseRightRelease(row, col) --- 70,88 ---- endfunc func MouseLeftRelease(row, col) ! if &ttymouse ==# 'dec' ! call DecEscapeCode(3, 0, a:row, a:col) ! else ! call TerminalEscapeCode(3, a:row, a:col, 'm') ! endif endfunc func MouseMiddleRelease(row, col) ! if &ttymouse ==# 'dec' ! call DecEscapeCode(5, 0, a:row, a:col) ! else ! call TerminalEscapeCode(3, a:row, a:col, 'm') ! endif endfunc func MouseRightRelease(row, col) *************** *** 63,69 **** endfunc func MouseLeftDrag(row, col) ! call TerminalEscapeCode(0x20, a:row, a:col, 'M') endfunc func MouseWheelUp(row, col) --- 90,100 ---- endfunc func MouseLeftDrag(row, col) ! if &ttymouse ==# 'dec' ! call DecEscapeCode(1, 4, a:row, a:col) ! else ! call TerminalEscapeCode(0x20, a:row, a:col, 'M') ! endif endfunc func MouseWheelUp(row, col) *************** *** 74,88 **** call TerminalEscapeCode(0x41, a:row, a:col, 'M') endfunc ! func Test_xterm_mouse_left_click() new let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse set mouse=a term=xterm call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val go --- 105,120 ---- call TerminalEscapeCode(0x41, a:row, a:col, 'M') endfunc ! func Test_term_mouse_left_click() new let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) set mouse=a term=xterm call setline(1, ['line 1', 'line 2', 'line 3 is a bit longer']) ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val go *************** *** 97,102 **** --- 129,135 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) bwipe! endfunc *************** *** 107,113 **** let save_ttymouse = &ttymouse set mouse=a term=xterm ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val help --- 140,146 ---- let save_ttymouse = &ttymouse set mouse=a term=xterm ! for ttymouse_val in s:ttymouse_values let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val help *************** *** 121,127 **** call assert_equal('*usr_02.txt*', expand('')) call MouseCtrlRightClick(row, col) ! call MouseLeftRelease(row, col) call assert_match('help.txt$', bufname('%'), msg) call assert_equal('|usr_02.txt|', expand('')) --- 154,160 ---- call assert_equal('*usr_02.txt*', expand('')) call MouseCtrlRightClick(row, col) ! call MouseRightRelease(row, col) call assert_match('help.txt$', bufname('%'), msg) call assert_equal('|usr_02.txt|', expand('')) *************** *** 133,139 **** let &ttymouse = save_ttymouse endfunc ! func Test_xterm_mouse_middle_click() if !WorkingClipboard() throw 'Skipped: No working clipboard' endif --- 166,172 ---- let &ttymouse = save_ttymouse endfunc ! func Test_term_mouse_middle_click() if !WorkingClipboard() throw 'Skipped: No working clipboard' endif *************** *** 142,152 **** let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse let save_quotestar = @* let @* = 'abc' set mouse=a term=xterm ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val call setline(1, ['123456789', '123456789']) --- 175,186 ---- let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) let save_quotestar = @* let @* = 'abc' set mouse=a term=xterm ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val call setline(1, ['123456789', '123456789']) *************** *** 175,185 **** let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse let @* = save_quotestar bwipe! endfunc ! func Test_xterm_mouse_wheel() new let save_mouse = &mouse let save_term = &term --- 209,222 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) let @* = save_quotestar bwipe! endfunc ! " TODO: for unclear reasons this test fails if it comes after ! " Test_xterm_mouse_ctrl_click() ! func Test_1xterm_mouse_wheel() new let save_mouse = &mouse let save_term = &term *************** *** 187,193 **** set mouse=a term=xterm call setline(1, range(1, 100)) ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val go --- 224,230 ---- set mouse=a term=xterm call setline(1, range(1, 100)) ! for ttymouse_val in s:ttymouse_values let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val go *************** *** 217,229 **** bwipe! endfunc ! func Test_xterm_mouse_drag_window_separator() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse set mouse=a term=xterm ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val --- 254,267 ---- bwipe! endfunc ! func Test_term_mouse_drag_window_separator() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) set mouse=a term=xterm ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val *************** *** 271,286 **** let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse endfunc ! func Test_xterm_mouse_drag_statusline() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse let save_laststatus = &laststatus set mouse=a term=xterm laststatus=2 ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val --- 309,326 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) endfunc ! func Test_term_mouse_drag_statusline() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) let save_laststatus = &laststatus set mouse=a term=xterm laststatus=2 ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val *************** *** 311,327 **** let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse let &laststatus = save_laststatus endfunc ! func Test_xterm_mouse_click_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse set mouse=a term=xterm let row = 1 ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val e Xfoo --- 351,369 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) let &laststatus = save_laststatus endfunc ! func Test_term_mouse_click_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) set mouse=a term=xterm let row = 1 ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val e Xfoo *************** *** 359,375 **** let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse endfunc ! func Test_xterm_mouse_click_X_to_close_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse set mouse=a term=xterm let row = 1 let col = &columns ! for ttymouse_val in s:test_ttymouse if ttymouse_val ==# 'xterm2' && col > 223 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. continue --- 401,419 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) endfunc ! func Test_term_mouse_click_X_to_close_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) set mouse=a term=xterm let row = 1 let col = &columns ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec if ttymouse_val ==# 'xterm2' && col > 223 " When 'ttymouse' is 'xterm2', row/col bigger than 223 are not supported. continue *************** *** 405,421 **** let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse endfunc ! func Test_xterm_mouse_drag_to_move_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop set mouse=a term=xterm mousetime=1 let row = 1 ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val e Xtab1 --- 449,467 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) endfunc ! func Test_term_mouse_drag_to_move_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) " Set 'mousetime' to 1 to avoid recognizing a double-click in the loop set mouse=a term=xterm mousetime=1 let row = 1 ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val e Xtab1 *************** *** 451,463 **** let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse set mousetime& endfunc ! func Test_xterm_mouse_double_click_to_create_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse " Set 'mousetime' to a small value, so that double-click works but we don't " have to wait long to avoid a triple-click. set mouse=a term=xterm mousetime=100 --- 497,511 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) set mousetime& endfunc ! func Test_term_mouse_double_click_to_create_tab() let save_mouse = &mouse let save_term = &term let save_ttymouse = &ttymouse + call test_override('no_query_mouse', 1) " Set 'mousetime' to a small value, so that double-click works but we don't " have to wait long to avoid a triple-click. set mouse=a term=xterm mousetime=100 *************** *** 465,471 **** let col = 10 let round = 0 ! for ttymouse_val in s:test_ttymouse let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val e Xtab1 --- 513,519 ---- let col = 10 let round = 0 ! for ttymouse_val in s:ttymouse_values + s:ttymouse_dec let msg = 'ttymouse=' .. ttymouse_val exe 'set ttymouse=' .. ttymouse_val e Xtab1 *************** *** 507,512 **** --- 555,561 ---- let &mouse = save_mouse let &term = save_term let &ttymouse = save_ttymouse + call test_override('no_query_mouse', 0) set mousetime& endfunc *** ../vim-8.1.1247/runtime/doc/eval.txt 2019-04-27 20:36:52.526303597 +0200 --- runtime/doc/eval.txt 2019-05-02 22:22:22.267386667 +0200 *************** *** 9744,9749 **** --- 9805,9812 ---- starting reset the "starting" variable, see below nfa_fail makes the NFA regexp engine fail to force a fallback to the old engine + no_query_mouse do not query the mouse position for "dec" + terminals ALL clear all overrides ({val} is not used) "starting" is to be used when a test should behave like *** ../vim-8.1.1247/src/version.c 2019-05-02 21:12:15.800625684 +0200 --- src/version.c 2019-05-02 22:57:23.900566422 +0200 *************** *** 769,770 **** --- 769,772 ---- { /* Add new patch number below this line */ + /**/ + 1248, /**/ -- TALL KNIGHT: When you have found the shrubbery, then you must cut down the mightiest tree in the forest ... with a herring. "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///