On 03/10/2018 20:43, Christian Brabandt wrote:
> 
> 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 ?

It does fix 3246.  It seems to fix 3423 but it is not a method of using 
VIM that I use so I am not 100% certain.

However this fix does break what 8.0.1371 kinda fixed - shift-ins 
support.  This means that fix was not the right one so I'll look into 
that now I have a bit more knowledge of the area.

TTFN

Mike
-- 
It's easy to apply yourself, just use crazy glue!

-- 
-- 
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.

Raspunde prin e-mail lui