aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts/mode_key_handler.coffee
diff options
context:
space:
mode:
authorStephen Blott2016-03-02 08:44:42 +0000
committerStephen Blott2016-03-05 05:40:35 +0000
commit91bcedbf4aebbd2691ef68ca96094206a942a1b8 (patch)
treea6b077a83070059db958b484729e55f2240d5b84 /content_scripts/mode_key_handler.coffee
parent5db79c7e8ef05bea07d1e811de4c9a7755be85f2 (diff)
downloadvimium-91bcedbf4aebbd2691ef68ca96094206a942a1b8.tar.bz2
Key bindings; simplify pass-key logic.
Diffstat (limited to 'content_scripts/mode_key_handler.coffee')
-rw-r--r--content_scripts/mode_key_handler.coffee45
1 files changed, 20 insertions, 25 deletions
diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee
index 397e64c8..fc4d485e 100644
--- a/content_scripts/mode_key_handler.coffee
+++ b/content_scripts/mode_key_handler.coffee
@@ -42,32 +42,29 @@ class KeyHandlerMode extends Mode
@reset()
false # Suppress event.
else if @keyCharIsMapped keyChar
- @unlessKeyCharIsPassKey keyChar, =>
- @keydownEvents[event.keyCode] = true
- @handleKeyChar event, keyChar
+ @keydownEvents[event.keyCode] = true
+ @handleKeyChar event, keyChar
else if not keyChar and (keyChar = KeyboardUtils.getKeyChar event) and
(@keyCharIsMapped(keyChar) or @isCountKey keyChar)
# We will possibly be handling a subsequent keypress event, so suppress propagation of this event to
# prevent triggering page event listeners (e.g. Google instant Search).
- @unlessKeyCharIsPassKey keyChar, =>
- @keydownEvents[event.keyCode] = true
- DomUtils.suppressPropagation event
- @stopBubblingAndTrue
+ @keydownEvents[event.keyCode] = true
+ DomUtils.suppressPropagation event
+ @stopBubblingAndTrue
else
@continueBubbling
onKeypress: (event) ->
keyChar = KeyboardUtils.getKeyCharString event
- @unlessKeyCharIsPassKey keyChar, =>
- if @keyCharIsMapped keyChar
- @handleKeyChar event, keyChar
- else if @isCountKey keyChar
- digit = parseInt keyChar
- @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit
- false # Suppress event.
- else
- @reset()
- @continueBubbling
+ if @keyCharIsMapped keyChar
+ @handleKeyChar event, keyChar
+ else if @isCountKey keyChar
+ digit = parseInt keyChar
+ @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit
+ false # Suppress event.
+ else
+ @reset()
+ @continueBubbling
onKeyup: (event) ->
return @continueBubbling unless event.keyCode of @keydownEvents
@@ -75,9 +72,9 @@ class KeyHandlerMode extends Mode
DomUtils.suppressPropagation event
@stopBubblingAndTrue
- # This tests whether there is a mapping of keyChar in the current key state.
+ # This tests whether there is a mapping of keyChar in the current key state (and accounts for pass keys).
keyCharIsMapped: (keyChar) ->
- (mapping for mapping in @keyState when keyChar of mapping)[0]?
+ (mapping for mapping in @keyState when keyChar of mapping)[0]? and not @isPassKey keyChar
handleKeyChar: (event, keyChar) ->
bgLog "Handling key #{keyChar}, mode=#{@name}."
@@ -93,15 +90,13 @@ class KeyHandlerMode extends Mode
false # Suppress event.
isCountKey: (keyChar) ->
- keyChar?.length == 1 and (if 0 < @countPrefix then '0' else '1') <= keyChar <= '9'
+ keyChar?.length == 1 and (if 0 < @countPrefix then '0' else '1') <= keyChar <= '9' and
+ not @isPassKey keyChar
# Keystrokes are *never* considered passKeys if the user has begun entering a command. So, for example, if
# 't' is a passKey, then the "t"-s of 'gt' and '99t' are neverthless handled as regular keys.
- unlessKeyCharIsPassKey: (keyChar, nonPassKeyCallback) ->
- if @countPrefix == 0 and @keyState.length == 1 and keyChar in (@passKeys ? "")
- @stopBubblingAndTrue
- else
- nonPassKeyCallback()
+ isPassKey: (keyChar) ->
+ @countPrefix == 0 and @keyState.length == 1 and keyChar in (@passKeys ? "")
root = exports ? window
root.KeyHandlerMode = KeyHandlerMode