From d471f3aed1646646b7a8802944314170b4b20eed Mon Sep 17 00:00:00 2001 From: Anton Strömkvist Date: Thu, 5 Oct 2017 17:25:18 +0200 Subject: Allow using capital letters as link hint characters --- content_scripts/link_hints.coffee | 16 ++++++++++++---- pages/options.html | 6 +++--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index eeadfc0c..403a4481 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -239,8 +239,11 @@ class LinkHintsMode # NOTE(smblott) As of 1.54, the Ctrl modifier doesn't work for filtered link hints; therefore we only # offer the control modifier for alphabet hints. It is not clear whether we should fix this. As of # 16-03-28, nobody has complained. - modifiers = ["Shift"] - modifiers.push "Control" unless Settings.get "filterLinkHints" + modifiers = + if Settings.get "filterLinkHints" + [] + else + ["Control", "Shift"] if event.key in modifiers and @mode in [ OPEN_IN_CURRENT_TAB, OPEN_WITH_QUEUE, OPEN_IN_NEW_BG_TAB, OPEN_IN_NEW_FG_TAB ] @@ -288,8 +291,13 @@ class LinkHintsMode else @tabCount = previousTabCount if event.ctrlKey or event.metaKey or event.altKey + keyChar = + if Settings.get "filterLinkHints" + KeyboardUtils.getKeyChar(event) + else + KeyboardUtils.getKeyChar(event).toLowerCase() unless event.repeat - if keyChar = KeyboardUtils.getKeyChar(event).toLowerCase() + if keyChar keyChar = " " if keyChar == "space" if keyChar.length == 1 @markerMatcher.pushKeyChar keyChar @@ -473,7 +481,7 @@ class AlphabetHints # For alphabet hints, always rotates the hints, regardless of modifiers. shouldRotateHints: -> true -# Use numbers (usually) for hints, and also filter links by their text. +# Use characters for hints, and also filter links by their text. class FilterHints constructor: -> @linkHintNumbers = Settings.get "linkHintNumbers" diff --git a/pages/options.html b/pages/options.html index 412e17df..46307b6f 100644 --- a/pages/options.html +++ b/pages/options.html @@ -115,11 +115,11 @@ b: http://b.com/?q=%s description - Numbers used
for link hints + Characters used
for link hints
- The numbers placed next to each link after typing "f" to enter link-hint mode. + The characters placed next to each link after typing "f" to enter link-hint mode.
@@ -145,7 +145,7 @@ b: http://b.com/?q=%s description -- cgit v1.2.3 From bc8df497670658fdafa26660ee09987cf9d969ae Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 7 Oct 2017 12:10:45 +0100 Subject: Tweak #2701 (hint characters for filtered hints). Some tweaks to #2701 from @ahstro. 1. Simplify the logic for calculating `modifiers`. 2. Revert the ordering of the `event.repeat` test and `keyChar` assignment. 3. Link hint characters *only* match in upper case. 4. If there are link-hint characters (non numbers), then shifted characters are only ever hints. 5. Otherwise, revert to doing all hint text comparison in lower case. --- content_scripts/link_hints.coffee | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee index 403a4481..d9ce5d06 100644 --- a/content_scripts/link_hints.coffee +++ b/content_scripts/link_hints.coffee @@ -236,16 +236,8 @@ class LinkHintsMode previousTabCount = @tabCount @tabCount = 0 - # NOTE(smblott) As of 1.54, the Ctrl modifier doesn't work for filtered link hints; therefore we only - # offer the control modifier for alphabet hints. It is not clear whether we should fix this. As of - # 16-03-28, nobody has complained. - modifiers = - if Settings.get "filterLinkHints" - [] - else - ["Control", "Shift"] - - if event.key in modifiers and + # NOTE(smblott) The modifier behaviour here applies only to alphabet hints. + if event.key in ["Control", "Shift"] and not Settings.get("filterLinkHints") and @mode in [ OPEN_IN_CURRENT_TAB, OPEN_WITH_QUEUE, OPEN_IN_NEW_BG_TAB, OPEN_IN_NEW_FG_TAB ] @tabCount = previousTabCount # Toggle whether to open the link in a new or current tab. @@ -291,12 +283,12 @@ class LinkHintsMode else @tabCount = previousTabCount if event.ctrlKey or event.metaKey or event.altKey - keyChar = - if Settings.get "filterLinkHints" - KeyboardUtils.getKeyChar(event) - else - KeyboardUtils.getKeyChar(event).toLowerCase() unless event.repeat + keyChar = + if Settings.get "filterLinkHints" + KeyboardUtils.getKeyChar(event) + else + KeyboardUtils.getKeyChar(event).toLowerCase() if keyChar keyChar = " " if keyChar == "space" if keyChar.length == 1 @@ -484,7 +476,7 @@ class AlphabetHints # Use characters for hints, and also filter links by their text. class FilterHints constructor: -> - @linkHintNumbers = Settings.get "linkHintNumbers" + @linkHintNumbers = Settings.get("linkHintNumbers").toUpperCase() @hintKeystrokeQueue = [] @linkTextKeystrokeQueue = [] @activeHintMarker = null @@ -534,11 +526,15 @@ class FilterHints pushKeyChar: (keyChar) -> if 0 <= @linkHintNumbers.indexOf keyChar @hintKeystrokeQueue.push keyChar + else if keyChar.toLowerCase() != keyChar and @linkHintNumbers.toLowerCase() != @linkHintNumbers.toUpperCase() + # The the keyChar is upper case and the link hint "numbers" contain characters (e.g. [a-zA-Z]). We don't want + # some upper-case letters matching hints (above) and some matching text (below), so we ignore such keys. + return # We only accept and characters which are not used for splitting (e.g. "a", "b", etc., but not "-"). else if keyChar == " " or not @splitRegexp.test keyChar # Since we might renumber the hints, we should reset the current hintKeyStrokeQueue. @hintKeystrokeQueue = [] - @linkTextKeystrokeQueue.push keyChar + @linkTextKeystrokeQueue.push keyChar.toLowerCase() popKeyChar: -> @hintKeystrokeQueue.pop() or @linkTextKeystrokeQueue.pop() -- cgit v1.2.3