diff options
| -rw-r--r-- | content_scripts/mode_key_handler.coffee | 42 | ||||
| -rw-r--r-- | content_scripts/mode_passkeys.coffee | 23 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 4 | ||||
| -rw-r--r-- | manifest.json | 1 | ||||
| -rw-r--r-- | tests/dom_tests/dom_tests.html | 1 | 
5 files changed, 27 insertions, 44 deletions
| diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee index 567552c0..60633895 100644 --- a/content_scripts/mode_key_handler.coffee +++ b/content_scripts/mode_key_handler.coffee @@ -24,30 +24,33 @@ class KeyHandlerMode extends Mode          @reset()          false # Suppress event.      else if keyChar and @mappingForKeyChar keyChar -      @keydownEvents[event.keyCode] = true -      @handleKeyChar event, keyChar +      @unlessKeyCharIsPassKey keyChar, => +        @keydownEvents[event.keyCode] = true +        @handleKeyChar event, keyChar      else if keyChar        @continueBubbling      else if (keyChar = KeyboardUtils.getKeyChar event) and (@mappingForKeyChar(keyChar) or @isCountKey keyChar)        # We will probably be handling a subsequent keypress event, so suppress propagation of this event to        # prevent triggering page event listeners (e.g. Google instant Search). -      @keydownEvents[event.keyCode] = true -      DomUtils.suppressPropagation event -      @stopBubblingAndTrue +      @unlessKeyCharIsPassKey keyChar, => +        @keydownEvents[event.keyCode] = true +        DomUtils.suppressPropagation event +        @stopBubblingAndTrue      else        @continueBubbling    onKeypress: (event) ->      keyChar = KeyboardUtils.getKeyCharString event -    if keyChar and @mappingForKeyChar keyChar -      @handleKeyChar event, keyChar -    else if keyChar and @isCountKey keyChar -      digit = parseInt keyChar -      @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit -      false # Suppress event. -    else -      @reset() -      @continueBubbling +    @unlessKeyCharIsPassKey keyChar, => +      if keyChar and @mappingForKeyChar keyChar +        @handleKeyChar event, keyChar +      else if keyChar and @isCountKey keyChar +        digit = parseInt keyChar +        @reset if @keyState.length == 1 then @countPrefix * 10 + digit else digit +        false # Suppress event. +      else +        @reset() +        @continueBubbling    onKeyup: (event) ->      if event.keyCode of @keydownEvents @@ -87,9 +90,14 @@ class KeyHandlerMode extends Mode    isCountKey: (keyChar) ->      keyChar.length == 1 and (if 0 < @countPrefix then '0' else '1') <= keyChar <= '9' -  # This tests whether keyChar would be the very first character of a command mapping. -  isFirstKeyChar: (keyChar) -> -    @countPrefix == 0 and (@mappingForKeyChar(keyChar) == @keyMapping or @isCountKey keyChar) +  # Keystrokes are *never* considered passKeys if the user has begun entering a command.  So, for example, if +  # 't' is a passKey, then 'gt' and '99t' are neverthless handled as regular keys. +  unlessKeyCharIsPassKey: (keyChar, nonPassKeyCallback) -> +    if (@passKeys? and keyChar?.length == 1 and 0 <= @passKeys.indexOf(keyChar) and +        @countPrefix == 0 and @keyState.length == 1) +      @stopBubblingAndTrue +    else +      nonPassKeyCallback()  root = exports ? window  root.KeyHandlerMode = KeyHandlerMode diff --git a/content_scripts/mode_passkeys.coffee b/content_scripts/mode_passkeys.coffee deleted file mode 100644 index 7efa559c..00000000 --- a/content_scripts/mode_passkeys.coffee +++ /dev/null @@ -1,23 +0,0 @@ - -class PassKeysMode extends Mode -  constructor: (@normalMode) -> -    @nextKeyup = @continueBubbling -    super -      name: "passkeys" -      trackState: true # Maintain @passKeys. -      keydown: (event) => @handleKeyChar event, KeyboardUtils.getKeyChar event -      keypress: (event) => @handleKeyChar event, String.fromCharCode event.charCode -      keyup: => ([_, @nextKeyup] = [@nextKeyup, @continueBubbling])[0] -      # We cannot track keyup events if we lose the focus. -      blur: (event) => @alwaysContinueBubbling => @nextKeyup = @continueBubbling if event.target == window - -  # Keystrokes are *never* considered passKeys if the user has begun entering a command.  So, for example, if -  # 't' is a passKey, then 'gt' and '99t' are neverthless be handled by Vimium. -  handleKeyChar: (event, keyChar) -> -    return @continueBubbling if event.altKey or event.ctrlKey or event.metaKey -    return @continueBubbling unless keyChar and @normalMode.isFirstKeyChar keyChar -    return @continueBubbling unless keyChar.length == 1 and 0 <= @passKeys.indexOf keyChar -    @nextKeyup = @stopBubblingAndTrue - -root = exports ? window -root.PassKeysMode = PassKeysMode diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index ec666a23..46b21ed0 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -98,6 +98,7 @@ class NormalMode extends KeyHandlerMode      super extend options,        name: "normal"        indicator: false # There is no mode indicator in normal mode. +      trackState: true # Maintain @passKeys.        commandHandler: @commandHandler.bind this      chrome.storage.local.get "normalModeKeyStateMapping", (items) => @@ -127,8 +128,7 @@ class NormalMode extends KeyHandlerMode  window.initializeModes = (args...) ->    # Install the permanent modes.  The permanently-installed insert mode tracks focus/blur events, and    # activates/deactivates itself accordingly. -  normalMode = new NormalMode args... -  new PassKeysMode normalMode +  new NormalMode args...    new InsertMode permanent: true    Scroller.init() diff --git a/manifest.json b/manifest.json index ae50d995..07647da5 100644 --- a/manifest.json +++ b/manifest.json @@ -50,7 +50,6 @@               "content_scripts/scroller.js",               "content_scripts/marks.js",               "content_scripts/mode_insert.js", -             "content_scripts/mode_passkeys.js",               "content_scripts/mode_find.js",               "content_scripts/mode_visual_edit.js",               "content_scripts/mode_key_handler.js", diff --git a/tests/dom_tests/dom_tests.html b/tests/dom_tests/dom_tests.html index 8c914d3c..9aa804d1 100644 --- a/tests/dom_tests/dom_tests.html +++ b/tests/dom_tests/dom_tests.html @@ -42,7 +42,6 @@      <script type="text/javascript" src="../../content_scripts/link_hints.js"></script>      <script type="text/javascript" src="../../content_scripts/vomnibar.js"></script>      <script type="text/javascript" src="../../content_scripts/scroller.js"></script> -    <script type="text/javascript" src="../../content_scripts/mode_passkeys.js"></script>      <script type="text/javascript" src="../../content_scripts/mode_insert.js"></script>      <script type="text/javascript" src="../../content_scripts/mode_find.js"></script>      <script type="text/javascript" src="../../content_scripts/mode_visual_edit.js"></script> | 
