0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 9.1.0050: Win32 Keyboard handling is sub-optimal

Problem:  Win32 Keyboard handling is sub-optimal and has
          many issues with international keyboards
          (risa2000) (after v8.2.4807)
Solution: soft-rollback the change, allow the user to select
          a suitable key-translation strategy
          (Anton Sharonov)

Read about the details in the help:
    :h w32-experimental-keycode-trans-strategy

fixes: #10615
fixes: #12595
closes: #12752

Signed-off-by: Anton Sharonov <anton.sharonov@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Anton Sharonov
2024-01-23 23:19:02 +01:00
committed by Christian Brabandt
parent 1fb4103206
commit 68d9472c65
6 changed files with 483 additions and 83 deletions

View File

@@ -1,4 +1,4 @@
*gui_w32.txt* For Vim version 9.1. Last change: 2022 Mar 09
*gui_w32.txt* For Vim version 9.1. Last change: 2024 Jan 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -454,4 +454,38 @@ You may need to get the vim16x16.xpm file from github:
https://github.com/vim/vim/blob/master/runtime/vim16x16.xpm
Keycode translation strategy *w32-experimental-keycode-trans-strategy*
In Patch v8.2.4807 W32 GVIM was changed over to experimental keycode
translation method with the aim to be able to use more keyboard shortcuts and
especially supporting non-standard keyboard layouts. In order to implement
this support Win API TranslateMessage() call was dropped, and instead the
recognition of keycode was changed over to ToUnicode() Win API call. This
approach uncovered numerous corner cases, which are apparently covered by
TranslateMessage() implementation, each of it is necessary to be dealt with on
an individual basis. Therefore the decision was taken to declare this
functionality experimental for the time being and to recover "classic" keycode
translation method as default again.
Discussion about use of "experimental" keycode translation method will
probably last some time yet. In the meantime, if you are impacted by this
change over back to "classic" keycode translation method in W32 GVIM, you can
enable "experimental" translation method again in your vimrc using following
snippet:
>
:call test_mswin_event('set_keycode_trans_strategy', {'strategy': 'experimental'})
<
Similarly, in case you need to turn back "classic" keycode translation method
(for example for testing purposes), please use:
>
:call test_mswin_event('set_keycode_trans_strategy', {'strategy': 'classic'})
<
Alternatively (this method is especially useful for the TINY GVIM build, where
test_mswin_event() cannot be called), an environment variable
VIM_KEYCODE_TRANS_STRATEGY can be set to the desired value ("experimental" or
"classic"), to override the default, e.g., type in dos prompt:
>
set VIM_KEYCODE_TRANS_STRATEGY=experimental
gvim.exe
<
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:

View File

@@ -11189,6 +11189,7 @@ vt100-cursor-keys term.txt /*vt100-cursor-keys*
vt100-function-keys term.txt /*vt100-function-keys*
w motion.txt /*w*
w32-clientserver remote.txt /*w32-clientserver*
w32-experimental-keycode-trans-strategy gui_w32.txt /*w32-experimental-keycode-trans-strategy*
w32-xpm-support gui_w32.txt /*w32-xpm-support*
w: eval.txt /*w:*
w:current_syntax syntax.txt /*w:current_syntax*

View File

@@ -1,4 +1,4 @@
*testing.txt* For Vim version 9.1. Last change: 2023 May 18
*testing.txt* For Vim version 9.1. Last change: 2024 Jan 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -234,6 +234,8 @@ test_mswin_event({event}, {args}) *test_mswin_event()*
{event} is a String and the supported values are:
"mouse" mouse event.
"key" keyboard event.
"set_keycode_trans_strategy"
Change the key transation method
"mouse":
Inject either a mouse button click, or a mouse move, event.
@@ -290,6 +292,14 @@ test_mswin_event({event}, {args}) *test_mswin_event()*
unprocessed key events. All other {args}
items are optional when this is set and true.
"set_keycode_trans_strategy":
|w32-experimental-keycode-trans-strategy|
Switch the keycode translation method. The supported methods are:
experimental: The method used after Patch v8.2.4807
using ToUnicode() Win API call.
classic: The method used pre Patch v8.2.4807
using the TranslateMessage() Win API call.
Returns TRUE if the event is successfully added or executed,
FALSE if there is a failure.