diff options
Diffstat (limited to 'lib/keyboard_utils.coffee')
| -rw-r--r-- | lib/keyboard_utils.coffee | 35 | 
1 files changed, 23 insertions, 12 deletions
| 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 == "<c-[>"    # 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() | 
