mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 00:33:00 +00:00
360 lines
No EOL
8 KiB
JavaScript
360 lines
No EOL
8 KiB
JavaScript
// Paste this into surfingkeys advanced settings
|
|
// or use:
|
|
// Load settings from: https://raw.githubusercontent.com/js0ny/dotfiles/refs/heads/master/browser/surfingkeys.js
|
|
|
|
/** Examples
|
|
|
|
// an example to create a new mapping `ctrl-y`
|
|
api.mapkey('<ctrl-y>', 'Show me the money', function() {
|
|
Front.showPopup('a well-known phrase uttered by characters in the 1996 film Jerry Maguire (Escape to close).');
|
|
});
|
|
|
|
// an example to replace `T` with `gt`, click `Default mappings` to see how `T` works.
|
|
api.map('gt', 'T');
|
|
|
|
|
|
// an example to remove mapkey `Ctrl-i`
|
|
api.unmap('<ctrl-i>');
|
|
|
|
*/
|
|
// Settings
|
|
settings.language = "zh-CN" ;
|
|
settings.showModeStatus = false;
|
|
// Keymap, reference https://github.com/texiwustion/colemak_config_for_surfingkeys/tree/main
|
|
const forward = {
|
|
add: function (key) { // 转发即将被 unmap 的键
|
|
return api.map(`for${key}`, key)
|
|
},
|
|
cancel: function (key) { // 删除转发生成的键
|
|
api.unmap(`for${key}`)
|
|
api.unmap(key)
|
|
},
|
|
use: function (key) {
|
|
return `for${key}`
|
|
}
|
|
}
|
|
|
|
const colemak = {
|
|
forward: function (key) { // 转发即将被 unmap 的键
|
|
api.map(key, `col${key}`)
|
|
api.unmap(`col${key}`)
|
|
|
|
},
|
|
use: function (key) {
|
|
return `col${key}`
|
|
},
|
|
map: function (a, b) {
|
|
api.map(colemak.use(a), forward.use(b))
|
|
}
|
|
}
|
|
|
|
const forwardFactory = {
|
|
push: function (mapLists) { // forward original keys
|
|
for (let key in mapLists) {
|
|
forward.add(mapLists[key])
|
|
}
|
|
},
|
|
map: function (mapLists) {
|
|
for (let key in mapLists) {
|
|
colemak.map(key, mapLists[key])
|
|
}
|
|
},
|
|
pull: function (mapLists) {
|
|
for (let key in mapLists) {
|
|
forward.cancel(mapLists[key])
|
|
}
|
|
for (let key in mapLists) {
|
|
colemak.forward(key)
|
|
}
|
|
}
|
|
}
|
|
|
|
const mapLists = {
|
|
/// scroll page
|
|
// Arrow
|
|
'n': 'j',
|
|
'e': 'k',
|
|
'i': 'l',
|
|
// l <-> i
|
|
'l': 'i',
|
|
'L': 'I',
|
|
// k <-> n
|
|
'k': 'n',
|
|
'K': 'N',
|
|
// j <-> e
|
|
'j': 'e',
|
|
'J': 'E',
|
|
// 缩放
|
|
'zu': 'zi',
|
|
'zo': 'ze',
|
|
'zz': 'zr',
|
|
}
|
|
|
|
forwardFactory.push(mapLists)
|
|
api.unmap('t')
|
|
forwardFactory.map(mapLists)
|
|
// 鼠标点击
|
|
api.unmap('gi')
|
|
api.unmap('[[')
|
|
api.unmap(']]')
|
|
api.unmap(';m')
|
|
api.unmap(';fs')
|
|
api.unmap('O')
|
|
api.unmap('C')
|
|
forwardFactory.pull(mapLists)
|
|
|
|
|
|
// Search Alias
|
|
api.addSearchAlias('f', 'Felo', 'https://felo.ai/search?q=', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
|
|
var res = JSON.parse(response.text);
|
|
return res.map(function(r){
|
|
return r.phrase;
|
|
});
|
|
});
|
|
api.addSearchAlias('p', 'Perplexity', 'https://www.perplexity.ai/?q=', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
|
|
var res = JSON.parse(response.text);
|
|
return res.map(function(r){
|
|
return r.phrase;
|
|
});
|
|
});
|
|
api.addSearchAlias('r', 'Raindrop', 'https://app.raindrop.io/my/0/', 's', 'https://duckduckgo.com/ac/?q=', function(response) {
|
|
var res = JSON.parse(response.text);
|
|
return res.map(function(r){
|
|
return r.phrase;
|
|
});
|
|
});
|
|
|
|
|
|
// Theme, reference to https://github.com/Foldex/surfingkeys-config
|
|
api.Hints.style('border: solid 2px #4C566A; color:#A3BE8C; background: initial; background-color: #3B4252;');
|
|
api.Hints.style("border: solid 2px #4C566A !important; padding: 1px !important; color: #E5E9F0 !important; background: #3B4252 !important;", "text");
|
|
api.Visual.style('marks', 'background-color: #A3BE8C99;');
|
|
api.Visual.style('cursor', 'background-color: #88C0D0;');
|
|
settings.theme = `
|
|
fg: #E5E9F0;
|
|
bg: #3B4252;
|
|
bg-dark: #2E3440;
|
|
border: #4C566A;
|
|
main-fg: #88C0D0;
|
|
accent-fg: #A3BE8C;
|
|
info-fg: #5E81AC;
|
|
select: #4C566A;
|
|
/* ---------- Generic ---------- */
|
|
.sk_theme {
|
|
background: var(--bg);
|
|
color: var(--fg);
|
|
background-color: var(--bg);
|
|
border-color: var(--border);
|
|
font-family: var(--font);
|
|
font-size: var(--font-size);
|
|
font-weight: var(--font-weight);
|
|
}
|
|
|
|
input {
|
|
font-family: var(--font);
|
|
font-weight: var(--font-weight);
|
|
}
|
|
|
|
.sk_theme tbody {
|
|
color: var(--fg);
|
|
}
|
|
|
|
.sk_theme input {
|
|
color: var(--fg);
|
|
}
|
|
|
|
/* Hints */
|
|
#sk_hints .begin {
|
|
color: var(--accent-fg) !important;
|
|
}
|
|
|
|
#sk_tabs .sk_tab {
|
|
background: var(--bg-dark);
|
|
border: 1px solid var(--border);
|
|
}
|
|
|
|
#sk_tabs .sk_tab_title {
|
|
color: var(--fg);
|
|
}
|
|
|
|
#sk_tabs .sk_tab_url {
|
|
color: var(--main-fg);
|
|
}
|
|
|
|
#sk_tabs .sk_tab_hint {
|
|
background: var(--bg);
|
|
border: 1px solid var(--border);
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
.sk_theme #sk_frame {
|
|
background: var(--bg);
|
|
opacity: 0.2;
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
/* ---------- Omnibar ---------- */
|
|
/* Uncomment this and use settings.omnibarPosition = 'bottom' for Pentadactyl/Tridactyl style bottom bar */
|
|
/* .sk_theme#sk_omnibar {
|
|
width: 100%;
|
|
left: 0;
|
|
} */
|
|
|
|
.sk_theme .title {
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
.sk_theme .url {
|
|
color: var(--main-fg);
|
|
}
|
|
|
|
.sk_theme .annotation {
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
.sk_theme .omnibar_highlight {
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
.sk_theme .omnibar_timestamp {
|
|
color: var(--info-fg);
|
|
}
|
|
|
|
.sk_theme .omnibar_visitcount {
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
.sk_theme #sk_omnibarSearchResult ul li:nth-child(odd) {
|
|
background: var(--bg-dark);
|
|
}
|
|
|
|
.sk_theme #sk_omnibarSearchResult ul li.focused {
|
|
background: var(--border);
|
|
}
|
|
|
|
.sk_theme #sk_omnibarSearchArea {
|
|
border-top-color: var(--border);
|
|
border-bottom-color: var(--border);
|
|
}
|
|
|
|
.sk_theme #sk_omnibarSearchArea input,
|
|
.sk_theme #sk_omnibarSearchArea span {
|
|
font-size: var(--font-size);
|
|
}
|
|
|
|
.sk_theme .separator {
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
/* ---------- Popup Notification Banner ---------- */
|
|
#sk_banner {
|
|
font-family: var(--font);
|
|
font-size: var(--font-size);
|
|
font-weight: var(--font-weight);
|
|
background: var(--bg);
|
|
border-color: var(--border);
|
|
color: var(--fg);
|
|
opacity: 0.9;
|
|
}
|
|
|
|
/* ---------- Popup Keys ---------- */
|
|
#sk_keystroke {
|
|
background-color: var(--bg);
|
|
}
|
|
|
|
.sk_theme kbd .candidates {
|
|
color: var(--info-fg);
|
|
}
|
|
|
|
.sk_theme span.annotation {
|
|
color: var(--accent-fg);
|
|
}
|
|
|
|
/* ---------- Popup Translation Bubble ---------- */
|
|
#sk_bubble {
|
|
background-color: var(--bg) !important;
|
|
color: var(--fg) !important;
|
|
border-color: var(--border) !important;
|
|
}
|
|
|
|
#sk_bubble * {
|
|
color: var(--fg) !important;
|
|
}
|
|
|
|
#sk_bubble div.sk_arrow div:nth-of-type(1) {
|
|
border-top-color: var(--border) !important;
|
|
border-bottom-color: var(--border) !important;
|
|
}
|
|
|
|
#sk_bubble div.sk_arrow div:nth-of-type(2) {
|
|
border-top-color: var(--bg) !important;
|
|
border-bottom-color: var(--bg) !important;
|
|
}
|
|
|
|
/* ---------- Search ---------- */
|
|
#sk_status,
|
|
#sk_find {
|
|
font-size: var(--font-size);
|
|
border-color: var(--border);
|
|
}
|
|
|
|
.sk_theme kbd {
|
|
background: var(--bg-dark);
|
|
border-color: var(--border);
|
|
box-shadow: none;
|
|
color: var(--fg);
|
|
}
|
|
|
|
.sk_theme .feature_name span {
|
|
color: var(--main-fg);
|
|
}
|
|
|
|
/* ---------- ACE Editor ---------- */
|
|
#sk_editor {
|
|
background: var(--bg-dark) !important;
|
|
height: 50% !important;
|
|
/* Remove this to restore the default editor size */
|
|
}
|
|
|
|
.ace_dialog-bottom {
|
|
border-top: 1px solid var(--bg) !important;
|
|
}
|
|
|
|
.ace-chrome .ace_print-margin,
|
|
.ace_gutter,
|
|
.ace_gutter-cell,
|
|
.ace_dialog {
|
|
background: var(--bg) !important;
|
|
}
|
|
|
|
.ace-chrome {
|
|
color: var(--fg) !important;
|
|
}
|
|
|
|
.ace_gutter,
|
|
.ace_dialog {
|
|
color: var(--fg) !important;
|
|
}
|
|
|
|
.ace_cursor {
|
|
color: var(--fg) !important;
|
|
}
|
|
|
|
.normal-mode .ace_cursor {
|
|
background-color: var(--fg) !important;
|
|
border: var(--fg) !important;
|
|
opacity: 0.7 !important;
|
|
}
|
|
|
|
.ace_marker-layer .ace_selection {
|
|
background: var(--select) !important;
|
|
}
|
|
|
|
.ace_editor,
|
|
.ace_dialog span,
|
|
.ace_dialog input {
|
|
font-family: var(--font);
|
|
font-size: var(--font-size);
|
|
font-weight: var(--font-weight);
|
|
}`;
|
|
// click `Save` button to make above settings to take effect.</ctrl-i></ctrl-y>
|