Mercurial > vim
changeset 31194:fa26d002eb2a v9.0.0931
patch 9.0.0931: MS-Windows: mouse column limited to 223
Commit: https://github.com/vim/vim/commit/36446bbb62b466ce873c872b266a29bebbfc9890
Author: Christopher Plewright <chris@createng.com>
Date: Wed Nov 23 22:28:08 2022 +0000
patch 9.0.0931: MS-Windows: mouse column limited to 223
Problem: MS-Windows: mouse column limited to 223.
Solution: Use two bytes for each mouse coordinate. Add the mouse position
to scroll events. (Christopher Plewright, closes #11597)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 23 Nov 2022 23:30:03 +0100 |
parents | 4e0ce485ef64 |
children | 105382a2057d |
files | src/mouse.c src/os_win32.c src/term.c src/version.c |
diffstat | 4 files changed, 27 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mouse.c +++ b/src/mouse.c @@ -2308,10 +2308,15 @@ check_termcode_mouse( */ for (;;) { -# ifdef FEAT_GUI - if (gui.in_use) + // For the GUI and for MS-Windows two bytes each are used for row + // and column. Allows for more than 223 columns. +# if defined(FEAT_GUI) || defined(MSWIN) + if (TRUE +# if defined(FEAT_GUI) && !defined(MSWIN) + && gui.in_use +# endif + ) { - // GUI uses more bits for columns > 223 num_bytes = get_bytes_from_buf(tp + *slen, bytes, 5); if (num_bytes == -1) // not enough coordinates return -1;
--- a/src/os_win32.c +++ b/src/os_win32.c @@ -2055,17 +2055,23 @@ mch_inchar( typeahead[typeaheadlen++] = CSI; typeahead[typeaheadlen++] = KS_EXTRA; typeahead[typeaheadlen++] = scroll_dir; - g_nMouseClick = -1; } else { typeahead[typeaheadlen++] = ESC + 128; typeahead[typeaheadlen++] = 'M'; typeahead[typeaheadlen++] = g_nMouseClick; - typeahead[typeaheadlen++] = g_xMouse + '!'; - typeahead[typeaheadlen++] = g_yMouse + '!'; - g_nMouseClick = -1; } + + // Pass the pointer coordinates of the mouse event in 2 bytes, + // allowing for > 223 columns. Both for click and scroll events. + // This is the same as what is used for the GUI. + typeahead[typeaheadlen++] = (char_u)(g_xMouse / 128 + ' ' + 1); + typeahead[typeaheadlen++] = (char_u)(g_xMouse % 128 + ' ' + 1); + typeahead[typeaheadlen++] = (char_u)(g_yMouse / 128 + ' ' + 1); + typeahead[typeaheadlen++] = (char_u)(g_yMouse % 128 + ' ' + 1); + + g_nMouseClick = -1; } else {
--- a/src/term.c +++ b/src/term.c @@ -5857,12 +5857,15 @@ check_termcode( // We only get here when we have a complete termcode match -#ifdef FEAT_GUI +#if defined(FEAT_GUI) || defined(MSWIN) /* - * Only in the GUI: Fetch the pointer coordinates of the scroll event - * so that we know which window to scroll later. + * For scroll events from the GUI or MS-Windows console, fetch the + * pointer coordinates so that we know which window to scroll later. */ - if (gui.in_use + if (TRUE +# if defined(FEAT_GUI) && !defined(MSWIN) + && gui.in_use +# endif && key_name[0] == (int)KS_EXTRA && (key_name[1] == (int)KE_X1MOUSE || key_name[1] == (int)KE_X2MOUSE