aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/keyboard_utils.coffee25
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.