On Mi, 03 Okt 2018, Mike Williams wrote:
> On 29/09/2018 10:50, Mike Williams wrote:
> > On 25/09/2018 13:46, Mike Williams wrote:
> >> Hi,
> >>
> >> Long term user, occasional poster.
> >>
> >> I occasionally use vim in powershell or cmd consoles. I have just
> >> noticed that numbers on the keypad don't work. All the surrounding keys
> >> work just fine, but the numbers don't. With -u NONE -UNONE and NumLock
> >> on I get a lead byte of 0xce followed by 0xda (for 0) through 0xfe (for
> >> 9) - each digit is offset by 4 from the previous one.
> >>
> >> With NumLock off there are no buffer updates for the number keys and
> >> decimal point but various types of cursor/display updates occur (life's
> >> too short to investigate 11 distinct actions with non-obvious effects).
> >> The remaining keypad keys continue to insert expected characters.
> >>
> >> I rebuild 8.1.0000 and the same happens there. I could have sworn it
> >> used to work. A quick google doesn't turn up anything obvious (some
> >> discussion of console/keypad issues and WSL a year ago or so). Should
> >> the keypad work in console vim?
> >
> > Small light bulb moment. As you all know I am sure with NumLock off the
> > keypad acts as the cursor movement set. That just leaves my question of
> > should the number pad with NumLock on result in digits being added to
> > the buffer?
> >
> > Debugging the code in decode_key_event() I can see the keys being
> > detected and handled as not being used with a modifier which results in
> > mch_inchar() inserting K_NUL and an 8-bit character in the type ahead
> > buffer. In fact based on the VirtKeyMap table any of the listed keys
> > (some with modifiers) that produce an 8-bit character ends up inserting
> > a character sequence and not being detected as a special key press.
> >
> > Removing the numbers from VirtKeyMap table -
> >
> > diff --git a/src/os_win32.c b/src/os_win32.c
> > --- a/src/os_win32.c
> > +++ b/src/os_win32.c
> > @@ -908,7 +908,7 @@ static const struct
> > { VK_SUBTRACT, TRUE,'J', 'J', 'J', 'J', }, /* keyp '-' */
> > /* { VK_DIVIDE, TRUE,'N', 'N', 'N', 'N', }, keyp '/' */
> > { VK_MULTIPLY, TRUE,'7', '7', '7', '7', }, /* keyp '*' */
> > -
> > +#if 0
> > { VK_NUMPAD0,TRUE, '\332', '\333', '\334', '\335', },
> > { VK_NUMPAD1,TRUE, '\336', '\337', '\340', '\341', },
> > { VK_NUMPAD2,TRUE, '\342', '\343', '\344', '\345', },
> > @@ -920,7 +920,7 @@ static const struct
> > { VK_NUMPAD8,TRUE, '\372', '\373', '\374', '\375', },
> > /* Sorry, out of number space! <negri>*/
> > { VK_NUMPAD9,TRUE, '\376', '\377', '\377', '\367', },
> > -
> > +#endif
> > };
> >
> >
> > gets me the number keys working with NumLock on, but I have no idea on
> > the effect with modifiers yet. I doubt this is the complete solution,
> > but I don't know how the key handling works in VIM. Anyone willing to
> > pick this up or tell me what needs doing?
>
> I believe have a fix for all this. It was a combination of poor code
> and the change for 8.0.1371 which exposed it - chars with top bit set
> are negative (at least with MSVC) which causes the wrong path in newer
> code to be taken. Converting the 8bit chars to positive integer
> constants appears to fix the issue and more - see attached diff against
> 8.1.0450.
>
> This does raise the longer term issue of should console handling still
> be emulating MS-DOS ANSI.SYS behaviour? Native console key handling
> would remove the whole issue of key mapping - as noted in original code,
> there aren't enough values for all keys and combinations!
Does that perhaps also fix https://github.com/vim/vim/issues/3246 and
https://github.com/vim/vim/issues/3423 ?
Best,
Christian
--
Wo Nachrichten fehlen, wachsen die Gerüchte.
-- Alberto Moravia
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.