# HG changeset patch # User Bram Moolenaar # Date 1666268106 -7200 # Node ID 38d20a201beb00b2dd725bbd5a9fa084141b2cf2 # Parent 464a04119e94d6aff4565d5761bf442ec89388f8 patch 9.0.0802: MS-Windows: cannot map console mouse scroll events Commit: https://github.com/vim/vim/commit/4c36678ffd1f933a6d4a12415994dea15e4ccec6 Author: Christopher Plewright Date: Thu Oct 20 13:11:15 2022 +0100 patch 9.0.0802: MS-Windows: cannot map console mouse scroll events Problem: MS-Windows: cannot map console mouse scroll events. Solution: Change CSI to K_SPECIAL when checking for a mapping. (Christopher Plewright, closes #11410) diff --git a/src/getchar.c b/src/getchar.c --- a/src/getchar.c +++ b/src/getchar.c @@ -2520,12 +2520,29 @@ handle_mapping( && State != MODE_CONFIRM && !at_ins_compl_key()) { -#ifdef FEAT_GUI - if (gui.in_use && tb_c1 == CSI && typebuf.tb_len >= 2 - && typebuf.tb_buf[typebuf.tb_off + 1] == KS_MODIFIER) +#if defined(FEAT_GUI) || defined(MSWIN) + if (tb_c1 == CSI +# if !defined(MSWIN) + && gui.in_use +# endif + && typebuf.tb_len >= 2 + && (typebuf.tb_buf[typebuf.tb_off + 1] == KS_MODIFIER +# if defined(MSWIN) + || (typebuf.tb_len >= 3 + && typebuf.tb_buf[typebuf.tb_off + 1] == KS_EXTRA + && (typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSEUP + || typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSEDOWN + || typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSELEFT + || typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSERIGHT) + ) +# endif + ) + ) { // The GUI code sends CSI KS_MODIFIER {flags}, but mappings expect // K_SPECIAL KS_MODIFIER {flags}. + // MS-Windows sends mouse scroll events CSI KS_EXTRA {what}, but + // mappings expect K_SPECIAL KS_EXTRA {what}. tb_c1 = K_SPECIAL; } #endif @@ -2568,7 +2585,8 @@ handle_mapping( && (mp->m_mode & local_State) && !(mp->m_simplified && seenModifyOtherKeys && typebuf.tb_maplen == 0) - && ((mp->m_mode & MODE_LANGMAP) == 0 || typebuf.tb_maplen == 0)) + && ((mp->m_mode & MODE_LANGMAP) == 0 + || typebuf.tb_maplen == 0)) { #ifdef FEAT_LANGMAP int nomap = nolmaplen; diff --git a/src/os_win32.c b/src/os_win32.c --- a/src/os_win32.c +++ b/src/os_win32.c @@ -1265,7 +1265,7 @@ decode_mouse_wheel(MOUSE_EVENT_RECORD *p #ifdef FEAT_PROP_POPUP int lcol = g_xMouse; int lrow = g_yMouse; - wp = mouse_find_win(&lrow, &lcol, FAIL_POPUP); + wp = mouse_find_win(&lrow, &lcol, FIND_POPUP); if (wp != NULL && popup_is_popup(wp)) { g_nMouseClick = -1; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 802, +/**/ 801, /**/ 800,