diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/keyboard_utils.coffee | 25 | 
1 files changed, 16 insertions, 9 deletions
| diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index f997b455..dabf864d 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -4,7 +4,7 @@ KeyboardUtils =      f12: 123, tab: 9, downArrow: 40, upArrow: 38 }    keyNames: -    { 37: "left", 38: "up", 39: "right", 40: "down", 32: "space" } +    { 37: "left", 38: "up", 39: "right", 40: "down", 32: "space", 8: "backspace" }    # This is a mapping of the incorrect keyIdentifiers generated by Webkit on Windows during keydown events to    # the correct identifiers, which are correctly generated on Mac. We require this mapping to properly handle @@ -53,15 +53,21 @@ KeyboardUtils =        ""    getKeyCharUsingKeyIdentifier: (event) -> -    # Not a letter -    if (event.keyIdentifier.slice(0, 2) != "U+") -      return @keyNames[event.keyCode] if (@keyNames[event.keyCode]) -      # F-key -      if (event.keyCode >= @keyCodes.f1 && event.keyCode <= @keyCodes.f12) -        return "f" + (1 + event.keyCode - keyCodes.f1) -      return "" +    # Handle named keys. +    keyCode = event.keyCode +    if keyCode +      if keyCode of @keyNames +        return @keyNames[keyCode] +      # Function keys. +      if @keyCodes.f1 <= keyCode <= @keyCodes.f12 +        return "f" + (1 + keyCode - keyCodes.f1)      keyIdentifier = event.keyIdentifier + +    # Not a letter. +    if not keyIdentifier.startsWith "U+" +      return "" +      # On Windows, the keyIdentifiers for non-letter keys are incorrect. See      # https://bugs.webkit.org/show_bug.cgi?id=19906 for more details.      if ((@platform == "Windows" || @platform == "Linux") && @keyIdentifierCorrectionMap[keyIdentifier]) @@ -75,7 +81,8 @@ KeyboardUtils =    isEscape: (event) ->      # c-[ is mapped to ESC in Vim by default. -    (event.keyCode == @keyCodes.ESC) || (event.ctrlKey && @getKeyChar(event) == '[' and not event.metaKey) +    (event.keyCode == @keyCodes.ESC) || +    (event.ctrlKey && @getKeyChar(event) == '[' and not event.metaKey and not event.altKey)    # 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. | 
