aboutsummaryrefslogtreecommitdiffstats
path: root/content_scripts
diff options
context:
space:
mode:
authorStephen Blott2016-10-09 15:20:15 +0100
committerStephen Blott2016-10-09 15:20:15 +0100
commit6596e30392a1ca053223825eda5cde060394a4aa (patch)
treed4320196e034dfa848852a2fe0762a0616d1a225 /content_scripts
parent801dd4ea5edfff8b22c3c8c875808ee33e96571e (diff)
downloadvimium-6596e30392a1ca053223825eda5cde060394a4aa.tar.bz2
Add translate command for key mappings.
Under *Custom key mappings* (on the options page), this implements: translate x y Whenever the users types `x` in normal mode or in visual mode, the `x` is replaced by `y`. For example: map รง l (which apparently would be helpful on Brazilian keyboards). Issues: - Do we want yet another hack like this? This would be documented only on the wiki. - If we allowed `translate <c-c> <c-[>` (and extended `isEscape()` to use the translation), then we'd get the `exitMode` command for free (#2253). - Alternatively, instead of adding a new "command" called `translate`, we could overload the existing `map` command. Since these are single-key mappings, there's no ambiguity. (Although, I guess there's a risk some user has junk in their key mappings and would be taken by surprise). Inspired by isssue posted by @vhoyer (#2305). Fixes #2305.
Diffstat (limited to 'content_scripts')
-rw-r--r--content_scripts/mode_key_handler.coffee9
1 files changed, 9 insertions, 0 deletions
diff --git a/content_scripts/mode_key_handler.coffee b/content_scripts/mode_key_handler.coffee
index 8c0ae4b8..7904d801 100644
--- a/content_scripts/mode_key_handler.coffee
+++ b/content_scripts/mode_key_handler.coffee
@@ -33,8 +33,16 @@ class KeyHandlerMode extends Mode
# We cannot track keyup events if we lose the focus.
blur: (event) => @alwaysContinueBubbling => @keydownEvents = {} if event.target == window
+ @keyTranslationRegistry = {}
+ chrome.storage.local.get "keyTranslationRegistry", (obj) =>
+ @keyTranslationRegistry = obj.keyTranslationRegistry
+ chrome.storage.onChanged.addListener (changes, area) =>
+ if area == "local" and changes.keyTranslationRegistry?.newValue?
+ @keyTranslationRegistry = changes.keyTranslationRegistry.newValue
+
onKeydown: (event) ->
keyChar = KeyboardUtils.getKeyCharString event
+ keyChar = @keyTranslationRegistry[keyChar] ? keyChar
isEscape = KeyboardUtils.isEscape event
if isEscape and (@countPrefix != 0 or @keyState.length != 1)
@keydownEvents[event.keyCode] = true
@@ -61,6 +69,7 @@ class KeyHandlerMode extends Mode
onKeypress: (event) ->
keyChar = KeyboardUtils.getKeyCharString event
+ keyChar = @keyTranslationRegistry[keyChar] ? keyChar
if @isMappedKey keyChar
@handleKeyChar keyChar
else if @isCountKey keyChar