aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content_scripts/vimium_frontend.coffee1
-rw-r--r--content_scripts/vomnibar.coffee30
-rw-r--r--lib/utils.coffee10
-rw-r--r--tests/dom_tests/vomnibar_test.coffee1
4 files changed, 27 insertions, 15 deletions
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index 8c6dd374..005412e5 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -62,6 +62,7 @@ settings =
helpDialog_showAdvancedCommands: null
smoothScroll: null
grabBackFocus: null
+ searchEngines: null
init: ->
@port = chrome.runtime.connect name: "settings"
diff --git a/content_scripts/vomnibar.coffee b/content_scripts/vomnibar.coffee
index d46b2daf..06b546a6 100644
--- a/content_scripts/vomnibar.coffee
+++ b/content_scripts/vomnibar.coffee
@@ -4,21 +4,35 @@
Vomnibar =
vomnibarUI: null
- getOptions: (registryEntry = { extras: [] }) ->
- extras = {}
- for extra in registryEntry.extras
- [ key, value ] = extra.split "="
- extras.keyword = value if key? and key == "keyword" and value? and 0 < value.length
- extras
+ # Parse any additional options from the command's registry entry. Currently, this only includes a flag of
+ # the form "keyword=X", for direct activation of a custom search engine.
+ parseRegistryEntry: (registryEntry = { extras: [] }, callback = null) ->
+ options = {}
+ searchEngines = settings.get("searchEngines") ? ""
+ SearchEngines.refreshAndUse searchEngines, (engines) ->
+ for extra in registryEntry.extras
+ [ key, value ] = extra.split "="
+ switch key
+ when "keyword"
+ if value? and engines[value]?
+ options.keyword = value
+ else
+ console.log "Vimium configuration error: no such custom search engine: #{extra}."
+ else
+ console.log "Vimium configuration error: unused flag: #{extra}."
+
+ callback? options
# sourceFrameId here (and below) is the ID of the frame from which this request originates, which may be different
# from the current frame.
activate: (sourceFrameId, registryEntry) ->
- @open sourceFrameId, extend @getOptions(registryEntry), completer:"omni"
+ @parseRegistryEntry registryEntry, (options) =>
+ @open sourceFrameId, extend options, completer:"omni"
activateInNewTab: (sourceFrameId, registryEntry) ->
- @open sourceFrameId, extend @getOptions(registryEntry), completer: "omni", newTab: true
+ @parseRegistryEntry registryEntry, (options) =>
+ @open sourceFrameId, extend options, completer:"omni", newTab: true
activateTabSelection: (sourceFrameId) -> @open sourceFrameId, {
completer: "tabs"
diff --git a/lib/utils.coffee b/lib/utils.coffee
index cb7b4d5c..77e2b68d 100644
--- a/lib/utils.coffee
+++ b/lib/utils.coffee
@@ -245,14 +245,10 @@ SearchEngines =
tokens = line.split /\s+/
continue unless 2 <= tokens.length
keyword = tokens[0].split(":")[0]
- url = tokens[1]
+ searchUrl = tokens[1]
description = tokens[2..].join(" ") || "search (#{keyword})"
- continue unless Utils.hasFullUrlPrefix url
- engines[keyword] =
- keyword: keyword
- searchUrl: url
- description: description
- searchUrlPrefix: url.split("%s")[0]
+ continue unless Utils.hasFullUrlPrefix searchUrl
+ engines[keyword] = { keyword, searchUrl, description }
callback engines
diff --git a/tests/dom_tests/vomnibar_test.coffee b/tests/dom_tests/vomnibar_test.coffee
index 380175f3..3eda6234 100644
--- a/tests/dom_tests/vomnibar_test.coffee
+++ b/tests/dom_tests/vomnibar_test.coffee
@@ -1,4 +1,5 @@
vomnibarFrame = null
+SearchEngines.refresh ""
context "Keep selection within bounds",