aboutsummaryrefslogtreecommitdiff
path: root/src/shared/settings/Settings.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/settings/Settings.ts')
-rw-r--r--src/shared/settings/Settings.ts154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/shared/settings/Settings.ts b/src/shared/settings/Settings.ts
new file mode 100644
index 0000000..116c7d7
--- /dev/null
+++ b/src/shared/settings/Settings.ts
@@ -0,0 +1,154 @@
+import Keymaps, { KeymapsJSON } from './Keymaps';
+import Search, { SearchJSON } from './Search';
+import Properties, { PropertiesJSON } from './Properties';
+import Blacklist, { BlacklistJSON } from './Blacklist';
+
+export type SettingsJSON = {
+ keymaps: KeymapsJSON,
+ search: SearchJSON,
+ properties: PropertiesJSON,
+ blacklist: BlacklistJSON,
+};
+
+export default class Settings {
+ public keymaps: Keymaps;
+
+ public search: Search;
+
+ public properties: Properties;
+
+ public blacklist: Blacklist;
+
+ constructor({
+ keymaps,
+ search,
+ properties,
+ blacklist,
+ }: {
+ keymaps: Keymaps;
+ search: Search;
+ properties: Properties;
+ blacklist: Blacklist;
+ }) {
+ this.keymaps = keymaps;
+ this.search = search;
+ this.properties = properties;
+ this.blacklist = blacklist;
+ }
+
+ static fromJSON(json: any): Settings {
+ let settings = { ...DefaultSetting };
+ for (let key of Object.keys(json)) {
+ switch (key) {
+ case 'keymaps':
+ settings.keymaps = Keymaps.fromJSON(json.keymaps);
+ break;
+ case 'search':
+ settings.search = Search.fromJSON(json.search);
+ break;
+ case 'properties':
+ settings.properties = Properties.fromJSON(json.properties);
+ break;
+ case 'blacklist':
+ settings.blacklist = Blacklist.fromJSON(json.blacklist);
+ break;
+ default:
+ throw new TypeError('unknown setting: ' + key);
+ }
+ }
+ return new Settings(settings);
+ }
+
+ toJSON(): SettingsJSON {
+ return {
+ keymaps: this.keymaps.toJSON(),
+ search: this.search.toJSON(),
+ properties: this.properties.toJSON(),
+ blacklist: this.blacklist.toJSON(),
+ };
+ }
+}
+
+export const DefaultSetting: Settings = Settings.fromJSON({
+ keymaps: {
+ '0': { 'type': 'scroll.home' },
+ ':': { 'type': 'command.show' },
+ 'o': { 'type': 'command.show.open', 'alter': false },
+ 'O': { 'type': 'command.show.open', 'alter': true },
+ 't': { 'type': 'command.show.tabopen', 'alter': false },
+ 'T': { 'type': 'command.show.tabopen', 'alter': true },
+ 'w': { 'type': 'command.show.winopen', 'alter': false },
+ 'W': { 'type': 'command.show.winopen', 'alter': true },
+ 'b': { 'type': 'command.show.buffer' },
+ 'a': { 'type': 'command.show.addbookmark', 'alter': true },
+ 'k': { 'type': 'scroll.vertically', 'count': -1 },
+ 'j': { 'type': 'scroll.vertically', 'count': 1 },
+ 'h': { 'type': 'scroll.horizonally', 'count': -1 },
+ 'l': { 'type': 'scroll.horizonally', 'count': 1 },
+ '<C-U>': { 'type': 'scroll.pages', 'count': -0.5 },
+ '<C-D>': { 'type': 'scroll.pages', 'count': 0.5 },
+ '<C-B>': { 'type': 'scroll.pages', 'count': -1 },
+ '<C-F>': { 'type': 'scroll.pages', 'count': 1 },
+ 'gg': { 'type': 'scroll.top' },
+ 'G': { 'type': 'scroll.bottom' },
+ '$': { 'type': 'scroll.end' },
+ 'd': { 'type': 'tabs.close' },
+ 'D': { 'type': 'tabs.close', 'select': 'left' },
+ 'x$': { 'type': 'tabs.close.right' },
+ '!d': { 'type': 'tabs.close.force' },
+ 'u': { 'type': 'tabs.reopen' },
+ 'K': { 'type': 'tabs.prev' },
+ 'J': { 'type': 'tabs.next' },
+ 'gT': { 'type': 'tabs.prev' },
+ 'gt': { 'type': 'tabs.next' },
+ 'g0': { 'type': 'tabs.first' },
+ 'g$': { 'type': 'tabs.last' },
+ '<C-6>': { 'type': 'tabs.prevsel' },
+ 'r': { 'type': 'tabs.reload', 'cache': false },
+ 'R': { 'type': 'tabs.reload', 'cache': true },
+ 'zp': { 'type': 'tabs.pin.toggle' },
+ 'zd': { 'type': 'tabs.duplicate' },
+ 'zi': { 'type': 'zoom.in' },
+ 'zo': { 'type': 'zoom.out' },
+ 'zz': { 'type': 'zoom.neutral' },
+ 'f': { 'type': 'follow.start', 'newTab': false, 'background': false },
+ 'F': { 'type': 'follow.start', 'newTab': true, 'background': false },
+ 'm': { 'type': 'mark.set.prefix' },
+ '\'': { 'type': 'mark.jump.prefix' },
+ 'H': { 'type': 'navigate.history.prev' },
+ 'L': { 'type': 'navigate.history.next' },
+ '[[': { 'type': 'navigate.link.prev' },
+ ']]': { 'type': 'navigate.link.next' },
+ 'gu': { 'type': 'navigate.parent' },
+ 'gU': { 'type': 'navigate.root' },
+ 'gi': { 'type': 'focus.input' },
+ 'gf': { 'type': 'page.source' },
+ 'gh': { 'type': 'page.home', 'newTab': false },
+ 'gH': { 'type': 'page.home', 'newTab': true },
+ 'y': { 'type': 'urls.yank' },
+ 'p': { 'type': 'urls.paste', 'newTab': false },
+ 'P': { 'type': 'urls.paste', 'newTab': true },
+ '/': { 'type': 'find.start' },
+ 'n': { 'type': 'find.next' },
+ 'N': { 'type': 'find.prev' },
+ '.': { 'type': 'repeat.last' },
+ '<S-Esc>': { 'type': 'addon.toggle.enabled' }
+ },
+ search: {
+ default: 'google',
+ engines: {
+ 'google': 'https://google.com/search?q={}',
+ 'yahoo': 'https://search.yahoo.com/search?p={}',
+ 'bing': 'https://www.bing.com/search?q={}',
+ 'duckduckgo': 'https://duckduckgo.com/?q={}',
+ 'twitter': 'https://twitter.com/search?q={}',
+ 'wikipedia': 'https://en.wikipedia.org/w/index.php?search={}'
+ }
+ },
+ properties: {
+ hintchars: 'abcdefghijklmnopqrstuvwxyz',
+ smoothscroll: false,
+ complete: 'sbh'
+ },
+ blacklist: [],
+});