aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2025-03-03 22:53:33 -0800
committerGravatar Tom Willemse2025-03-03 22:53:33 -0800
commit8b838f0a7bb2a988d4c226e64da2067e989885ef (patch)
treef703244f9ce170db1821fbbcef438a092e791919
parenta15e8ca1adbd5bd3522e496e7872e17d947e9378 (diff)
downloadnew-dotfiles-8b838f0a7bb2a988d4c226e64da2067e989885ef.tar.gz
new-dotfiles-8b838f0a7bb2a988d4c226e64da2067e989885ef.zip
Surfingkeys: Generate config from lisp
-rw-r--r--GNUmakefile5
-rw-r--r--surfingkeys/surfingkeys.js525
-rw-r--r--surfingkeys/surfingkeys.lisp484
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;
+ }
+ }
+")