From 9c1012ad3a731b015b8a70b58828fbcd0acb7db0 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sun, 9 Oct 2016 16:31:23 +0100 Subject: Extend key translation to include Escape. Here, these map to escape: translate x translate --- lib/keyboard_utils.coffee | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'lib/keyboard_utils.coffee') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index f0e791d4..7f48d69e 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -79,10 +79,18 @@ KeyboardUtils = isPrimaryModifierKey: (event) -> if (@platform == "Mac") then event.metaKey else event.ctrlKey - isEscape: (event) -> - # c-[ is mapped to ESC in Vim by default. - (event.keyCode == @keyCodes.ESC) || - (event.ctrlKey && @getKeyChar(event) == '[' and not event.metaKey and not event.altKey) + isEscape: do -> + keyTranslationRegistry = {} + # NOTE: "?" here for the tests. + Utils?.monitorChromeStorage "keyTranslationRegistry", (value) => keyTranslationRegistry = value + + (event) -> + event.keyCode == @keyCodes.ESC || do => + keyChar = @getKeyChar event + keyChar.length == 1 and do => + keyChar = @getModifiedKeyChar keyChar, event + keyChar = keyTranslationRegistry[keyChar] ? keyChar + keyChar == "" # TODO. This is probably a poor way of detecting printable characters. However, it shouldn't incorrectly # identify any of chrome's own keyboard shortcuts as printable. @@ -108,16 +116,19 @@ KeyboardUtils = # Handle special keys and normal input keys with modifiers being pressed. keyChar = @getKeyChar event if 1 < keyChar.length or (keyChar.length == 1 and (event.metaKey or event.ctrlKey or event.altKey)) - modifiers = [] + @getModifiedKeyChar keyChar, event + + getModifiedKeyChar: (keyChar, event) -> + modifiers = [] - keyChar = keyChar.toUpperCase() if event.shiftKey - # These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey). - modifiers.push "a" if event.altKey - modifiers.push "c" if event.ctrlKey - modifiers.push "m" if event.metaKey + keyChar = keyChar.toUpperCase() if event.shiftKey + # These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey). + modifiers.push "a" if event.altKey + modifiers.push "c" if event.ctrlKey + modifiers.push "m" if event.metaKey - keyChar = [modifiers..., keyChar].join "-" - if 1 < keyChar.length then "<#{keyChar}>" else keyChar + keyChar = [modifiers..., keyChar].join "-" + if 1 < keyChar.length then "<#{keyChar}>" else keyChar KeyboardUtils.init() -- cgit v1.2.3