# HG changeset patch # User Bram Moolenaar # Date 1656162003 -7200 # Node ID fed16adfe35337939ae0e27787c4cf28ed794b56 # Parent c3e58f523ed977f83d746553d253ae35794103df patch 8.2.5159: fix for CTRL-key combinations causes problems Commit: https://github.com/vim/vim/commit/7bb6d56cfc8ac82dea323f6799a773d7fa3286a8 Author: Bram Moolenaar Date: Sat Jun 25 13:48:25 2022 +0100 patch 8.2.5159: fix for CTRL-key combinations causes problems Problem: Fix for CTRL-key combinations causes more problems than it solves. Solution: Roll back the change. diff --git a/src/gui_w32.c b/src/gui_w32.c --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -2055,21 +2055,21 @@ process_message(void) int i; UINT scan_code; - // Construct the keyboard state table, the modifiers can and will - // affect the character translation performed by ToUnicode. - // Eg. With a Russian keyboard layout pressing 'n' produces 'т' but - // Ctrl+p produces 'p', this is essential for the keybindings to - // work. + // Construct the state table with only a few modifiers, we don't + // really care about the presence of Ctrl/Alt as those modifiers are + // handled by Vim separately. memset(keyboard_state, 0, 256); - if (GetKeyState(VK_CONTROL) & 0x8000) - keyboard_state[VK_CONTROL] = 0x80; if (GetKeyState(VK_SHIFT) & 0x8000) keyboard_state[VK_SHIFT] = 0x80; if (GetKeyState(VK_CAPITAL) & 0x0001) keyboard_state[VK_CAPITAL] = 0x01; - // Alt-Gr is synthesized as (Right)Alt + Ctrl. - if ((GetKeyState(VK_RMENU) & 0x8000) && keyboard_state[VK_CONTROL]) + // Alt-Gr is synthesized as Alt + Ctrl. + if ((GetKeyState(VK_RMENU) & 0x8000) + && (GetKeyState(VK_CONTROL) & 0x8000)) + { keyboard_state[VK_MENU] = 0x80; + keyboard_state[VK_CONTROL] = 0x80; + } // Translate the virtual key according to the current keyboard // layout. @@ -2079,16 +2079,6 @@ process_message(void) // If this is a dead key ToUnicode returns a negative value. len = ToUnicode(vk, scan_code, keyboard_state, ch, ARRAY_LENGTH(ch), 0); - if (len == 0 && keyboard_state[VK_CONTROL]) - { - // Handle one more special case: pressing Ctrl+key may - // generate an unprintable ASCII character, try again without - // the modifier to get the pressed key value. - keyboard_state[VK_CONTROL] = 0; - len = ToUnicode(vk, scan_code, keyboard_state, ch, - ARRAY_LENGTH(ch), 0); - keyboard_state[VK_CONTROL] = 0x80; - } dead_key = len < 0; if (len <= 0) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -736,6 +736,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 5159, +/**/ 5158, /**/ 5157,