diff options
| author | 2025-03-03 22:53:33 -0800 | |
|---|---|---|
| committer | 2025-03-03 22:53:33 -0800 | |
| commit | 8b838f0a7bb2a988d4c226e64da2067e989885ef (patch) | |
| tree | f703244f9ce170db1821fbbcef438a092e791919 | |
| parent | a15e8ca1adbd5bd3522e496e7872e17d947e9378 (diff) | |
| download | new-dotfiles-8b838f0a7bb2a988d4c226e64da2067e989885ef.tar.gz new-dotfiles-8b838f0a7bb2a988d4c226e64da2067e989885ef.zip | |
Surfingkeys: Generate config from lisp
| -rw-r--r-- | GNUmakefile | 5 | ||||
| -rw-r--r-- | surfingkeys/surfingkeys.js | 525 | ||||
| -rw-r--r-- | surfingkeys/surfingkeys.lisp | 484 |
3 files changed, 524 insertions, 490 deletions
diff --git a/GNUmakefile b/GNUmakefile index ba11628..5a16788 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -142,6 +142,11 @@ firefox-stow: @echo "Error finding firefox default profile, can't stow" >&2 endif +## Surfingkeys + +surfingkeys/surfingkeys.js: surfingkeys/surfingkeys.lisp + sbcl --eval '(require :asdf)' --eval '(require :parenscript)' --eval '(in-package :parenscript)' --eval '(with-open-file (str "$@" :direction :output :if-exists :overwrite :if-does-not-exist :create) (format str "~a" (ps-compile-file "$<")))' --eval '(sb-ext:exit)' + ## Helper %.el: %.org diff --git a/surfingkeys/surfingkeys.js b/surfingkeys/surfingkeys.js index 738280d..a45eca4 100644 --- a/surfingkeys/surfingkeys.js +++ b/surfingkeys/surfingkeys.js @@ -1,502 +1,47 @@ function orgCapture() { - location.href = 'org-protocol://capture?' - + new URLSearchParams({ - template: 'U', - url: window.location.href, - title: document.title, - body: window.getSelection()}); -} - - + __PS_MV_REG = []; + return location.href = 'org-protocol://capture?' + new URLSearchParams({ template : 'U', + url : window.location.href, + title : document.title, + body : window.getSelection() + }); +}; api.addSearchAlias('aw', 'archlinux wiki', 'https://wiki.archlinux.org/index.php?search=%s'); api.addSearchAlias('ap', 'archlinux packages', 'https://archlinux.org/packages/?q=%s'); api.addSearchAlias('m', 'melpa', 'https://melpa.org/#/?q=%s'); api.addSearchAlias('e', 'emacswiki', 'https://duckduckgo.com/?q=site%3Aemacswiki.org+%s&atb=v98-1&ia=web'); -api.addSearchAlias( - 'w', - 'wikipedia', - 'https://en.wikipedia.org/wiki/', - 's', - 'https://en.wikipedia.org/w/api.php?action=opensearch&format=json&formatversion=2&namespace=0&limit=40&search=', - function(response) { - return JSON.parse(response.text)[1]; - } -); - -api.unmap(':'); -api.mapkey('<Alt-x>', '#7Open commands', function() { - api.Front.openOmnibar({type: "Commands"}); +api.addSearchAlias('w', 'wikipedia', 'https://en.wikipedia.org/wiki/', 's', 'https://en.wikipedia.org/w/api.php?action=opensearch&format=json&formatversion=2&namespace=0&limit=40&search=', function (response) { + return JSON.parse(response.text)[1]; }); -api.mapkey('gO', '#8Edit current URL and open', () => - api.Front.openOmnibar({type: "URLs", tabbed: false, pref: window.location.href})); - -api.mapkey('<Ctrl-c>g', '#14Load new posts', function() { - document.querySelector('button.updates-button').click(); -}, { domain: /phanpy\.social/i }); - +api.mapkey('<Alt-x>', '#7Open commands', function () { + return api.Front.openOmnibar({ type : 'Commands' }); +}); +api.mapkey('<Ctrl-c>g', '#14Load new posts', function () { + return document.querySelector('button.updates-button').click(); +}, { domain : /phanpy.social/i }); api.mapkey('cc', '#13Capture current page', orgCapture); - -api.map('<Ctrl-b>', 'h'); -api.map('<Ctrl-n>', 'j'); -api.map('<Ctrl-p>', 'k'); -api.map('<Ctrl-f>', 'l'); -api.map('<Ctrl-x>xg', 'r'); -api.map('l', 'S'); -api.map('r', 'D'); -api.map('c0', 'yy'); -api.map('cl', 'ya'); -api.map('<Alt-p>', 'E'); -api.map('<Alt-n>', 'R'); -api.map('<Ctrl-u>f', 'af'); - -api.unmap('h'); -api.unmap('j'); -api.unmap('k'); -api.unmap('S'); -api.unmap('D'); -api.unmap('yy'); -api.unmap('E'); -api.unmap('R'); -api.unmap('af'); - -api.map('<Ctrl-v>', 'P'); -api.map('<Alt-v>', 'U'); -api.map('<Alt->>', 'G'); -api.map('<Alt-<>', 'gg'); - -api.unmap('P'); -api.unmap('U'); -api.unmap('G'); -api.unmap('gg'); - +(function () { + for (var keypair = null, _js_arrvar2 = [['<Ctrl-b>', 'h'], ['<Ctrl-n>', 'j'], ['<Ctrl-p>', 'k'], ['<Ctrl-f>', 'l'], ['<Ctrl-x>xg', 'r'], ['l', 'S'], ['r', 'D'], ['c0', 'yy'], ['cl', 'ya'], ['<Alt-p>', 'E'], ['<Alt-n>', 'R'], ['<Ctrl-u>f', 'af'], ['<Ctrl-v>', 'P'], ['<Alt-v>', 'U'], ['<Alt->>', 'G'], ['<Alt-<>', 'gg']], _js_idx1 = 0; _js_idx1 < _js_arrvar2.length; _js_idx1 += 1) { + keypair = _js_arrvar2[_js_idx1]; + api.map(keypair[0], keypair[1]); + }; +})(); +(function () { + for (var key = null, _js_arrvar4 = [':', 'h', 'j', 'k', 'S', 'D', 'yy', 'E', 'R', 'af', 'P', 'U', 'G', 'gg'], _js_idx3 = 0; _js_idx3 < _js_arrvar4.length; _js_idx3 += 1) { + key = _js_arrvar4[_js_idx3]; + api.unmap(key); + }; +})(); api.cmap('<Ctrl-g>', '<Esc>'); api.imap('<Ctrl-g>', '<Esc>'); - api.Hints.setCharacters('arstdhneio'); -api.hintAlign = "left"; - +api.hintAlign = 'left'; settings.aceKeybindings = 'emacs'; settings.defaultSearchEngine = 'd'; -settings.omnibarPosition = "bottom"; - -const hintsCss = "font-size: 13pt; font-family: 'Fantasque Sans Mono'; border: 1px solid #787f7f; color: #bfbfbf !important; background: #222424; padding: 0; line-height: 1;" -api.Hints.style(hintsCss); -api.Hints.style(hintsCss, "text"); - -settings.theme = ` - .sk_theme { - background: #222424; - color: #bfbfbf; - } - .sk_theme input { - color: #bfbfbf; - } - .sk_theme .url { - color: #f1b572; - } - .sk_theme .annotation { - color: #f172b5; - } - .sk_theme kbd { - background: #3f4242; - color: #bfbfbf; - } - .sk_theme .frame { - background: #ff00ff; - } - .sk_theme .omnibar_highlight { - color: #72f1f1; - } - .sk_theme .omnibar_folder { - color: #ff00ff; - } - .sk_theme .omnibar_timestamp { - color: #8872f1; - } - .sk_theme .omnibar_visitcount { - color: #ff00ff; - } - .sk_theme .prompt, .sk_theme .resultPage { - color: #ff00ff; - } - .sk_theme .feature_name { - color: #e0def4; - } - .sk_theme .separator { - color: #56526e; - } - body { - margin: 0; - - font-family: "JetBrains Mono NL", "Cascadia Code", "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 12px; - } - #sk_omnibar { - overflow: hidden; - position: fixed; - width: 80%; - max-height: 80%; - left: 10%; - text-align: left; - box-shadow: 0px 2px 10px #2a283e; - z-index: 2147483000; - } - .sk_omnibar_middle { - top: 10%; - border-radius: 4px; - } - .sk_omnibar_bottom { - bottom: 0; - border-radius: 4px 4px 0px 0px; - } - #sk_omnibar span.omnibar_highlight { - text-shadow: 0 0 0.01em; - } - #sk_omnibarSearchArea .prompt, #sk_omnibarSearchArea .resultPage { - display: inline-block; - font-size: 20px; - width: auto; - } - #sk_omnibarSearchArea>input { - display: inline-block; - width: 100%; - flex: 1; - font-size: 20px; - margin-bottom: 0; - padding: 0px 0px 0px 0.5rem; - background: transparent; - border-style: none; - outline: none; - } - #sk_omnibarSearchArea { - display: flex; - align-items: center; - border-bottom: 1px solid #56526e; - } - .sk_omnibar_middle #sk_omnibarSearchArea { - margin: 0.5rem 1rem; - } - .sk_omnibar_bottom #sk_omnibarSearchArea { - margin: 0.2rem 1rem; - } - .sk_omnibar_middle #sk_omnibarSearchResult>ul { - margin-top: 0; - } - .sk_omnibar_bottom #sk_omnibarSearchResult>ul { - margin-bottom: 0; - } - #sk_omnibarSearchResult { - max-height: 60vh; - overflow: hidden; - margin: 0rem 0.6rem; - } - #sk_omnibarSearchResult:empty { - display: none; - } - #sk_omnibarSearchResult>ul { - padding: 0; - } - #sk_omnibarSearchResult>ul>li { - padding: 0.2rem 0rem; - display: block; - max-height: 600px; - overflow-x: hidden; - overflow-y: auto; - } - .sk_theme #sk_omnibarSearchResult>ul>li:nth-child(odd) { - background: #3f4242; - } - .sk_theme #sk_omnibarSearchResult>ul>li.focused { - background: #72aff1; - color: #3f4242; - } - .sk_theme #sk_omnibarSearchResult>ul>li.window { - border: 2px solid #56526e; - border-radius: 8px; - margin: 4px 0px; - } - .sk_theme #sk_omnibarSearchResult>ul>li.window.focused { - border: 2px solid #c4a7e7; - } - .sk_theme div.table { - display: table; - } - .sk_theme div.table>* { - vertical-align: middle; - display: table-cell; - } - #sk_omnibarSearchResult li div.title { - text-align: left; - } - #sk_omnibarSearchResult li div.url { - font-weight: normal; - white-space: nowrap; - } - #sk_omnibarSearchResult li.focused div.url { - white-space: normal; - } - #sk_omnibarSearchResult li span.annotation { - float: right; - } - #sk_omnibarSearchResult .tab_in_window { - display: inline-block; - padding: 5px; - margin: 5px; - box-shadow: 0px 2px 10px #2a283e; - } - #sk_status { - position: fixed; - bottom: 0; - right: 20%; - z-index: 2147483000; - padding: 4px 8px 0 8px; - border-radius: 4px 4px 0px 0px; - border: 1px solid #56526e; - font-size: 12px; - } - #sk_status>span { - line-height: 16px; - } - .expandRichHints span.annotation { - padding-left: 4px; - color: #ea9a97; - } - .expandRichHints .kbd-span { - min-width: 30px; - text-align: right; - display: inline-block; - } - .expandRichHints kbd>.candidates { - color: #e0def4; - font-weight: bold; - } - .expandRichHints kbd { - padding: 1px 2px; - } - #sk_find { - border-style: none; - outline: none; - } - #sk_keystroke { - padding: 6px; - position: fixed; - float: right; - bottom: 0px; - z-index: 2147483000; - right: 0px; - background: #232136; - color: #e0def4; - } - #sk_usage, #sk_popup, #sk_editor { - overflow: auto; - position: fixed; - width: 80%; - max-height: 80%; - top: 10%; - left: 10%; - text-align: left; - box-shadow: #2a283e; - z-index: 2147483298; - padding: 1rem; - } - #sk_nvim { - position: fixed; - top: 10%; - left: 10%; - width: 80%; - height: 30%; - } - #sk_popup img { - width: 100%; - } - #sk_usage>div { - display: inline-block; - vertical-align: top; - } - #sk_usage .kbd-span { - width: 80px; - text-align: right; - display: inline-block; - } - #sk_usage .feature_name { - text-align: center; - padding-bottom: 4px; - } - #sk_usage .feature_name>span { - border-bottom: 2px solid #56526e; - } - #sk_usage span.annotation { - padding-left: 32px; - line-height: 22px; - } - #sk_usage * { - font-size: 10pt; - } - kbd { - white-space: nowrap; - display: inline-block; - padding: 3px 5px; - font: 11px "JetBrains Mono NL", "Cascadia Code", "Helvetica Neue", Helvetica, Arial, sans-serif; - line-height: 10px; - vertical-align: middle; - border: solid 1px #56526e; - border-bottom-lolor: #56526e; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #2a283e; - } - #sk_banner { - padding: 0.5rem; - position: fixed; - left: 10%; - top: -3rem; - z-index: 2147483000; - width: 80%; - border-radius: 0px 0px 4px 4px; - border: 1px solid #56526e; - border-top-style: none; - text-align: center; - background: #232136; - color: #bfbfbf; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - } - #sk_tabs { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: transparent; - overflow: auto; - z-index: 2147483000; - } - div.sk_tab { - display: inline-block; - border-radius: 3px; - padding: 10px 20px; - margin: 5px; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#232136), color-stop(100%,#232136)); - box-shadow: 0px 3px 7px 0px #2a283e; - } - div.sk_tab_wrap { - display: inline-block; - } - div.sk_tab_icon { - display: inline-block; - vertical-align: middle; - } - div.sk_tab_icon>img { - width: 18px; - } - div.sk_tab_title { - width: 150px; - display: inline-block; - vertical-align: middle; - font-size: 10pt; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - padding-left: 5px; - color: #e0def4; - } - div.sk_tab_url { - font-size: 10pt; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - color: #c4a7e7; - } - div.sk_tab_hint { - display: inline-block; - float:right; - font-size: 10pt; - font-weight: bold; - padding: 0px 2px 0px 2px; - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#232136), color-stop(100%,#232136)); - color: #e0def4; - border: solid 1px #56526e; - border-radius: 3px; - box-shadow: #2a283e; - } - #sk_bubble { - position: absolute; - padding: 9px; - border: 1px solid #56526e; - border-radius: 4px; - box-shadow: 0 0 20px #2a283e; - color: #e0def4; - background-color: #232136; - z-index: 2147483000; - font-size: 14px; - } - #sk_bubble .sk_bubble_content { - overflow-y: scroll; - background-size: 3px 100%; - background-position: 100%; - background-repeat: no-repeat; - } - .sk_scroller_indicator_top { - background-image: linear-gradient(#232136, transparent); - } - .sk_scroller_indicator_middle { - background-image: linear-gradient(transparent, #232136, transparent); - } - .sk_scroller_indicator_bottom { - background-image: linear-gradient(transparent, #232136); - } - #sk_bubble * { - color: #e0def4 !important; - } - div.sk_arrow>div:nth-of-type(1) { - left: 0; - position: absolute; - width: 0; - border-left: 12px solid transparent; - border-right: 12px solid transparent; - background: transparent; - } - div.sk_arrow[dir=down]>div:nth-of-type(1) { - border-top: 12px solid #56526e; - } - div.sk_arrow[dir=up]>div:nth-of-type(1) { - border-bottom: 12px solid #56526e; - } - div.sk_arrow>div:nth-of-type(2) { - left: 2px; - position: absolute; - width: 0; - border-left: 10px solid transparent; - border-right: 10px solid transparent; - background: transparent; - } - div.sk_arrow[dir=down]>div:nth-of-type(2) { - border-top: 10px solid #e0def4; - } - div.sk_arrow[dir=up]>div:nth-of-type(2) { - top: 2px; - border-bottom: 10px solid #e0def4; - } - .ace_editor.ace_autocomplete { - z-index: 2147483300 !important; - width: 80% !important; - } - @media only screen and (max-width: 767px) { - #sk_omnibar { - width: 100%; - left: 0; - } - #sk_omnibarSearchResult { - max-height: 50vh; - overflow: scroll; - } - .sk_omnibar_bottom #sk_omnibarSearchArea { - margin: 0; - padding: 0.2rem; - } - } -`; - -// Local Variables: -// js2-additional-externs: ("api" "settings") -// End: +settings.omnibarPosition = 'bottom'; +(function () { + var hintscss = 'font-size: 13pt; font-family: \'Fantasque Sans Mono\'; border: 1px solid #787f7f; color: #bfbfbf !important; background: #222424; padding: 0; line-height: 1;'; + api.Hints.style(hintscss); + return api.Hints.style(hintscss, 'text'); +})(); +settings.theme = '\n .sk_theme {\n background: #222424;\n color: #bfbfbf;\n }\n .sk_theme input {\n color: #bfbfbf;\n }\n .sk_theme .url {\n color: #f1b572;\n }\n .sk_theme .annotation {\n color: #f172b5;\n }\n .sk_theme kbd {\n background: #3f4242;\n color: #bfbfbf;\n }\n .sk_theme .frame {\n background: #ff00ff;\n }\n .sk_theme .omnibar_highlight {\n color: #72f1f1;\n }\n .sk_theme .omnibar_folder {\n color: #ff00ff;\n }\n .sk_theme .omnibar_timestamp {\n color: #8872f1;\n }\n .sk_theme .omnibar_visitcount {\n color: #ff00ff;\n }\n .sk_theme .prompt, .sk_theme .resultPage {\n color: #ff00ff;\n }\n .sk_theme .feature_name {\n color: #e0def4;\n }\n .sk_theme .separator {\n color: #56526e;\n }\n body {\n margin: 0;\n\n font-family: \"JetBrains Mono NL\", \"Cascadia Code\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n }\n #sk_omnibar {\n overflow: hidden;\n position: fixed;\n width: 80%;\n max-height: 80%;\n left: 10%;\n text-align: left;\n box-shadow: 0px 2px 10px #2a283e;\n z-index: 2147483000;\n }\n .sk_omnibar_middle {\n top: 10%;\n border-radius: 4px;\n }\n .sk_omnibar_bottom {\n bottom: 0;\n border-radius: 4px 4px 0px 0px;\n }\n #sk_omnibar span.omnibar_highlight {\n text-shadow: 0 0 0.01em;\n }\n #sk_omnibarSearchArea .prompt, #sk_omnibarSearchArea .resultPage {\n display: inline-block;\n font-size: 20px;\n width: auto;\n }\n #sk_omnibarSearchArea>input {\n display: inline-block;\n width: 100%;\n flex: 1;\n font-size: 20px;\n margin-bottom: 0;\n padding: 0px 0px 0px 0.5rem;\n background: transparent;\n border-style: none;\n outline: none;\n }\n #sk_omnibarSearchArea {\n display: flex;\n align-items: center;\n border-bottom: 1px solid #56526e;\n }\n .sk_omnibar_middle #sk_omnibarSearchArea {\n margin: 0.5rem 1rem;\n }\n .sk_omnibar_bottom #sk_omnibarSearchArea {\n margin: 0.2rem 1rem;\n }\n .sk_omnibar_middle #sk_omnibarSearchResult>ul {\n margin-top: 0;\n }\n .sk_omnibar_bottom #sk_omnibarSearchResult>ul {\n margin-bottom: 0;\n }\n #sk_omnibarSearchResult {\n max-height: 60vh;\n overflow: hidden;\n margin: 0rem 0.6rem;\n }\n #sk_omnibarSearchResult:empty {\n display: none;\n }\n #sk_omnibarSearchResult>ul {\n padding: 0;\n }\n #sk_omnibarSearchResult>ul>li {\n padding: 0.2rem 0rem;\n display: block;\n max-height: 600px;\n overflow-x: hidden;\n overflow-y: auto;\n }\n .sk_theme #sk_omnibarSearchResult>ul>li:nth-child(odd) {\n background: #3f4242;\n }\n .sk_theme #sk_omnibarSearchResult>ul>li.focused {\n background: #72aff1;\n color: #3f4242;\n }\n .sk_theme #sk_omnibarSearchResult>ul>li.window {\n border: 2px solid #56526e;\n border-radius: 8px;\n margin: 4px 0px;\n }\n .sk_theme #sk_omnibarSearchResult>ul>li.window.focused {\n border: 2px solid #c4a7e7;\n }\n .sk_theme div.table {\n display: table;\n }\n .sk_theme div.table>* {\n vertical-align: middle;\n display: table-cell;\n }\n #sk_omnibarSearchResult li div.title {\n text-align: left;\n }\n #sk_omnibarSearchResult li div.url {\n font-weight: normal;\n white-space: nowrap;\n }\n #sk_omnibarSearchResult li.focused div.url {\n white-space: normal;\n }\n #sk_omnibarSearchResult li span.annotation {\n float: right;\n }\n #sk_omnibarSearchResult .tab_in_window {\n display: inline-block;\n padding: 5px;\n margin: 5px;\n box-shadow: 0px 2px 10px #2a283e;\n }\n #sk_status {\n position: fixed;\n bottom: 0;\n right: 20%;\n z-index: 2147483000;\n padding: 4px 8px 0 8px;\n border-radius: 4px 4px 0px 0px;\n border: 1px solid #56526e;\n font-size: 12px;\n }\n #sk_status>span {\n line-height: 16px;\n }\n .expandRichHints span.annotation {\n padding-left: 4px;\n color: #ea9a97;\n }\n .expandRichHints .kbd-span {\n min-width: 30px;\n text-align: right;\n display: inline-block;\n }\n .expandRichHints kbd>.candidates {\n color: #e0def4;\n font-weight: bold;\n }\n .expandRichHints kbd {\n padding: 1px 2px;\n }\n #sk_find {\n border-style: none;\n outline: none;\n }\n #sk_keystroke {\n padding: 6px;\n position: fixed;\n float: right;\n bottom: 0px;\n z-index: 2147483000;\n right: 0px;\n background: #232136;\n color: #e0def4;\n }\n #sk_usage, #sk_popup, #sk_editor {\n overflow: auto;\n position: fixed;\n width: 80%;\n max-height: 80%;\n top: 10%;\n left: 10%;\n text-align: left;\n box-shadow: #2a283e;\n z-index: 2147483298;\n padding: 1rem;\n }\n #sk_nvim {\n position: fixed;\n top: 10%;\n left: 10%;\n width: 80%;\n height: 30%;\n }\n #sk_popup img {\n width: 100%;\n }\n #sk_usage>div {\n display: inline-block;\n vertical-align: top;\n }\n #sk_usage .kbd-span {\n width: 80px;\n text-align: right;\n display: inline-block;\n }\n #sk_usage .feature_name {\n text-align: center;\n padding-bottom: 4px;\n }\n #sk_usage .feature_name>span {\n border-bottom: 2px solid #56526e;\n }\n #sk_usage span.annotation {\n padding-left: 32px;\n line-height: 22px;\n }\n #sk_usage * {\n font-size: 10pt;\n }\n kbd {\n white-space: nowrap;\n display: inline-block;\n padding: 3px 5px;\n font: 11px \"JetBrains Mono NL\", \"Cascadia Code\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n line-height: 10px;\n vertical-align: middle;\n border: solid 1px #56526e;\n border-bottom-lolor: #56526e;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 #2a283e;\n }\n #sk_banner {\n padding: 0.5rem;\n position: fixed;\n left: 10%;\n top: -3rem;\n z-index: 2147483000;\n width: 80%;\n border-radius: 0px 0px 4px 4px;\n border: 1px solid #56526e;\n border-top-style: none;\n text-align: center;\n background: #232136;\n color: #bfbfbf;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n #sk_tabs {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: transparent;\n overflow: auto;\n z-index: 2147483000;\n }\n div.sk_tab {\n display: inline-block;\n border-radius: 3px;\n padding: 10px 20px;\n margin: 5px;\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#232136), color-stop(100%,#232136));\n box-shadow: 0px 3px 7px 0px #2a283e;\n }\n div.sk_tab_wrap {\n display: inline-block;\n }\n div.sk_tab_icon {\n display: inline-block;\n vertical-align: middle;\n }\n div.sk_tab_icon>img {\n width: 18px;\n }\n div.sk_tab_title {\n width: 150px;\n display: inline-block;\n vertical-align: middle;\n font-size: 10pt;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n padding-left: 5px;\n color: #e0def4;\n }\n div.sk_tab_url {\n font-size: 10pt;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n color: #c4a7e7;\n }\n div.sk_tab_hint {\n display: inline-block;\n float:right;\n font-size: 10pt;\n font-weight: bold;\n padding: 0px 2px 0px 2px;\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#232136), color-stop(100%,#232136));\n color: #e0def4;\n border: solid 1px #56526e;\n border-radius: 3px;\n box-shadow: #2a283e;\n }\n #sk_bubble {\n position: absolute;\n padding: 9px;\n border: 1px solid #56526e;\n border-radius: 4px;\n box-shadow: 0 0 20px #2a283e;\n color: #e0def4;\n background-color: #232136;\n z-index: 2147483000;\n font-size: 14px;\n }\n #sk_bubble .sk_bubble_content {\n overflow-y: scroll;\n background-size: 3px 100%;\n background-position: 100%;\n background-repeat: no-repeat;\n }\n .sk_scroller_indicator_top {\n background-image: linear-gradient(#232136, transparent);\n }\n .sk_scroller_indicator_middle {\n background-image: linear-gradient(transparent, #232136, transparent);\n }\n .sk_scroller_indicator_bottom {\n background-image: linear-gradient(transparent, #232136);\n }\n #sk_bubble * {\n color: #e0def4 !important;\n }\n div.sk_arrow>div:nth-of-type(1) {\n left: 0;\n position: absolute;\n width: 0;\n border-left: 12px solid transparent;\n border-right: 12px solid transparent;\n background: transparent;\n }\n div.sk_arrow[dir=down]>div:nth-of-type(1) {\n border-top: 12px solid #56526e;\n }\n div.sk_arrow[dir=up]>div:nth-of-type(1) {\n border-bottom: 12px solid #56526e;\n }\n div.sk_arrow>div:nth-of-type(2) {\n left: 2px;\n position: absolute;\n width: 0;\n border-left: 10px solid transparent;\n border-right: 10px solid transparent;\n background: transparent;\n }\n div.sk_arrow[dir=down]>div:nth-of-type(2) {\n border-top: 10px solid #e0def4;\n }\n div.sk_arrow[dir=up]>div:nth-of-type(2) {\n top: 2px;\n border-bottom: 10px solid #e0def4;\n }\n .ace_editor.ace_autocomplete {\n z-index: 2147483300 !important;\n width: 80% !important;\n }\n @media only screen and (max-width: 767px) {\n #sk_omnibar {\n width: 100%;\n left: 0;\n }\n #sk_omnibarSearchResult {\n max-height: 50vh;\n overflow: scroll;\n }\n .sk_omnibar_bottom #sk_omnibarSearchArea {\n margin: 0;\n padding: 0.2rem;\n }\n }\n'; diff --git a/surfingkeys/surfingkeys.lisp b/surfingkeys/surfingkeys.lisp new file mode 100644 index 0000000..b180bfe --- /dev/null +++ b/surfingkeys/surfingkeys.lisp @@ -0,0 +1,484 @@ +;; (defpackage :surfingkeys-user +;; (:use :common-lisp :parenscript)) + +;; (in-package :surfingkeys-user) + +(defun org-capture () + (setf (@ location href) + (+ "org-protocol://capture?" + (new (-u-r-l-search-params + (create template "U" + url (@ window location href) + title (@ document title) + body (funcall (@ window get-selection)))))))) + +(chain api (add-search-alias "aw" "archlinux wiki" "https://wiki.archlinux.org/index.php?search=%s")) +(chain api (add-search-alias "ap" "archlinux packages" "https://archlinux.org/packages/?q=%s")) +(chain api (add-search-alias "m" "melpa" "https://melpa.org/#/?q=%s")) +(chain api (add-search-alias "e" "emacswiki" "https://duckduckgo.com/?q=site%3Aemacswiki.org+%s&atb=v98-1&ia=web")) +(chain api (add-search-alias + "w" + "wikipedia" + "https://en.wikipedia.org/wiki/" + "s" + "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&formatversion=2&namespace=0&limit=40&search=" + (lambda (response) + (aref (funcall (@ -j-s-o-n parse) (@ response text)) 1)))) + +(chain api (mapkey "<Alt-x>" "#7Open commands" + (lambda () (funcall (@ api -front open-omnibar) + (create type "Commands"))))) +(chain api (mapkey "<Ctrl-c>g" "#14Load new posts" + (lambda () (funcall (@ (funcall (@ document query-selector) "button.updates-button") click))) + (create domain (regex "/phanpy.social/i")))) +(chain api (mapkey "cc" "#13Capture current page" #'org-capture)) + +(dolist (keypair '(("<Ctrl-b>" "h") + ("<Ctrl-n>" "j") + ("<Ctrl-p>" "k") + ("<Ctrl-f>" "l") + ("<Ctrl-x>xg" "r") + ("l" "S") + ("r" "D") + ("c0" "yy") + ("cl" "ya") + ("<Alt-p>" "E") + ("<Alt-n>" "R") + ("<Ctrl-u>f" "af") + ("<Ctrl-v>" "P") + ("<Alt-v>" "U") + ("<Alt->>" "G") + ("<Alt-<>" "gg"))) + (chain api (map (aref keypair 0) (aref keypair 1)))) + +(dolist (key '(":" "h" "j" "k" "S" "D" "yy" "E" "R" "af" "P" "U" "G" "gg")) + (chain api (unmap key))) + +(chain api (cmap "<Ctrl-g>" "<Esc>")) +(chain api (imap "<Ctrl-g>" "<Esc>")) + +(chain api -hints (set-characters "arstdhneio")) + +(setf (@ api hint-align) "left" + (@ settings ace-keybindings) "emacs" + (@ settings default-search-engine) "d" + (@ settings omnibar-position) "bottom") + +(let ((hintsCss "font-size: 13pt; font-family: 'Fantasque Sans Mono'; border: 1px solid #787f7f; color: #bfbfbf !important; background: #222424; padding: 0; line-height: 1;")) + (chain api -hints (style hintsCss)) + (chain api -hints (style hintsCss "text"))) + +(setf (@ settings theme) + " + .sk_theme { + background: #222424; + color: #bfbfbf; + } + .sk_theme input { + color: #bfbfbf; + } + .sk_theme .url { + color: #f1b572; + } + .sk_theme .annotation { + color: #f172b5; + } + .sk_theme kbd { + background: #3f4242; + color: #bfbfbf; + } + .sk_theme .frame { + background: #ff00ff; + } + .sk_theme .omnibar_highlight { + color: #72f1f1; + } + .sk_theme .omnibar_folder { + color: #ff00ff; + } + .sk_theme .omnibar_timestamp { + color: #8872f1; + } + .sk_theme .omnibar_visitcount { + color: #ff00ff; + } + .sk_theme .prompt, .sk_theme .resultPage { + color: #ff00ff; + } + .sk_theme .feature_name { + color: #e0def4; + } + .sk_theme .separator { + color: #56526e; + } + body { + margin: 0; + + font-family: \"JetBrains Mono NL\", \"Cascadia Code\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; + font-size: 12px; + } + #sk_omnibar { + overflow: hidden; + position: fixed; + width: 80%; + max-height: 80%; + left: 10%; + text-align: left; + box-shadow: 0px 2px 10px #2a283e; + z-index: 2147483000; + } + .sk_omnibar_middle { + top: 10%; + border-radius: 4px; + } + .sk_omnibar_bottom { + bottom: 0; + border-radius: 4px 4px 0px 0px; + } + #sk_omnibar span.omnibar_highlight { + text-shadow: 0 0 0.01em; + } + #sk_omnibarSearchArea .prompt, #sk_omnibarSearchArea .resultPage { + display: inline-block; + font-size: 20px; + width: auto; + } + #sk_omnibarSearchArea>input { + display: inline-block; + width: 100%; + flex: 1; + font-size: 20px; + margin-bottom: 0; + padding: 0px 0px 0px 0.5rem; + background: transparent; + border-style: none; + outline: none; + } + #sk_omnibarSearchArea { + display: flex; + align-items: center; + border-bottom: 1px solid #56526e; + } + .sk_omnibar_middle #sk_omnibarSearchArea { + margin: 0.5rem 1rem; + } + .sk_omnibar_bottom #sk_omnibarSearchArea { + margin: 0.2rem 1rem; + } + .sk_omnibar_middle #sk_omnibarSearchResult>ul { + margin-top: 0; + } + .sk_omnibar_bottom #sk_omnibarSearchResult>ul { + margin-bottom: 0; + } + #sk_omnibarSearchResult { + max-height: 60vh; + overflow: hidden; + margin: 0rem 0.6rem; + } + #sk_omnibarSearchResult:empty { + display: none; + } + #sk_omnibarSearchResult>ul { + padding: 0; + } + #sk_omnibarSearchResult>ul>li { + padding: 0.2rem 0rem; + display: block; + max-height: 600px; + overflow-x: hidden; + overflow-y: auto; + } + .sk_theme #sk_omnibarSearchResult>ul>li:nth-child(odd) { + background: #3f4242; + } + .sk_theme #sk_omnibarSearchResult>ul>li.focused { + background: #72aff1; + color: #3f4242; + } + .sk_theme #sk_omnibarSearchResult>ul>li.window { + border: 2px solid #56526e; + border-radius: 8px; + margin: 4px 0px; + } + .sk_theme #sk_omnibarSearchResult>ul>li.window.focused { + border: 2px solid #c4a7e7; + } + .sk_theme div.table { + display: table; + } + .sk_theme div.table>* { + vertical-align: middle; + display: table-cell; + } + #sk_omnibarSearchResult li div.title { + text-align: left; + } + #sk_omnibarSearchResult li div.url { + font-weight: normal; + white-space: nowrap; + } + #sk_omnibarSearchResult li.focused div.url { + white-space: normal; + } + #sk_omnibarSearchResult li span.annotation { + float: right; + } + #sk_omnibarSearchResult .tab_in_window { + display: inline-block; + padding: 5px; + margin: 5px; + box-shadow: 0px 2px 10px #2a283e; + } + #sk_status { + position: fixed; + bottom: 0; + right: 20%; + z-index: 2147483000; + padding: 4px 8px 0 8px; + border-radius: 4px 4px 0px 0px; + border: 1px solid #56526e; + font-size: 12px; + } + #sk_status>span { + line-height: 16px; + } + .expandRichHints span.annotation { + padding-left: 4px; + color: #ea9a97; + } + .expandRichHints .kbd-span { + min-width: 30px; + text-align: right; + display: inline-block; + } + .expandRichHints kbd>.candidates { + color: #e0def4; + font-weight: bold; + } + .expandRichHints kbd { + padding: 1px 2px; + } + #sk_find { + border-style: none; + outline: none; + } + #sk_keystroke { + padding: 6px; + position: fixed; + float: right; + bottom: 0px; + z-index: 2147483000; + right: 0px; + background: #232136; + color: #e0def4; + } + #sk_usage, #sk_popup, #sk_editor { + overflow: auto; + position: fixed; + width: 80%; + max-height: 80%; + top: 10%; + left: 10%; + text-align: left; + box-shadow: #2a283e; + z-index: 2147483298; + padding: 1rem; + } + #sk_nvim { + position: fixed; + top: 10%; + left: 10%; + width: 80%; + height: 30%; + } + #sk_popup img { + width: 100%; + } + #sk_usage>div { + display: inline-block; + vertical-align: top; + } + #sk_usage .kbd-span { + width: 80px; + text-align: right; + display: inline-block; + } + #sk_usage .feature_name { + text-align: center; + padding-bottom: 4px; + } + #sk_usage .feature_name>span { + border-bottom: 2px solid #56526e; + } + #sk_usage span.annotation { + padding-left: 32px; + line-height: 22px; + } + #sk_usage * { + font-size: 10pt; + } + kbd { + white-space: nowrap; + display: inline-block; + padding: 3px 5px; + font: 11px \"JetBrains Mono NL\", \"Cascadia Code\", \"Helvetica Neue\", Helvetica, Arial, sans-serif; + line-height: 10px; + vertical-align: middle; + border: solid 1px #56526e; + border-bottom-lolor: #56526e; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #2a283e; + } + #sk_banner { + padding: 0.5rem; + position: fixed; + left: 10%; + top: -3rem; + z-index: 2147483000; + width: 80%; + border-radius: 0px 0px 4px 4px; + border: 1px solid #56526e; + border-top-style: none; + text-align: center; + background: #232136; + color: #bfbfbf; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + #sk_tabs { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: transparent; + overflow: auto; + z-index: 2147483000; + } + div.sk_tab { + display: inline-block; + border-radius: 3px; + padding: 10px 20px; + margin: 5px; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#232136), color-stop(100%,#232136)); + box-shadow: 0px 3px 7px 0px #2a283e; + } + div.sk_tab_wrap { + display: inline-block; + } + div.sk_tab_icon { + display: inline-block; + vertical-align: middle; + } + div.sk_tab_icon>img { + width: 18px; + } + div.sk_tab_title { + width: 150px; + display: inline-block; + vertical-align: middle; + font-size: 10pt; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding-left: 5px; + color: #e0def4; + } + div.sk_tab_url { + font-size: 10pt; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + color: #c4a7e7; + } + div.sk_tab_hint { + display: inline-block; + float:right; + font-size: 10pt; + font-weight: bold; + padding: 0px 2px 0px 2px; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#232136), color-stop(100%,#232136)); + color: #e0def4; + border: solid 1px #56526e; + border-radius: 3px; + box-shadow: #2a283e; + } + #sk_bubble { + position: absolute; + padding: 9px; + border: 1px solid #56526e; + border-radius: 4px; + box-shadow: 0 0 20px #2a283e; + color: #e0def4; + background-color: #232136; + z-index: 2147483000; + font-size: 14px; + } + #sk_bubble .sk_bubble_content { + overflow-y: scroll; + background-size: 3px 100%; + background-position: 100%; + background-repeat: no-repeat; + } + .sk_scroller_indicator_top { + background-image: linear-gradient(#232136, transparent); + } + .sk_scroller_indicator_middle { + background-image: linear-gradient(transparent, #232136, transparent); + } + .sk_scroller_indicator_bottom { + background-image: linear-gradient(transparent, #232136); + } + #sk_bubble * { + color: #e0def4 !important; + } + div.sk_arrow>div:nth-of-type(1) { + left: 0; + position: absolute; + width: 0; + border-left: 12px solid transparent; + border-right: 12px solid transparent; + background: transparent; + } + div.sk_arrow[dir=down]>div:nth-of-type(1) { + border-top: 12px solid #56526e; + } + div.sk_arrow[dir=up]>div:nth-of-type(1) { + border-bottom: 12px solid #56526e; + } + div.sk_arrow>div:nth-of-type(2) { + left: 2px; + position: absolute; + width: 0; + border-left: 10px solid transparent; + border-right: 10px solid transparent; + background: transparent; + } + div.sk_arrow[dir=down]>div:nth-of-type(2) { + border-top: 10px solid #e0def4; + } + div.sk_arrow[dir=up]>div:nth-of-type(2) { + top: 2px; + border-bottom: 10px solid #e0def4; + } + .ace_editor.ace_autocomplete { + z-index: 2147483300 !important; + width: 80% !important; + } + @media only screen and (max-width: 767px) { + #sk_omnibar { + width: 100%; + left: 0; + } + #sk_omnibarSearchResult { + max-height: 50vh; + overflow: scroll; + } + .sk_omnibar_bottom #sk_omnibarSearchArea { + margin: 0; + padding: 0.2rem; + } + } +") |
