aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md10
-rw-r--r--background_scripts/commands.coffee4
-rw-r--r--content_scripts/link_hints.coffee8
-rw-r--r--content_scripts/vimium.css2
-rw-r--r--lib/keyboard_utils.coffee25
5 files changed, 35 insertions, 14 deletions
diff --git a/README.md b/README.md
index b46885b1..12c13dcc 100644
--- a/README.md
+++ b/README.md
@@ -97,6 +97,8 @@ Additional advanced browsing commands:
gi focus the first (or n-th) text input box on the page
gu go up one level in the URL hierarchy
gU go up to root of the URL hierarchy
+ ge edit the current URL
+ gE edit the current URL and open in a new tab
zH scroll all the way left
zL scroll all the way right
v enter visual mode; use p/P to paste-and-go, use y to yank
@@ -157,6 +159,12 @@ Please see [CONTRIBUTING.md](https://github.com/philc/vimium/blob/master/CONTRIB
Release Notes
-------------
+Changes since previous release (not in the Chrome Store version)
+
+- You can now map `<backspace>` to a Vimium command (e.g. `map <backspace> goBack`).
+- Bug fixes:
+ - `<c-a-[>` is no longer handled (incorrectly) as `Escape`. This also affects `<Alt-Gr-[>`.
+
1.56 (2016-06-11)
- Vimium now works around a Chromium bug affecting users with non-standard keyboard layouts (see #2147).
@@ -383,7 +391,7 @@ Release Notes
- In link hints mode, holding down the shift key will now toggle between opening in the current tab and
opening in a new tab.
- Two new commands (`zH` and `zL`) to scroll to the left and right edges of the page.
-- A new command (`gi`) to focus the first (or n-th) text input box on the page.
+- A new command (`gi`) to focus the first (or n-th) visible text input.
- A new command (`<a-f>`) to open up multiple links at a time in new tabs.
- Frame support.
- More robust support for non-US keyboard layouts.
diff --git a/background_scripts/commands.coffee b/background_scripts/commands.coffee
index c334cf9d..f865131d 100644
--- a/background_scripts/commands.coffee
+++ b/background_scripts/commands.coffee
@@ -41,7 +41,7 @@ Commands =
# them you have to press "shift" as well.
normalizeKey: (key) ->
key.replace(/<[acm]-/ig, (match) -> match.toLowerCase())
- .replace(/<([acm]-)?([a-zA-Z0-9]{2,5})>/g, (match, optionalPrefix, keyName) ->
+ .replace(/<([acm]-)?([a-zA-Z0-9]{2,})>/g, (match, optionalPrefix, keyName) ->
"<" + (if optionalPrefix then optionalPrefix else "") + keyName.toLowerCase() + ">")
parseCustomKeyMappings: (customKeyMappings) ->
@@ -97,7 +97,7 @@ Commands =
# Keys are either literal characters, or "named" - for example <a-b> (alt+b), <left> (left arrow) or <f12>
# This regular expression captures two groups: the first is a named key, the second is the remainder of
# the string.
- namedKeyRegex = /^(<(?:[amc]-.|(?:[amc]-)?[a-z0-9]{2,5})>)(.*)$/
+ namedKeyRegex = /^(<(?:[amc]-.|(?:[amc]-)?[a-z0-9]{2,})>)(.*)$/
keyStateMapping = {}
for own keys, registryEntry of @keyToCommandRegistry
currentMapping = keyStateMapping
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index 0f2425c3..2548abb3 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -326,6 +326,8 @@ class LinkHintsMode
else if localHintDescriptor.reason == "Scroll."
# Tell the scroller that this is the activated element.
handlerStack.bubbleEvent "DOMActivate", target: clickEl
+ else if localHintDescriptor.reason == "Open."
+ clickEl.open = !clickEl.open
else if DomUtils.isSelectable clickEl
window.focus()
DomUtils.simulateSelect clickEl
@@ -621,7 +623,8 @@ LocalHints =
when "button", "select"
isClickable ||= not element.disabled
when "label"
- isClickable ||= element.control? and (@getVisibleClickable element.control).length == 0
+ isClickable ||= element.control? and not element.control.disabled and
+ (@getVisibleClickable element.control).length == 0
when "body"
isClickable ||=
if element == document.body and not windowIsFocused() and
@@ -637,6 +640,9 @@ LocalHints =
isClickable ||=
if element.clientHeight < element.scrollHeight and Scroller.isScrollableElement element
reason = "Scroll."
+ when "details"
+ isClickable = true
+ reason = "Open."
# An element with a class name containing the text "button" might be clickable. However, real clickables
# are often wrapped in elements with such class names. So, when we find clickables based only on their
diff --git a/content_scripts/vimium.css b/content_scripts/vimium.css
index ece35ddc..be9d4a65 100644
--- a/content_scripts/vimium.css
+++ b/content_scripts/vimium.css
@@ -88,7 +88,7 @@ div.internalVimiumHintMarker {
div.internalVimiumHintMarker span {
color: #302505;
- font-family: Helvetica, Arial, sans-serif !important;
+ font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 11px;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6);
diff --git a/lib/keyboard_utils.coffee b/lib/keyboard_utils.coffee
index f997b455..dabf864d 100644
--- a/lib/keyboard_utils.coffee
+++ b/lib/keyboard_utils.coffee
@@ -4,7 +4,7 @@ KeyboardUtils =
f12: 123, tab: 9, downArrow: 40, upArrow: 38 }
keyNames:
- { 37: "left", 38: "up", 39: "right", 40: "down", 32: "space" }
+ { 37: "left", 38: "up", 39: "right", 40: "down", 32: "space", 8: "backspace" }
# This is a mapping of the incorrect keyIdentifiers generated by Webkit on Windows during keydown events to
# the correct identifiers, which are correctly generated on Mac. We require this mapping to properly handle
@@ -53,15 +53,21 @@ KeyboardUtils =
""
getKeyCharUsingKeyIdentifier: (event) ->
- # Not a letter
- if (event.keyIdentifier.slice(0, 2) != "U+")
- return @keyNames[event.keyCode] if (@keyNames[event.keyCode])
- # F-key
- if (event.keyCode >= @keyCodes.f1 && event.keyCode <= @keyCodes.f12)
- return "f" + (1 + event.keyCode - keyCodes.f1)
- return ""
+ # Handle named keys.
+ keyCode = event.keyCode
+ if keyCode
+ if keyCode of @keyNames
+ return @keyNames[keyCode]
+ # Function keys.
+ if @keyCodes.f1 <= keyCode <= @keyCodes.f12
+ return "f" + (1 + keyCode - keyCodes.f1)
keyIdentifier = event.keyIdentifier
+
+ # Not a letter.
+ if not keyIdentifier.startsWith "U+"
+ return ""
+
# On Windows, the keyIdentifiers for non-letter keys are incorrect. See
# https://bugs.webkit.org/show_bug.cgi?id=19906 for more details.
if ((@platform == "Windows" || @platform == "Linux") && @keyIdentifierCorrectionMap[keyIdentifier])
@@ -75,7 +81,8 @@ KeyboardUtils =
isEscape: (event) ->
# c-[ is mapped to ESC in Vim by default.
- (event.keyCode == @keyCodes.ESC) || (event.ctrlKey && @getKeyChar(event) == '[' and not event.metaKey)
+ (event.keyCode == @keyCodes.ESC) ||
+ (event.ctrlKey && @getKeyChar(event) == '[' and not event.metaKey and not event.altKey)
# 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.