To: vim_dev@googlegroups.com Subject: Patch 8.2.5159 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.5159 (after 8.2.5157) Problem: Fix for CTRL-key combinations causes more problems than it solves. Solution: Roll back the change. Files: src/gui_w32.c *** ../vim-8.2.5158/src/gui_w32.c 2022-06-24 20:18:05.902326400 +0100 --- src/gui_w32.c 2022-06-25 13:46:11.655526039 +0100 *************** *** 2055,2075 **** 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. 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]) keyboard_state[VK_MENU] = 0x80; // Translate the virtual key according to the current keyboard // layout. --- 2055,2075 ---- int i; UINT scan_code; ! // 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_SHIFT) & 0x8000) keyboard_state[VK_SHIFT] = 0x80; if (GetKeyState(VK_CAPITAL) & 0x0001) keyboard_state[VK_CAPITAL] = 0x01; ! // 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,2094 **** // 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) --- 2079,2084 ---- *** ../vim-8.2.5158/src/version.c 2022-06-25 12:13:24.141938947 +0100 --- src/version.c 2022-06-25 13:47:28.043018171 +0100 *************** *** 737,738 **** --- 737,740 ---- { /* Add new patch number below this line */ + /**/ + 5159, /**/ -- The average life of an organization chart is six months. You can safely ignore any order from your boss that would take six months to complete. (Scott Adams - The Dilbert principle) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///