aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2016-02-01 06:27:37 +0000
committerStephen Blott2016-02-01 06:27:37 +0000
commitfc9ac71d78ecfb2dd33baa649e8971a98518f943 (patch)
tree345ec0a8d72cfa6891c221824e01a37143817cf9
parent8fdc87e4079975cf2a31fc4b60afb897262c525c (diff)
parentb5cb14171b3dbd48ebb213654f2758781d7f127c (diff)
downloadvimium-fc9ac71d78ecfb2dd33baa649e8971a98518f943.tar.bz2
Merge pull request #1963 from smblott-github/link-hints-with-count
Link hints with count
-rw-r--r--background_scripts/commands.coffee12
-rw-r--r--content_scripts/link_hints.coffee30
-rw-r--r--content_scripts/mode.coffee4
3 files changed, 28 insertions, 18 deletions
diff --git a/background_scripts/commands.coffee b/background_scripts/commands.coffee
index a307f23f..d42fd9fb 100644
--- a/background_scripts/commands.coffee
+++ b/background_scripts/commands.coffee
@@ -270,7 +270,7 @@ commandDescriptions =
toggleViewSource: ["View page source", { noRepeat: true }]
copyCurrentUrl: ["Copy the current URL to the clipboard", { noRepeat: true }]
- "LinkHints.activateModeToCopyLinkUrl": ["Copy a link URL to the clipboard", { noRepeat: true }]
+ "LinkHints.activateModeToCopyLinkUrl": ["Copy a link URL to the clipboard", { passCountToFunction: true }]
openCopiedUrlInCurrentTab: ["Open the clipboard's URL in the current tab", { background: true }]
openCopiedUrlInNewTab: ["Open the clipboard's URL in a new tab", { background: true, repeatLimit: 20 }]
@@ -281,12 +281,12 @@ commandDescriptions =
focusInput: ["Focus the first text box on the page. Cycle between them using tab",
{ passCountToFunction: true }]
- "LinkHints.activateMode": ["Open a link in the current tab", { noRepeat: true }]
- "LinkHints.activateModeToOpenInNewTab": ["Open a link in a new tab", { noRepeat: true }]
- "LinkHints.activateModeToOpenInNewForegroundTab": ["Open a link in a new tab & switch to it", { noRepeat: true }]
+ "LinkHints.activateMode": ["Open a link in the current tab", { passCountToFunction: true }]
+ "LinkHints.activateModeToOpenInNewTab": ["Open a link in a new tab", { passCountToFunction: true }]
+ "LinkHints.activateModeToOpenInNewForegroundTab": ["Open a link in a new tab & switch to it", { passCountToFunction: true }]
"LinkHints.activateModeWithQueue": ["Open multiple links in a new tab", { noRepeat: true }]
- "LinkHints.activateModeToOpenIncognito": ["Open a link in incognito window", { noRepeat: true }]
- "LinkHints.activateModeToDownloadLink": ["Download link url", { noRepeat: true }]
+ "LinkHints.activateModeToOpenIncognito": ["Open a link in incognito window", { passCountToFunction: true }]
+ "LinkHints.activateModeToDownloadLink": ["Download link url", { passCountToFunction: true }]
enterFindMode: ["Enter find mode", { noRepeat: true }]
performFind: ["Cycle forward to the next find match"]
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 54476935..6f95ac57 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -19,14 +19,21 @@ OPEN_INCOGNITO = name: "incognito"
DOWNLOAD_LINK_URL = name: "download"
LinkHints =
- activateMode: (mode = OPEN_IN_CURRENT_TAB) -> new LinkHintsMode mode
-
- activateModeToOpenInNewTab: -> @activateMode OPEN_IN_NEW_BG_TAB
- activateModeToOpenInNewForegroundTab: -> @activateMode OPEN_IN_NEW_FG_TAB
- activateModeToCopyLinkUrl: -> @activateMode COPY_LINK_URL
- activateModeWithQueue: -> @activateMode OPEN_WITH_QUEUE
- activateModeToOpenIncognito: -> @activateMode OPEN_INCOGNITO
- activateModeToDownloadLink: -> @activateMode DOWNLOAD_LINK_URL
+ activateMode: (count = 1, mode = OPEN_IN_CURRENT_TAB) ->
+ if 0 < count
+ new LinkHintsMode mode, (event = null) ->
+ # This is called which LinkHintsMode exits. Escape and Backspace are the two ways in which hints mode
+ # can exit following which we do not restart hints mode.
+ return if event?.type == "keydown" and KeyboardUtils.isEscape event
+ return if event?.type == "keydown" and event.keyCode in [ keyCodes.backspace, keyCodes.deleteKey ]
+ LinkHints.activateMode count-1, mode
+
+ activateModeToOpenInNewTab: (count) -> @activateMode count, OPEN_IN_NEW_BG_TAB
+ activateModeToOpenInNewForegroundTab: (count) -> @activateMode count, OPEN_IN_NEW_FG_TAB
+ activateModeToCopyLinkUrl: (count) -> @activateMode count, COPY_LINK_URL
+ activateModeWithQueue: -> @activateMode 1, OPEN_WITH_QUEUE
+ activateModeToOpenIncognito: (count) -> @activateMode count, OPEN_INCOGNITO
+ activateModeToDownloadLink: (count) -> @activateMode count, DOWNLOAD_LINK_URL
class LinkHintsMode
hintMarkerContainingDiv: null
@@ -43,7 +50,7 @@ class LinkHintsMode
# A count of the number of Tab presses since the last non-Tab keyboard event.
tabCount: 0
- constructor: (mode = OPEN_IN_CURRENT_TAB) ->
+ constructor: (mode = OPEN_IN_CURRENT_TAB, onExit = (->)) ->
# we need documentElement to be ready in order to append links
return unless document.documentElement
@isActive = true
@@ -80,6 +87,7 @@ class LinkHintsMode
@hintMode.onExit =>
@deactivateMode() if @isActive
+ @hintMode.onExit onExit
@setOpenLinkMode mode
@@ -323,7 +331,9 @@ class LinkHintsMode
if @markerMatcher.popKeyChar()
@updateVisibleMarkers hintMarkers
else
- @deactivateMode()
+ # Exit via @hintMode.exit(), so that the LinkHints.activate() "onExit" callback sees the key event and
+ # knows not to restart hints mode.
+ @hintMode.exit event
else if event.keyCode == keyCodes.enter
# Activate the active hint, if there is one. Only FilterHints uses an active hint.
diff --git a/content_scripts/mode.coffee b/content_scripts/mode.coffee
index c7c6bd55..5cc8800e 100644
--- a/content_scripts/mode.coffee
+++ b/content_scripts/mode.coffee
@@ -187,12 +187,12 @@ class Mode
onExit: (handler) ->
@exitHandlers.push handler
- exit: ->
+ exit: (args...) ->
if @modeIsActive
@log "deactivate:", @id
unless @modeIsExiting
@modeIsExiting = true
- handler() for handler in @exitHandlers
+ handler args... for handler in @exitHandlers
handlerStack.remove handlerId for handlerId in @handlers
Mode.modes = Mode.modes.filter (mode) => mode != @
@modeIsActive = false