From 28f6702b4e8fd5a21f2f1484a99732e703c5f37c Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 1 Sep 2017 11:27:39 +0100 Subject: Implement ignoreKeyboardLayout option in getKeyChar. Fixes #2618. --- lib/keyboard_utils.coffee | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) (limited to 'lib/keyboard_utils.coffee') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 5f37ddd0..dc6b6269 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -16,17 +16,24 @@ KeyboardUtils = @platform = "Windows" getKeyChar: (event) -> - if event.key of @keyNames - @keyNames[event.key] - # It appears that event.key is not always defined (see #2453). - else if not event.key? + unless Settings.get "ignoreKeyboardLayout" + key = event.key + else + key = event.code + key = key[3..] if key[...3] == "Key" + key = key.toLowerCase() unless event.shiftKey + + if key of @keyNames + @keyNames[key] + # It appears that key is not always defined (see #2453). + else if not key? "" - else if event.key.length == 1 - event.key - else if event.key.length == 2 and "F1" <= event.key <= "F9" - event.key.toLowerCase() # F1 to F9. - else if event.key.length == 3 and "F10" <= event.key <= "F12" - event.key.toLowerCase() # F10 to F12. + else if key.length == 1 + key + else if key.length == 2 and "F1" <= key <= "F9" + key.toLowerCase() # F1 to F9. + else if key.length == 3 and "F10" <= key <= "F12" + key.toLowerCase() # F10 to F12. else "" -- cgit v1.2.3 From 37b26d736b901eaf08a260d7d97af4d8749a2536 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 1 Sep 2017 13:51:20 +0100 Subject: Translate event.code key representations to the corresponding event.key format. --- lib/keyboard_utils.coffee | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'lib/keyboard_utils.coffee') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index dc6b6269..471e18c9 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -19,8 +19,15 @@ KeyboardUtils = unless Settings.get "ignoreKeyboardLayout" key = event.key else + # The logic here is from the vim-like-key-notation project (https://github.com/lydell/vim-like-key-notation). key = event.code + # Strip some standard prefixes. key = key[3..] if key[...3] == "Key" + key = key[5..] if key[...5] == "Digit" + key = key[6..] if key[...6] == "Numpad" + # Translate some special keys to event.key-like strings. + if @enUsTranslations[key] + key = if event.shift then @enUsTranslations[key][1] else @enUsTranslations[key][0] key = key.toLowerCase() unless event.shiftKey if key of @keyNames @@ -62,6 +69,21 @@ KeyboardUtils = isPrintable: (event) -> @getKeyCharString(event)?.length == 1 + enUsTranslations: + "Backquote": ["`", "~"] + "Minus": ["-", "_"] + "Equal": ["=", "+"] + "Backslash": ["\\","|"] + "IntlBackslash": ["\\","|"] + "BracketLeft": ["[", "{"] + "BracketRight": ["]", "}"] + "Semicolon": [";", ":"] + "Quote": ["'", '"'] + "Comma": [",", "<"] + "Period": [".", ">"] + "Slash": ["/", "?"] + "Space": [" ", " "] + KeyboardUtils.init() root = exports ? window -- cgit v1.2.3 From 1358fff3981cab5d8e0aa273cca2378aca2d766c Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 1 Sep 2017 16:48:35 +0100 Subject: Handle shifted numeric keys. --- lib/keyboard_utils.coffee | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'lib/keyboard_utils.coffee') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 471e18c9..4b03aeed 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -23,7 +23,6 @@ KeyboardUtils = key = event.code # Strip some standard prefixes. key = key[3..] if key[...3] == "Key" - key = key[5..] if key[...5] == "Digit" key = key[6..] if key[...6] == "Numpad" # Translate some special keys to event.key-like strings. if @enUsTranslations[key] @@ -83,6 +82,16 @@ KeyboardUtils = "Period": [".", ">"] "Slash": ["/", "?"] "Space": [" ", " "] + "Digit1": ["1", "!"] + "Digit2": ["2", "@"] + "Digit3": ["3", "#"] + "Digit4": ["4", "$"] + "Digit5": ["5", "%"] + "Digit6": ["6", "^"] + "Digit7": ["7", "&"] + "Digit8": ["8", "*"] + "Digit9": ["9", "("] + "Digit0": ["0", ")"] KeyboardUtils.init() -- cgit v1.2.3 From 2c1c86ee35f8437473de11f47e6a3a754cb8c1e5 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 1 Sep 2017 16:54:20 +0100 Subject: Use event.key for numpad. See this comment: https://github.com/philc/vimium/pull/2626#issuecomment-326553282. --- lib/keyboard_utils.coffee | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'lib/keyboard_utils.coffee') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 4b03aeed..7f05ef01 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -18,12 +18,13 @@ KeyboardUtils = getKeyChar: (event) -> unless Settings.get "ignoreKeyboardLayout" key = event.key + else if event.code[...6] == "Numpad" + # We cannot correctly emulate the numpad, so fall back to event.key; see #2626. + key = event.key else # The logic here is from the vim-like-key-notation project (https://github.com/lydell/vim-like-key-notation). key = event.code - # Strip some standard prefixes. key = key[3..] if key[...3] == "Key" - key = key[6..] if key[...6] == "Numpad" # Translate some special keys to event.key-like strings. if @enUsTranslations[key] key = if event.shift then @enUsTranslations[key][1] else @enUsTranslations[key][0] -- cgit v1.2.3 From 1e3a618b89d053f16715790f539350680b993b0f Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 2 Sep 2017 13:38:56 +0100 Subject: Fix special keys (e.g. ). --- lib/keyboard_utils.coffee | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'lib/keyboard_utils.coffee') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 7f05ef01..e14e8b3e 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -25,10 +25,11 @@ KeyboardUtils = # The logic here is from the vim-like-key-notation project (https://github.com/lydell/vim-like-key-notation). key = event.code key = key[3..] if key[...3] == "Key" - # Translate some special keys to event.key-like strings. + # Translate some special keys to event.key-like strings and handle . if @enUsTranslations[key] - key = if event.shift then @enUsTranslations[key][1] else @enUsTranslations[key][0] - key = key.toLowerCase() unless event.shiftKey + key = if event.shiftKey then @enUsTranslations[key][1] else @enUsTranslations[key][0] + else if key.length == 1 and not event.shiftKey + key = key.toLowerCase() if key of @keyNames @keyNames[key] -- cgit v1.2.3