From daa357f1a753fd4c17427f68e0f0c3338e9d668b Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Tue, 9 Feb 2016 16:51:20 +0000 Subject: PassNextKey; initial implementation. This implements a passNextKey command (initially for normal mode only), as discussed in #1955. --- background_scripts/commands.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'background_scripts') diff --git a/background_scripts/commands.coffee b/background_scripts/commands.coffee index db8cc60f..07f3640a 100644 --- a/background_scripts/commands.coffee +++ b/background_scripts/commands.coffee @@ -96,6 +96,7 @@ Commands = "goUp", "goToRoot", "enterInsertMode", + "passNextKey", "enterVisualMode", "enterVisualLineMode", "focusInput", @@ -164,7 +165,8 @@ Commands = "moveTabRight", "closeTabsOnLeft", "closeTabsOnRight", - "closeOtherTabs"] + "closeOtherTabs", + "passNextKey"] defaultKeyMappings = "?": "showHelp" @@ -277,6 +279,7 @@ commandDescriptions = openCopiedUrlInNewTab: ["Open the clipboard's URL in a new tab", { background: true, repeatLimit: 20 }] enterInsertMode: ["Enter insert mode", { noRepeat: true }] + passNextKey: ["Pass the next key to Chrome", { passCountToFunction: true }] enterVisualMode: ["Enter visual mode", { noRepeat: true }] enterVisualLineMode: ["Enter visual line mode", { noRepeat: true }] -- cgit v1.2.3 From dcc5427b4b3c4a9440675c8443b31dc98fb62fdd Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Wed, 10 Feb 2016 09:47:38 +0000 Subject: PassNextKey; store key mapping in settings. We need the key mapped to passNextKey in the front end so that we can activate pass-next-key from within insert mode too (without the need to consult the background page). --- background_scripts/commands.coffee | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'background_scripts') diff --git a/background_scripts/commands.coffee b/background_scripts/commands.coffee index 07f3640a..b9a2ef72 100644 --- a/background_scripts/commands.coffee +++ b/background_scripts/commands.coffee @@ -67,6 +67,17 @@ Commands = when "unmapAll" @keyToCommandRegistry = {} + # Push the mapping for passNextKey into Settings so that it's available in the front end for insert mode. + passNextKeyKey = null + for own key of @keyToCommandRegistry + if @keyToCommandRegistry[key].command == "passNextKey" + passNextKeyKey = key + break + if passNextKeyKey + Settings.set "passNextKeyKey", passNextKeyKey + else + Settings.clear "passNextKeyKey" + clearKeyMappingsAndSetDefaults: -> @keyToCommandRegistry = {} @mapKeyToCommand { key, command } for own key, command of defaultKeyMappings -- cgit v1.2.3 From 201b51e1690bb993aa25a1c11f59afda6eab8747 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Wed, 10 Feb 2016 13:52:43 +0000 Subject: PassNextKey; allow multiple mappings. This allows: map a passNextKey map b passNextKey (Previously, we only picked up the first mapping.) --- background_scripts/commands.coffee | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'background_scripts') diff --git a/background_scripts/commands.coffee b/background_scripts/commands.coffee index b9a2ef72..7367e696 100644 --- a/background_scripts/commands.coffee +++ b/background_scripts/commands.coffee @@ -67,16 +67,10 @@ Commands = when "unmapAll" @keyToCommandRegistry = {} - # Push the mapping for passNextKey into Settings so that it's available in the front end for insert mode. - passNextKeyKey = null - for own key of @keyToCommandRegistry - if @keyToCommandRegistry[key].command == "passNextKey" - passNextKeyKey = key - break - if passNextKeyKey - Settings.set "passNextKeyKey", passNextKeyKey - else - Settings.clear "passNextKeyKey" + # Push the key mapping for passNextKey into Settings so that it's available in the front end for insert + # mode. + Settings.set "passNextKeyKeys", + (key for own key of @keyToCommandRegistry when @keyToCommandRegistry[key].command == "passNextKey") clearKeyMappingsAndSetDefaults: -> @keyToCommandRegistry = {} -- cgit v1.2.3 From 38509ce26afd1df7288255bfbcae1705f7bf9d86 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Fri, 12 Feb 2016 07:43:55 +0000 Subject: PassNextKey; exclude single-character mappings. Consider: map q passNextKey This works fine in normal mode. However, in insert mode, when the user types "q" they expect "q" to be input. Any other behaviour would be pretty weird. Here, we filter out such mappings before the front end sees them. So, with: map q passNextKey map passNextKey both mappings work in normal mode, but only the second works in insert mode. This is probably the behaviour likely to cause least user confusion. --- background_scripts/commands.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'background_scripts') diff --git a/background_scripts/commands.coffee b/background_scripts/commands.coffee index 7367e696..80ca0f96 100644 --- a/background_scripts/commands.coffee +++ b/background_scripts/commands.coffee @@ -68,9 +68,11 @@ Commands = @keyToCommandRegistry = {} # Push the key mapping for passNextKey into Settings so that it's available in the front end for insert + # mode. We exclude single-key mappings (that is, printable keys) because when users press printable keys + # in insert mode they expect the character to be input, not to be droppped into some special Vimium # mode. Settings.set "passNextKeyKeys", - (key for own key of @keyToCommandRegistry when @keyToCommandRegistry[key].command == "passNextKey") + (key for own key of @keyToCommandRegistry when @keyToCommandRegistry[key].command == "passNextKey" and 1 < key.length) clearKeyMappingsAndSetDefaults: -> @keyToCommandRegistry = {} -- cgit v1.2.3