Skip to content

Commit 6d57b8a

Browse files
Merge pull request philc#2456 from smblott-github/always-keydown-and-event.key
Always use keydown and event.key (partial PDF-tab fix)
2 parents e19f5c9 + 1e6f5f7 commit 6d57b8a

File tree

2 files changed

+15
-16
lines changed

2 files changed

+15
-16
lines changed

content_scripts/mode_key_handler.coffee

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,6 @@ class KeyHandlerMode extends Mode
3333
# We cannot track keyup events if we lose the focus.
3434
blur: (event) => @alwaysContinueBubbling => @keydownEvents = {} if event.target == window
3535

36-
@mapKeyRegistry = {}
37-
Utils.monitorChromeStorage "mapKeyRegistry", (value) => @mapKeyRegistry = value
38-
3936
if options.exitOnEscape
4037
# If we're part way through a command's key sequence, then a first Escape should reset the key state,
4138
# and only a second Escape should actually exit this mode.
@@ -50,7 +47,6 @@ class KeyHandlerMode extends Mode
5047

5148
onKeydown: (event) ->
5249
keyChar = KeyboardUtils.getKeyCharString event
53-
keyChar = @mapKeyRegistry[keyChar] ? keyChar
5450
isEscape = KeyboardUtils.isEscape event
5551
if isEscape and (@countPrefix != 0 or @keyState.length != 1)
5652
@keydownEvents[event.keyCode] = true
@@ -77,7 +73,6 @@ class KeyHandlerMode extends Mode
7773

7874
onKeypress: (event) ->
7975
keyChar = KeyboardUtils.getKeyCharString event
80-
keyChar = @mapKeyRegistry[keyChar] ? keyChar
8176
if @isMappedKey keyChar
8277
@handleKeyChar keyChar
8378
else if @isCountKey keyChar

lib/keyboard_utils.coffee

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
mapKeyRegistry = {}
2+
# NOTE: "?" here for the tests.
3+
Utils?.monitorChromeStorage "mapKeyRegistry", (value) => mapKeyRegistry = value
4+
15
KeyboardUtils =
26
keyCodes:
37
{ ESC: 27, backspace: 8, deleteKey: 46, enter: 13, ctrlEnter: 10, space: 32, shiftKey: 16, ctrlKey: 17, f1: 112,
@@ -83,15 +87,11 @@ KeyboardUtils =
8387
isPrimaryModifierKey: (event) -> if (@platform == "Mac") then event.metaKey else event.ctrlKey
8488

8589
isEscape: do ->
86-
mapKeyRegistry = {}
87-
# NOTE: "?" here for the tests.
88-
Utils?.monitorChromeStorage "mapKeyRegistry", (value) => mapKeyRegistry = value
8990

9091
# TODO(smblott) Change this to use event.key.
9192
(event) ->
9293
event.keyCode == @keyCodes.ESC || do =>
93-
keyChar = @getKeyCharString event, true
94-
keyChar = mapKeyRegistry[keyChar] ? keyChar
94+
keyChar = @getKeyCharString event
9595
# <c-[> is mapped to Escape in Vim by default.
9696
keyChar == "<c-[>"
9797

@@ -108,27 +108,31 @@ KeyboardUtils =
108108

109109
# Return the Vimium key representation for this keyboard event. Return a falsy value (the empty string or
110110
# undefined) when no Vimium representation is appropriate.
111-
getKeyCharString: (event, allKeydownEvents = false) ->
111+
getKeyCharString: (event) ->
112112
switch event.type
113113
when "keypress"
114114
# Ignore modifier keys by themselves.
115115
if 31 < event.keyCode
116116
String.fromCharCode event.charCode
117117

118+
# TODO(smblott). Currently all (almost?) keyhandling is being done on keydown. All legacy code related
119+
# to key handling on keypress should be reviewed and probably removed. This is not being done right now
120+
# (2017-03-22) because it is better to wait until we've verified that the change to keydown is indeed
121+
# correct and reliable.
118122
when "keydown"
119-
# Handle special keys and normal input keys with modifiers being pressed.
120-
keyChar = @getKeyChar event
121-
if 1 < keyChar.length or (keyChar.length == 1 and (event.metaKey or event.ctrlKey or event.altKey)) or allKeydownEvents
123+
if keyChar = @getKeyChar event
122124
modifiers = []
123125

124-
keyChar = keyChar.toUpperCase() if event.shiftKey
126+
keyChar = keyChar.toUpperCase() if event.shiftKey and keyChar.length == 1
125127
# These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey).
126128
modifiers.push "a" if event.altKey
127129
modifiers.push "c" if event.ctrlKey
128130
modifiers.push "m" if event.metaKey
129131

130132
keyChar = [modifiers..., keyChar].join "-"
131-
if 1 < keyChar.length then "<#{keyChar}>" else keyChar
133+
keyChar = "<#{keyChar}>" if 1 < keyChar.length
134+
keyChar = mapKeyRegistry[keyChar] ? keyChar
135+
keyChar
132136

133137
KeyboardUtils.init()
134138

0 commit comments

Comments
 (0)