# HG changeset patch # User Bram Moolenaar # Date 1538920806 -7200 # Node ID 66176f8735aa8a2f93ab6be1e1968774d021e2c4 # Parent dbc263f9f598a6013d0cb3e718fa07bf934d24d0 patch 8.1.0457: win32 console: key mappings don't work commit https://github.com/vim/vim/commit/0cc7b2d6ccc79d6ce69f5405f9914a42cb4f615e Author: Bram Moolenaar Date: Sun Oct 7 15:49:56 2018 +0200 patch 8.1.0457: win32 console: key mappings don't work Problem: Win32 console: key mappings don't work. Solution: Use another solution for the keypad keys that doesn't break mappings. Some values will be negative. (Mike Williams) diff --git a/src/os_win32.c b/src/os_win32.c --- a/src/os_win32.c +++ b/src/os_win32.c @@ -852,7 +852,7 @@ static const struct int chAlt; } VirtKeyMap[] = { -/* Key ANSI alone shift ctrl alt */ +// Key ANSI alone shift ctrl alt { VK_ESCAPE,FALSE, ESC, ESC, ESC, ESC, }, { VK_F1, TRUE, ';', 'T', '^', 'h', }, @@ -865,49 +865,50 @@ static const struct { VK_F8, TRUE, 'B', '[', 'e', 'o', }, { VK_F9, TRUE, 'C', '\\', 'f', 'p', }, { VK_F10, TRUE, 'D', ']', 'g', 'q', }, - { VK_F11, TRUE, 0x85, 0x87, 0x89, 0x8B, }, - { VK_F12, TRUE, 0x86, 0x88, 0x8a, 0x8c, }, - - { VK_HOME, TRUE, 'G', 0xc2, 'w', 0xc3, }, - { VK_UP, TRUE, 'H', 0xc4, 0xc5, 0xc6, }, - { VK_PRIOR, TRUE, 'I', 0xc7, 0x84, 0xc8, }, /*PgUp*/ - { VK_LEFT, TRUE, 'K', 0xc9, 's', 0xca, }, - { VK_RIGHT, TRUE, 'M', 0xcb, 't', 0xcc, }, - { VK_END, TRUE, 'O', 0xcd, 'u', 0xce, }, - { VK_DOWN, TRUE, 'P', 0xcf, 0xd0, 0xd1, }, - { VK_NEXT, TRUE, 'Q', 0xd2, 'v', 0xd3, }, /*PgDn*/ - { VK_INSERT,TRUE, 'R', 0xd4, 0xd5, 0xd6, }, - { VK_DELETE,TRUE, 'S', 0xd7, 0xd8, 0xd9, }, - - { VK_SNAPSHOT,TRUE, 0, 0, 0, 'r', }, /*PrtScrn*/ + { VK_F11, TRUE, '\205', '\207', '\211', '\213', }, + { VK_F12, TRUE, '\206', '\210', '\212', '\214', }, + + { VK_HOME, TRUE, 'G', '\302', 'w', '\303', }, + { VK_UP, TRUE, 'H', '\304', '\305', '\306', }, + { VK_PRIOR, TRUE, 'I', '\307', '\204', '\310', }, // PgUp + { VK_LEFT, TRUE, 'K', '\311', 's', '\312', }, + { VK_RIGHT, TRUE, 'M', '\313', 't', '\314', }, + { VK_END, TRUE, 'O', '\315', 'u', '\316', }, + { VK_DOWN, TRUE, 'P', '\317', '\320', '\321', }, + { VK_NEXT, TRUE, 'Q', '\322', 'v', '\323', }, // PgDn + { VK_INSERT,TRUE, 'R', '\324', '\325', '\326', }, + { VK_DELETE,TRUE, 'S', '\327', '\330', '\331', }, + + { VK_SNAPSHOT,TRUE, 0, 0, 0, 'r', }, // PrtScrn #if 0 - /* Most people don't have F13-F20, but what the hell... */ - { VK_F13, TRUE, 0xda, 0xdb, 0xdc, 0xdd, }, - { VK_F14, TRUE, 0xde, 0xdf, 0xe0, 0xe1, }, - { VK_F15, TRUE, 0xe2, 0xe3, 0xe4, 0xe5, }, - { VK_F16, TRUE, 0xe6, 0xe7, 0xe8, 0xe9, }, - { VK_F17, TRUE, 0xea, 0xeb, 0xec, 0xed, }, - { VK_F18, TRUE, 0xee, 0xef, 0xf0, 0xf1, }, - { VK_F19, TRUE, 0xf2, 0xf3, 0xf4, 0xf5, }, - { VK_F20, TRUE, 0xf6, 0xf7, 0xf8, 0xf9, }, -#endif - { VK_ADD, TRUE, 'N', 'N', 'N', 'N', }, /* keyp '+' */ - { VK_SUBTRACT, TRUE,'J', 'J', 'J', 'J', }, /* keyp '-' */ - /* { VK_DIVIDE, TRUE,'N', 'N', 'N', 'N', }, keyp '/' */ - { VK_MULTIPLY, TRUE,'7', '7', '7', '7', }, /* keyp '*' */ - - { VK_NUMPAD0,TRUE, 0xda, 0xdb, 0xdc, 0xdd, }, - { VK_NUMPAD1,TRUE, 0xde, 0xdf, 0xe0, 0xe1, }, - { VK_NUMPAD2,TRUE, 0xe2, 0xe3, 0xe4, 0xe5, }, - { VK_NUMPAD3,TRUE, 0xe6, 0xe7, 0xe8, 0xe9, }, - { VK_NUMPAD4,TRUE, 0xea, 0xeb, 0xec, 0xed, }, - { VK_NUMPAD5,TRUE, 0xee, 0xef, 0xf0, 0xf1, }, - { VK_NUMPAD6,TRUE, 0xf2, 0xf3, 0xf4, 0xf5, }, - { VK_NUMPAD7,TRUE, 0xf6, 0xf7, 0xf8, 0xf9, }, - { VK_NUMPAD8,TRUE, 0xfa, 0xfb, 0xfc, 0xfd, }, - /* Sorry, out of number space! */ - { VK_NUMPAD9,TRUE, 0xfe, 0xff, 0xff, 0xf7, }, + // Most people don't have F13-F20, but what the hell... + { VK_F13, TRUE, '\332', '\333', '\334', '\335', }, + { VK_F14, TRUE, '\336', '\337', '\340', '\341', }, + { VK_F15, TRUE, '\342', '\343', '\344', '\345', }, + { VK_F16, TRUE, '\346', '\347', '\350', '\351', }, + { VK_F17, TRUE, '\352', '\353', '\354', '\355', }, + { VK_F18, TRUE, '\356', '\357', '\360', '\361', }, + { VK_F19, TRUE, '\362', '\363', '\364', '\365', }, + { VK_F20, TRUE, '\366', '\367', '\370', '\371', }, +#endif + { VK_ADD, TRUE, 'N', 'N', 'N', 'N', }, // keyp '+' + { VK_SUBTRACT, TRUE,'J', 'J', 'J', 'J', }, // keyp '-' + // { VK_DIVIDE, TRUE,'N', 'N', 'N', 'N', }, // keyp '/' + { VK_MULTIPLY, TRUE,'7', '7', '7', '7', }, // keyp '*' + + { VK_NUMPAD0,TRUE, '\332', '\333', '\334', '\335', }, + { VK_NUMPAD1,TRUE, '\336', '\337', '\340', '\341', }, + { VK_NUMPAD2,TRUE, '\342', '\343', '\344', '\345', }, + { VK_NUMPAD3,TRUE, '\346', '\347', '\350', '\351', }, + { VK_NUMPAD4,TRUE, '\352', '\353', '\354', '\355', }, + { VK_NUMPAD5,TRUE, '\356', '\357', '\360', '\361', }, + { VK_NUMPAD6,TRUE, '\362', '\363', '\364', '\365', }, + { VK_NUMPAD7,TRUE, '\366', '\367', '\370', '\371', }, + { VK_NUMPAD8,TRUE, '\372', '\373', '\374', '\375', }, + // Sorry, out of number space! + { VK_NUMPAD9,TRUE, '\376', '\377', '\377', '\367', }, + }; @@ -1914,11 +1915,24 @@ mch_inchar( typeahead[typeaheadlen] = c; if (ch2 != NUL) { - if (c == K_NUL && (ch2 & 0xff00) != 0) + if (c == K_NUL) { - /* fAnsiKey with modifier keys */ - typeahead[typeaheadlen + n] = (char_u)ch2; - n++; + switch (ch2) + { + case (WCHAR)'\324': // SHIFT+Insert + case (WCHAR)'\325': // CTRL+Insert + case (WCHAR)'\327': // SHIFT+Delete + case (WCHAR)'\330': // CTRL+Delete + typeahead[typeaheadlen + n] = (char_u)ch2; + n++; + break; + + default: + typeahead[typeaheadlen + n] = 3; + typeahead[typeaheadlen + n + 1] = (char_u)ch2; + n += 2; + break; + } } else { diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -793,6 +793,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 457, +/**/ 456, /**/ 455,