1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#
# Used by all parts of Vimium to manipulate localStorage.
#
root = exports ? window
root.Settings = Settings =
get: (key) ->
if (key of localStorage) then JSON.parse(localStorage[key]) else @defaults[key]
set: (key, value) ->
# Don't store the value if it is equal to the default, so we can change the defaults in the future
if (value == @defaults[key])
@clear(key)
else
jsonValue = JSON.stringify value
localStorage[key] = jsonValue
Sync.set key, jsonValue
clear: (key) ->
if @has key
delete localStorage[key]
Sync.clear key
has: (key) -> key of localStorage
# For settings which require action when their value changes, add hooks here called from
# options/options.coffee (when the options page is saved), and from background_scripts/sync.coffee (when an
# update propagates from chrome.storage.sync).
postUpdateHooks:
keyMappings: (value) ->
root.Commands.clearKeyMappingsAndSetDefaults()
root.Commands.parseCustomKeyMappings value
root.refreshCompletionKeysAfterMappingSave()
exclusionRules: (value) ->
root.Exclusions.postUpdateHook value
# postUpdateHooks convenience wrapper
performPostUpdateHook: (key, value) ->
@postUpdateHooks[key] value if @postUpdateHooks[key]
# options.coffee and options.html only handle booleans and strings; therefore all defaults must be booleans
# or strings
defaults:
scrollStepSize: 60
omniSearchWeight: 0.4
smoothScroll: true
keyMappings: "# Insert your preferred key mappings here."
linkHintCharacters: "sadfjklewcmpgh"
linkHintNumbers: "0123456789"
filterLinkHints: false
hideHud: false
userDefinedLinkHintCss:
"""
div > .vimiumHintMarker {
/* linkhint boxes */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFF785),
color-stop(100%,#FFC542));
border: 1px solid #E3BE23;
}
div > .vimiumHintMarker span {
/* linkhint text */
color: black;
font-weight: bold;
font-size: 12px;
}
div > .vimiumHintMarker > .matchingCharacter {
}
"""
# Default exclusion rules.
exclusionRules:
[
# Disable Vimium on Gmail.
{ pattern: "http*://mail.google.com/*", passKeys: "" }
]
# NOTE: If a page contains both a single angle-bracket link and a double angle-bracket link, then in
# most cases the single bracket link will be "prev/next page" and the double bracket link will be
# "first/last page", so we put the single bracket first in the pattern string so that it gets searched
# for first.
# "\bprev\b,\bprevious\b,\bback\b,<,←,«,≪,<<"
previousPatterns: "prev,previous,back,<,\u2190,\xab,\u226a,<<"
# "\bnext\b,\bmore\b,>,→,»,≫,>>"
nextPatterns: "next,more,>,\u2192,\xbb,\u226b,>>"
# default/fall back search engine
searchUrl: "https://www.google.com/search?q="
# put in an example search engine
searchEngines: [
"w: http://www.wikipedia.org/w/index.php?title=Special:Search&search=%s Wikipedia"
""
"# More examples."
"#"
"# (Vimium has built-in completion for these.)"
"#"
"# g: http://www.google.com/search?q=%s Google"
"# l: http://www.google.com/search?q=%s&btnI I'm feeling lucky..."
"# y: http://www.youtube.com/results?search_query=%s Youtube"
"# b: https://www.bing.com/search?q=%s Bing"
"# d: https://duckduckgo.com/?q=%s DuckDuckGo"
"# az: http://www.amazon.com/s/?field-keywords=%s Amazon"
"#"
"# Another example (for Vimium does not have completion)."
"#"
"# m: https://www.google.com/maps/search/%s Google Maps"
].join "\n"
newTabUrl: "chrome://newtab"
grabBackFocus: false
settingsVersion: Utils.getCurrentVersion()
# We use settingsVersion to coordinate any necessary schema changes.
if Utils.compareVersions("1.42", Settings.get("settingsVersion")) != -1
Settings.set("scrollStepSize", parseFloat Settings.get("scrollStepSize"))
Settings.set("settingsVersion", Utils.getCurrentVersion())
# Migration (after 1.49, 2015/2/1).
# Legacy setting: findModeRawQuery (a string).
# New setting: findModeRawQueryList (a list of strings), now stored in chrome.storage.local (not localStorage).
chrome.storage.local.get "findModeRawQueryList", (items) ->
unless chrome.runtime.lastError or items.findModeRawQueryList
rawQuery = Settings.get "findModeRawQuery"
chrome.storage.local.set findModeRawQueryList: (if rawQuery then [ rawQuery ] else [])
|