* 0x23 = any button release
* 0x60 = button 4 down (scroll wheel down)
* 0x61 = button 5 down (scroll wheel up)
+ * 0x62 = button 6 down (scroll wheel left)
+ * 0x63 = button 7 down (scroll wheel right)
+ * 0xa0 = button 8 down (backward button)
+ * 0xa1 = button 9 down (forward button)
* add 0x04 for SHIFT
* add 0x08 for ALT
* add 0x10 for CTRL
* Linux console with GPM and the MS-DOS or Win32 console
* (multi-clicks use >= 0x60).
*/
- if (mouse_code >= MOUSEWHEEL_LOW
+ if (mouse_code >= MOUSEWHEEL_LOW && mouse_code < MOUSESIDEBUTTONS_LOW
# ifdef FEAT_GUI
&& !gui.in_use
# endif
held_button = MOUSE_RELEASE;
}
else
+ {
+#if defined(UNIX)
+ if (use_xterm_mouse() && orig_mouse_code >= MOUSESIDEBUTTONS_LOW)
+ current_button = (current_button) ? MOUSE_X2 : MOUSE_X1;
+#endif
key_name[1] = get_pseudo_mouse_code(current_button, is_click, is_drag);
+ }
// Make sure the mouse position is valid. Some terminals may return weird
%bw!
endfunc
+" Test buttons 8 and 9 for xterm-like terminal mouse support
+func Test_term_mouse_side_buttons()
+ 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 WaitForResponses()
+
+ for ttymouse_val in g:Ttymouse_values
+ let msg = 'ttymouse=' .. ttymouse_val
+ exe 'set ttymouse=' .. ttymouse_val
+
+ let mouse_codes = [
+ \ ["<X1Mouse>", TerminalEscapeCode(128, 1, 1, 'M')],
+ \ ["<X1Drag>", TerminalEscapeCode(128+32, 1, 1, 'M')],
+ \ ["<X2Mouse>", TerminalEscapeCode(129, 1, 1, 'M')],
+ \ ["<X2Drag>", TerminalEscapeCode(129+32, 1, 1, 'M')],
+ \ ["<S-X1Mouse>", TerminalEscapeCode(128+4, 1, 1, 'M')],
+ \ ["<S-X2Mouse>", TerminalEscapeCode(129+4, 1, 1, 'M')],
+ \ ["<M-X1Mouse>", TerminalEscapeCode(128+8, 1, 1, 'M')],
+ \ ["<M-X2Mouse>", TerminalEscapeCode(129+8, 1, 1, 'M')],
+ \ ["<C-X1Mouse>", TerminalEscapeCode(128+16, 1, 1, 'M')],
+ \ ["<C-X2Mouse>", TerminalEscapeCode(129+16, 1, 1, 'M')],
+ \ ]
+
+ for [outstr, code] in mouse_codes
+ exe "normal ggC\<C-K>" . code
+ call assert_equal(outstr, getline(1), msg)
+ endfor
+ endfor
+
+ " ttymouse_val 'sgr'
+ let msg = 'ttymouse=sgr'
+ exe 'set ttymouse=sgr'
+
+ let mouse_codes = [
+ \ ["<X1Mouse>", TerminalEscapeCode(128, 1, 1, 'M')],
+ \ ["<X1Release>", TerminalEscapeCode(128, 1, 1, 'm')],
+ \ ["<X2Mouse>", TerminalEscapeCode(129, 1, 1, 'M')],
+ \ ["<X2Release>", TerminalEscapeCode(129, 1, 1, 'm')],
+ \ ]
+
+ for [outstr, code] in mouse_codes
+ exe "normal ggC\<C-K>" . code
+ call assert_equal(outstr, getline(1), msg)
+ endfor
+
+ let &mouse = save_mouse
+ let &term = save_term
+ let &ttymouse = save_ttymouse
+ call test_override('no_query_mouse', 0)
+ bwipe!
+endfunc
+
" This only checks if the sequence is recognized.
" This must be after other tests, because it has side effects to xterm
" properties.