From 9c1012ad3a731b015b8a70b58828fbcd0acb7db0 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sun, 9 Oct 2016 16:31:23 +0100 Subject: Extend key translation to include Escape. Here, these map to escape: translate x translate --- lib/keyboard_utils.coffee | 35 +++++++++++++++++++++++------------ lib/utils.coffee | 7 +++++++ 2 files changed, 30 insertions(+), 12 deletions(-) (limited to 'lib') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index f0e791d4..7f48d69e 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -79,10 +79,18 @@ KeyboardUtils = isPrimaryModifierKey: (event) -> if (@platform == "Mac") then event.metaKey else event.ctrlKey - isEscape: (event) -> - # c-[ is mapped to ESC in Vim by default. - (event.keyCode == @keyCodes.ESC) || - (event.ctrlKey && @getKeyChar(event) == '[' and not event.metaKey and not event.altKey) + isEscape: do -> + keyTranslationRegistry = {} + # NOTE: "?" here for the tests. + Utils?.monitorChromeStorage "keyTranslationRegistry", (value) => keyTranslationRegistry = value + + (event) -> + event.keyCode == @keyCodes.ESC || do => + keyChar = @getKeyChar event + keyChar.length == 1 and do => + keyChar = @getModifiedKeyChar keyChar, event + keyChar = keyTranslationRegistry[keyChar] ? keyChar + keyChar == "" # TODO. This is probably a poor way of detecting printable characters. However, it shouldn't incorrectly # identify any of chrome's own keyboard shortcuts as printable. @@ -108,16 +116,19 @@ KeyboardUtils = # Handle special keys and normal input keys with modifiers being pressed. keyChar = @getKeyChar event if 1 < keyChar.length or (keyChar.length == 1 and (event.metaKey or event.ctrlKey or event.altKey)) - modifiers = [] + @getModifiedKeyChar keyChar, event + + getModifiedKeyChar: (keyChar, event) -> + modifiers = [] - keyChar = keyChar.toUpperCase() if event.shiftKey - # These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey). - modifiers.push "a" if event.altKey - modifiers.push "c" if event.ctrlKey - modifiers.push "m" if event.metaKey + keyChar = keyChar.toUpperCase() if event.shiftKey + # These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey). + modifiers.push "a" if event.altKey + modifiers.push "c" if event.ctrlKey + modifiers.push "m" if event.metaKey - keyChar = [modifiers..., keyChar].join "-" - if 1 < keyChar.length then "<#{keyChar}>" else keyChar + keyChar = [modifiers..., keyChar].join "-" + if 1 < keyChar.length then "<#{keyChar}>" else keyChar KeyboardUtils.init() diff --git a/lib/utils.coffee b/lib/utils.coffee index c06d8ac5..5a028186 100644 --- a/lib/utils.coffee +++ b/lib/utils.coffee @@ -209,6 +209,13 @@ Utils = makeIdempotent: (func) -> (args...) -> ([previousFunc, func] = [func, null])[0]? args... + monitorChromeStorage: (key, setter) -> + # NOTE: "?" here for the tests. + chrome?.storage.local.get key, (obj) => + setter obj[key] if obj[key]? + chrome.storage.onChanged.addListener (changes, area) => + setter changes[key].newValue if changes[key]?.newValue? + # Utility for parsing and using the custom search-engine configuration. We re-use the previous parse if the # search-engine configuration is unchanged. SearchEngines = -- cgit v1.2.3 From 1df19294c544b897bf5fe52401050dd43b69129d Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sun, 9 Oct 2016 17:48:59 +0100 Subject: Tweak (simplify) #2306. --- lib/keyboard_utils.coffee | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'lib') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 7f48d69e..c8591c3c 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -86,11 +86,10 @@ KeyboardUtils = (event) -> event.keyCode == @keyCodes.ESC || do => - keyChar = @getKeyChar event - keyChar.length == 1 and do => - keyChar = @getModifiedKeyChar keyChar, event - keyChar = keyTranslationRegistry[keyChar] ? keyChar - keyChar == "" + keyChar = @getKeyCharString event, true + keyChar = keyTranslationRegistry[keyChar] ? keyChar + # is mapped to Escape in Vim by default. + keyChar == "" # TODO. This is probably a poor way of detecting printable characters. However, it shouldn't incorrectly # identify any of chrome's own keyboard shortcuts as printable. @@ -105,7 +104,7 @@ KeyboardUtils = # Return the Vimium key representation for this keyboard event. Return a falsy value (the empty string or # undefined) when no Vimium representation is appropriate. - getKeyCharString: (event) -> + getKeyCharString: (event, allKeydownEvents = false) -> switch event.type when "keypress" # Ignore modifier keys by themselves. @@ -115,20 +114,17 @@ KeyboardUtils = when "keydown" # Handle special keys and normal input keys with modifiers being pressed. keyChar = @getKeyChar event - if 1 < keyChar.length or (keyChar.length == 1 and (event.metaKey or event.ctrlKey or event.altKey)) - @getModifiedKeyChar keyChar, event - - getModifiedKeyChar: (keyChar, event) -> - modifiers = [] + if 1 < keyChar.length or (keyChar.length == 1 and (event.metaKey or event.ctrlKey or event.altKey)) or allKeydownEvents + modifiers = [] - keyChar = keyChar.toUpperCase() if event.shiftKey - # These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey). - modifiers.push "a" if event.altKey - modifiers.push "c" if event.ctrlKey - modifiers.push "m" if event.metaKey + keyChar = keyChar.toUpperCase() if event.shiftKey + # These must be in alphabetical order (to match the sorted modifier order in Commands.normalizeKey). + modifiers.push "a" if event.altKey + modifiers.push "c" if event.ctrlKey + modifiers.push "m" if event.metaKey - keyChar = [modifiers..., keyChar].join "-" - if 1 < keyChar.length then "<#{keyChar}>" else keyChar + keyChar = [modifiers..., keyChar].join "-" + if 1 < keyChar.length then "<#{keyChar}>" else keyChar KeyboardUtils.init() -- cgit v1.2.3 From c5e26d75cb8525ba34f6f54f1a1c041df66075e3 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Mon, 10 Oct 2016 13:27:32 +0100 Subject: Rename 'translate' to 'mapkey'. --- lib/keyboard_utils.coffee | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index c8591c3c..967baba8 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -80,14 +80,14 @@ KeyboardUtils = isPrimaryModifierKey: (event) -> if (@platform == "Mac") then event.metaKey else event.ctrlKey isEscape: do -> - keyTranslationRegistry = {} + mapKeyRegistry = {} # NOTE: "?" here for the tests. - Utils?.monitorChromeStorage "keyTranslationRegistry", (value) => keyTranslationRegistry = value + Utils?.monitorChromeStorage "mapKeyRegistry", (value) => mapKeyRegistry = value (event) -> event.keyCode == @keyCodes.ESC || do => keyChar = @getKeyCharString event, true - keyChar = keyTranslationRegistry[keyChar] ? keyChar + keyChar = mapKeyRegistry[keyChar] ? keyChar # is mapped to Escape in Vim by default. keyChar == "" -- cgit v1.2.3 From 0346b2d971ffab26a8d37946aca1c550b316e317 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Mon, 10 Oct 2016 13:54:12 +0100 Subject: Add TODO. --- lib/keyboard_utils.coffee | 1 + 1 file changed, 1 insertion(+) (limited to 'lib') diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee index 967baba8..c49fb3f4 100644 --- a/lib/keyboard_utils.coffee +++ b/lib/keyboard_utils.coffee @@ -84,6 +84,7 @@ KeyboardUtils = # NOTE: "?" here for the tests. Utils?.monitorChromeStorage "mapKeyRegistry", (value) => mapKeyRegistry = value + # TODO(smblott) Change this to use event.key. (event) -> event.keyCode == @keyCodes.ESC || do => keyChar = @getKeyCharString event, true -- cgit v1.2.3