aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Blott2016-04-13 06:50:43 +0100
committerStephen Blott2016-04-13 06:50:43 +0100
commit72ff4204655b8e87f7bdfbe8c9974376fbbc15a6 (patch)
tree0cf92a9f1484666294b7a329919e598efac6e5cc
parentf144c7c9d3f141636ce6a3856db3abf08a4fc063 (diff)
downloadvimium-72ff4204655b8e87f7bdfbe8c9974376fbbc15a6.tar.bz2
Add <c-y> and <c-e> for visual mode.
Fixes #2092.
-rw-r--r--content_scripts/mode_visual.coffee8
-rw-r--r--content_scripts/scroller.coffee4
-rw-r--r--lib/handler_stack.coffee23
3 files changed, 20 insertions, 15 deletions
diff --git a/content_scripts/mode_visual.coffee b/content_scripts/mode_visual.coffee
index 8c1fb5a4..97ad5ca6 100644
--- a/content_scripts/mode_visual.coffee
+++ b/content_scripts/mode_visual.coffee
@@ -223,8 +223,12 @@ class VisualMode extends KeyHandlerMode
keyMapping[keys[0]] ?= {}
extend keyMapping[keys[0]], "#{keys[1]}": command: movement
- # Aliases.
- extend keyMapping, "B": keyMapping.b, "W": keyMapping.w
+ # Aliases and complex bindings.
+ extend keyMapping,
+ "B": keyMapping.b
+ "W": keyMapping.w
+ "<c-e>": command: (count) -> Scroller.scrollBy "y", count * Settings.get("scrollStepSize"), 1, false
+ "<c-y>": command: (count) -> Scroller.scrollBy "y", -count * Settings.get("scrollStepSize"), 1, false
super extend options,
name: options.name ? "visual"
diff --git a/content_scripts/scroller.coffee b/content_scripts/scroller.coffee
index 6965f706..56b9a6c6 100644
--- a/content_scripts/scroller.coffee
+++ b/content_scripts/scroller.coffee
@@ -232,7 +232,7 @@ Scroller =
# scroll the active element in :direction by :amount * :factor.
# :factor is needed because :amount can take on string values, which scrollBy converts to element dimensions.
- scrollBy: (direction, amount, factor = 1) ->
+ scrollBy: (direction, amount, factor = 1, continuous = true) ->
# if this is called before domReady, just use the window scroll function
if (!document.body and amount instanceof Number)
if (direction == "x")
@@ -249,7 +249,7 @@ Scroller =
unless CoreScroller.wouldNotInitiateScroll()
element = findScrollableElement activatedElement, direction, amount, factor
elementAmount = factor * getDimension element, direction, amount
- CoreScroller.scroll element, direction, elementAmount
+ CoreScroller.scroll element, direction, elementAmount, continuous
scrollTo: (direction, pos) ->
activatedElement ||= (document.body and firstScrollableElement()) or document.body
diff --git a/lib/handler_stack.coffee b/lib/handler_stack.coffee
index c17be24f..806b707f 100644
--- a/lib/handler_stack.coffee
+++ b/lib/handler_stack.coffee
@@ -93,20 +93,21 @@ class HandlerStack
@continueBubbling
alwaysSuppressPropagation: (handler = null) ->
- handler?()
- @suppressPropagation
+ if handler?() == @suppressEvent then @suppressEvent else @suppressPropagation
# Debugging.
logResult: (eventNumber, type, event, handler, result) ->
- label =
- switch result
- when @passEventToPage then "passEventToPage"
- when @suppressPropagation then "suppressPropagation"
- when @restartBubbling then "restartBubbling"
- when "skip" then "skip"
- when true then "continue"
- label ||= if result then "continue/truthy" else "suppress"
- console.log "#{eventNumber}", type, handler._name, label
+ if event?.type == "keydown" # Tweak this as needed.
+ label =
+ switch result
+ when @passEventToPage then "passEventToPage"
+ when @suppressEvent then "suppressEvent"
+ when @suppressPropagation then "suppressPropagation"
+ when @restartBubbling then "restartBubbling"
+ when "skip" then "skip"
+ when true then "continue"
+ label ||= if result then "continue/truthy" else "suppress"
+ console.log "#{eventNumber}", type, handler._name, label
show: ->
console.log "#{@eventNumber}:"