From 9e004a40faba221f9179a96df6cceaeaba2d8c68 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sat, 26 Aug 2023 18:16:09 +1000 Subject: Firefox x org-protocol A greasemonkey userscript with keybindings for org-protocol. A webpage to activate org-protocol in firefox, which requires network.protocol-handler.expose.org-protocol to be false Some org-protocol bookmarklet in case the keys don't work --- firefox/extensions/org-protocol.user.js | 32 ++++++++++++++++++++++++++++++++ firefox/org-protocol-activate.html | 1 + firefox/policies.json | 32 ++++++++++++++++++++------------ firefox/user.js | 3 ++- 4 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 firefox/extensions/org-protocol.user.js create mode 100644 firefox/org-protocol-activate.html (limited to 'firefox') diff --git a/firefox/extensions/org-protocol.user.js b/firefox/extensions/org-protocol.user.js new file mode 100644 index 0000000..196a473 --- /dev/null +++ b/firefox/extensions/org-protocol.user.js @@ -0,0 +1,32 @@ +// ==UserScript== +// @name org-protocol +// @version 2 +// @grant none +// ==/UserScript== +window.addEventListener("keydown", function (event) { + if (event.defaultPrevented) { + return; // Do nothing if the event was already processed + } + + if (event.key === "l" && event.ctrlKey) { + event.preventDefault(); + location.href = 'org-protocol://store-link?url=' + + encodeURIComponent(location.href) + + '&title=' + document.title; + } + + if (event.key === ";" && event.ctrlKey) { + event.preventDefault(); + location.href = 'org-protocol://capture?template=t' + + '&url=' + encodeURIComponent(window.location.href) + + '&title=' + document.title + + '&body=' + window.getSelection(); + } + + if (event.key === "'" && event.ctrlKey) { + event.preventDefault(); + location.href = 'org-protocol://grok?url=' + + encodeURIComponent(location.href); + } + +}, true); diff --git a/firefox/org-protocol-activate.html b/firefox/org-protocol-activate.html new file mode 100644 index 0000000..c4b7135 --- /dev/null +++ b/firefox/org-protocol-activate.html @@ -0,0 +1 @@ +activate diff --git a/firefox/policies.json b/firefox/policies.json index a6a7726..7a473c7 100644 --- a/firefox/policies.json +++ b/firefox/policies.json @@ -84,17 +84,6 @@ } }, "SearchEngines": { - "Add": [ - { - "Name": "Startpage", - "URLTemplate": "https://www.startpage.com/sp/search?query={searchTerms}", - "Method": "GET", - "IconURL": "https://www.startpage.com/sp/cdn/favicons/favicon--dark.ico", - "Alias": "@startpage", - "Description": "Startpage", - "SuggestURLTemplate": "https://www.startpage.com/sp/search?query={searchTerms}" - } - ], "Remove": [ "Amazon.co.uk", "Amazon.com.au", @@ -105,6 +94,25 @@ "Twitter", "Yahoo" ] - } + }, + "NoDefaultBookmarks": true, + "DisplayBookmarksToolbar": "always", + "Bookmarks": [ + { + "Title": "org-store-link", + "URL": "javascript:location.href='org-protocol://store-link?url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title);;", + "Placement": "toolbar" + }, + { + "Title": "org-capture-todo", + "URL": "javascript:location.href='org-protocol://capture?template=t'+'&url='+encodeURIComponent(window.location.href)+'&title='+encodeURIComponent(document.title)+'&body='+encodeURIComponent(window.getSelection());", + "Placement": "toolbar" + }, + { + "Title": "org-grok", + "URL": "javascript:location.href = 'org-protocol://grok?url=' + encodeURIComponent(location.href);", + "Placement": "toolbar" + } + ] } } diff --git a/firefox/user.js b/firefox/user.js index f6f1530..f8e5879 100644 --- a/firefox/user.js +++ b/firefox/user.js @@ -1055,8 +1055,9 @@ user_pref("xpinstall.whitelist.required", false); // org-protocol user_pref("network.protocol-handler.app.org-protocol", "emacsclient -n"); -user_pref("network.protocol-handler.expose.org-protocol", true); +user_pref("network.protocol-handler.expose.org-protocol", false); user_pref("network.protocol-handler.external.org-protocol", true); +user_pref("devtools.editor.keymap", "emacs"); /* END: internal custom pref to test for syntax errors ***/ -- cgit v1.2.3