legacy-dotfiles/keysnail/.keysnail.js

669 lines
24 KiB
JavaScript

// ======================= KeySnail Init File ======================== //
/* jshint moz: true */
/*global key plugins hook command util gBrowser _content goDoCommand
* KeySnail KeyEvent userscript ext openHelpLink
* BrowserCloseTabOrWindow closeWindow undoCloseTab OpenBrowserWindow
* getBrowser goQuitApplication saveDocument toJavaScriptConsole
* display shell BrowserReload BrowserBack BrowserForward content M
* Components*/
// You can preserve your code in this area when generating the init
// file using GUI. Put all your code except special key, set*key,
// hook, blacklist.
// =================================================================== //
//{{%PRESERVE%
// Put your codes here
plugins.options["hok.hint_keys"] = "arstdhneio";
plugins.options['bmany.default_open_type'] = 'tab';
//}}%PRESERVE%
// =================================================================== //
// ====================== Special key settings ======================= //
key.quitKey = "C-g";
key.helpKey = "<f1>";
key.escapeKey = "C-q";
key.macroStartKey = "<f3>";
key.macroEndKey = "<f4>";
key.suspendKey = "<f2>";
key.universalArgumentKey = "C-u";
key.negativeArgument1Key = "C--";
key.negativeArgument2Key = "C-M--";
key.negativeArgument3Key = "M--";
// ============================== Hooks ============================== //
hook.addToHook('KeyBoardQuit', function (aEvent) {
if (key.currentKeySequence.length)
return;
command.closeFindBar();
let marked = command.marked(aEvent);
if (util.isCaretEnabled())
{
if (marked)
{
command.resetMark(aEvent);
}
else
{
if ("blur" in aEvent.target) aEvent.target.blur();
gBrowser.focus();
_content.focus();
}
}
else
{
goDoCommand("cmd_selectNone");
}
if (KeySnail.windowType === "navigator:browser" && !marked)
{
key.generateKey(aEvent.originalTarget, KeyEvent.DOM_VK_ESCAPE, true);
}
});
// ========================== Key bindings =========================== //
key.setGlobalKey('C-M-r', function (ev) {
userscript.reload();
}, 'Reload the initialization file', true);
key.setGlobalKey('M-x', function (ev, arg) {
ext.select(arg, ev);
}, 'List exts and execute selected one', true);
key.setGlobalKey('M-:', function (ev) {
command.interpreter();
}, 'Command interpreter', true);
key.setGlobalKey(["<f1>", "b"], function (ev) {
key.listKeyBindings();
}, 'List all keybindings', false);
key.setGlobalKey('C-m', function (ev) {
key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_RETURN, true);
}, 'Generate the return key code', false);
key.setGlobalKey(["<f1>", "F"], function (ev) {
openHelpLink("firefox-help");
}, 'Display Firefox help', false);
key.setGlobalKey(["C-x", "l"], function (ev) {
command.focusToById("urlbar");
}, 'Focus to the location bar', true);
key.setGlobalKey(["C-x", "g"], function (ev) {
command.focusToById("searchbar");
}, 'Focus to the search bar', true);
key.setGlobalKey(["C-x", "t"], function (ev) {
command.focusElement(command.elementsRetrieverTextarea, 0);
}, 'Focus to the first textarea', true);
key.setGlobalKey(["C-x", "s"], function (ev) {
command.focusElement(command.elementsRetrieverButton, 0);
}, 'Focus to the first button', true);
key.setGlobalKey('M-w', function (ev) {
command.copyRegion(ev);
}, 'Copy selected text', true);
key.setGlobalKey('C-s', function (ev) {
command.iSearchForwardKs(ev);
}, 'Emacs like incremental search forward', true);
key.setGlobalKey('C-r', function (ev) {
command.iSearchBackwardKs(ev);
}, 'Emacs like incremental search backward', true);
key.setGlobalKey(["C-x", "k"], function (ev) {
BrowserCloseTabOrWindow();
}, 'Close tab / window', false);
key.setGlobalKey(["C-x", "K"], function (ev) {
closeWindow(true);
}, 'Close the window', false);
key.setGlobalKey(["C-c", "u"], function (ev) {
undoCloseTab();
}, 'Undo closed tab', false);
key.setGlobalKey(["C-x", "n"], function (ev) {
OpenBrowserWindow();
}, 'Open new window', false);
key.setGlobalKey([['C-M-l'], ['M-n']], function (ev) {
getBrowser().mTabContainer.advanceSelectedTab(1, true);
}, 'Select next tab', false);
key.setGlobalKey([['C-M-h'], ['M-p']], function (ev) {
getBrowser().mTabContainer.advanceSelectedTab(-1, true);
}, 'Select previous tab', false);
key.setGlobalKey(["C-x", "C-c"], function (ev) {
goQuitApplication();
}, 'Exit Firefox', true);
key.setGlobalKey(["C-x", "o"], function (ev, arg) {
command.focusOtherFrame(arg);
}, 'Select next frame', false);
key.setGlobalKey(["C-x", "1"], function (ev) {
window.loadURI(ev.target.ownerDocument.location.href);
}, 'Show current frame only', true);
key.setGlobalKey(["C-x", "C-s"], function (ev) {
saveDocument(window.content.document);
}, 'Save current page to the file', true);
key.setGlobalKey(["C-c", "C-c", "C-v"], function (ev) {
toJavaScriptConsole();
}, 'Display JavaScript console', true);
key.setGlobalKey(["C-c", "C-c", "C-c"], function (ev) {
command.clearConsole();
}, 'Clear Javascript console', true);
key.setGlobalKey(["C-x", "C-b"], function (ev, arg) {
ext.exec("tanything", arg);
}, "view all tabs", true);
key.setGlobalKey(['C-x', 'C-f'], function () {
prompt.read("Open url in new tab:", function (aStr) {
gBrowser.loadOneTab(aStr, {inBackground: false});
});
}, 'Open a URL in a new tab', true);
key.setEditKey(["C-x", "h"], function (ev) {
command.selectAll(ev);
}, 'Select whole text', true);
key.setEditKey([["C-SPC"], ["C-@"]], function (ev) {
command.setMark(ev);
}, 'Set the mark', true);
key.setEditKey('C-o', function (ev) {
command.openLine(ev);
}, 'Open line', false);
key.setEditKey([["C-x", "u"], ["C-_"]], function (ev) {
display.echoStatusBar("Undo!", 2000);
goDoCommand("cmd_undo");
}, 'Undo', false);
key.setEditKey('C-\\', function (ev) {
display.echoStatusBar("Redo!", 2000);
goDoCommand("cmd_redo");
}, 'Redo', false);
key.setEditKey('C-a', function (ev) {
command.beginLine(ev);
}, 'Beginning of the line', false);
key.setEditKey('C-e', function (ev) {
command.endLine(ev);
}, 'End of the line', false);
key.setEditKey('C-f', function (ev) {
command.nextChar(ev);
}, 'Forward char', false);
key.setEditKey('C-b', function (ev) {
command.previousChar(ev);
}, 'Backward char', false);
key.setEditKey('M-f', function (ev) {
command.forwardWord(ev);
}, 'Next word', false);
key.setEditKey('M-b', function (ev) {
command.backwardWord(ev);
}, 'Previous word', false);
key.setEditKey('C-n', function (ev) {
command.nextLine(ev);
}, 'Next line', false);
key.setEditKey('C-p', function (ev) {
command.previousLine(ev);
}, 'Previous line', false);
key.setEditKey('C-v', function (ev) {
command.pageDown(ev);
}, 'Page down', false);
key.setEditKey('M-v', function (ev) {
command.pageUp(ev);
}, 'Page up', false);
key.setEditKey('M-<', function (ev) {
command.moveTop(ev);
}, 'Beginning of the text area', false);
key.setEditKey('M->', function (ev) {
command.moveBottom(ev);
}, 'End of the text area', false);
key.setEditKey('C-d', function (ev) {
goDoCommand("cmd_deleteCharForward");
}, 'Delete forward char', false);
key.setEditKey('C-h', function (ev) {
goDoCommand("cmd_deleteCharBackward");
}, 'Delete backward char', false);
key.setEditKey('M-d', function (ev) {
command.deleteForwardWord(ev);
}, 'Delete forward word', false);
key.setEditKey([["C-<backspace>"], ["M-<delete>"]], function (ev) {
command.deleteBackwardWord(ev);
}, 'Delete backward word', false);
key.setEditKey('M-u', function (ev, arg) {
command.wordCommand(ev, arg, command.upcaseForwardWord, command.upcaseBackwardWord);
}, 'Convert following word to upper case', false);
key.setEditKey('M-l', function (ev, arg) {
command.wordCommand(ev, arg, command.downcaseForwardWord, command.downcaseBackwardWord);
}, 'Convert following word to lower case', false);
key.setEditKey('M-c', function (ev, arg) {
command.wordCommand(ev, arg, command.capitalizeForwardWord, command.capitalizeBackwardWord);
}, 'Capitalize the following word', false);
key.setEditKey('C-k', function (ev) {
command.killLine(ev);
}, 'Kill the rest of the line', false);
key.setEditKey('C-y', command.yank, 'Paste (Yank)', false);
key.setEditKey('M-y', command.yankPop, 'Paste pop (Yank pop)', true);
key.setEditKey('C-M-y', function (ev) {
if (!command.kill.ring.length)
return;
let ct = command.getClipboardText();
if (!command.kill.ring.length || ct != command.kill.ring[0])
command.pushKillRing(ct);
prompt.selector(
{
message: "Paste:",
collection: command.kill.ring,
callback: function (i) { if (i >= 0) key.insertText(command.kill.ring[i]); }
}
);
}, 'Show kill-ring and select text to paste', true);
key.setEditKey('C-w', function (ev) {
goDoCommand("cmd_copy");
goDoCommand("cmd_delete");
command.resetMark(ev);
}, 'Cut current region', true);
key.setEditKey(["C-x", "r", "d"], function (ev, arg) {
command.replaceRectangle(ev.originalTarget, "", false, !arg);
}, 'Delete text in the region-rectangle', true);
key.setEditKey(["C-x", "r", "t"], function (ev) {
prompt.read("String rectangle: ", function (aStr, aInput) {
command.replaceRectangle(aInput, aStr);
},
ev.originalTarget);
}, 'Replace text in the region-rectangle with user inputted string', true);
key.setEditKey(["C-x", "r", "o"], function (ev) {
command.openRectangle(ev.originalTarget);
}, 'Blank out the region-rectangle, shifting text right', true);
key.setEditKey(["C-x", "r", "k"], function (ev, arg) {
command.kill.buffer = command.killRectangle(ev.originalTarget, !arg);
}, 'Delete the region-rectangle and save it as the last killed one', true);
key.setEditKey(["C-x", "r", "y"], function (ev) {
command.yankRectangle(ev.originalTarget, command.kill.buffer);
}, 'Yank the last killed rectangle with upper left corner at point', true);
key.setViewKey([["C-n"], ["j"]], function (ev) {
key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_DOWN, true);
}, 'Scroll line down', false);
key.setViewKey([["C-p"], ["k"]], function (ev) {
key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_UP, true);
}, 'Scroll line up', false);
key.setViewKey([["C-f"], ["."]], function (ev) {
key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_RIGHT, true);
}, 'Scroll right', false);
key.setViewKey([["C-b"], [","]], function (ev) {
key.generateKey(ev.originalTarget, KeyEvent.DOM_VK_LEFT, true);
}, 'Scroll left', false);
key.setViewKey([["M-v"], ["b"], ["<backspace>"]], function (ev) {
goDoCommand("cmd_scrollPageUp");
}, 'Scroll page up', false);
key.setViewKey('C-v', function (ev) {
goDoCommand("cmd_scrollPageDown");
}, 'Scroll page down', false);
key.setViewKey(["M-<"], function (ev) {
goDoCommand("cmd_scrollTop");
}, 'Scroll to the top of the page', true);
key.setViewKey(["M->"], function (ev) {
goDoCommand("cmd_scrollBottom");
}, 'Scroll to the bottom of the page', true);
key.setViewKey('l', function (ev) {
getBrowser().mTabContainer.advanceSelectedTab(1, true);
}, 'Select next tab', false);
key.setViewKey('h', function (ev) {
getBrowser().mTabContainer.advanceSelectedTab(-1, true);
}, 'Select previous tab', false);
key.setViewKey('x', function (ev, arg) {
shell.input(null, arg);
}, 'List and execute commands', true);
key.setViewKey('R', function (ev) {
BrowserReload();
}, 'Reload the page', true);
key.setViewKey('B', function (ev) {
BrowserBack();
}, 'Back', false);
key.setViewKey('F', function (ev) {
BrowserForward();
}, 'Forward', false);
key.setViewKey(["C-x", "h"], function (ev) {
goDoCommand("cmd_selectAll");
}, 'Select all', true);
key.setViewKey('f', function (ev) {
command.focusElement(command.elementsRetrieverTextarea, 0);
}, 'Focus to the first textarea', true);
key.setViewKey('e', function (aEvent, aArg) {
ext.exec("hok-start-foreground-mode", aArg);
}, 'HoK - Foreground hint mode', true);
key.setViewKey('E', function (aEvent, aArg) {
ext.exec("hok-start-background-mode", aArg);
}, 'HoK - Background hint mode', true);
key.setViewKey(';', function (aEvent, aArg) {
ext.exec("hok-start-extended-mode", aArg);
}, 'HoK - Extended hint mode', true);
key.setViewKey(['C-c', 'C-e'], function (aEvent, aArg) {
ext.exec("hok-start-continuous-mode", aArg);
}, 'Start continuous HaH', true);
key.setViewKey('c', function (aEvent, aArg) {
ext.exec("hok-yank-foreground-mode", aArg);
}, 'Hok - Foreground yank hint mode', true);
key.setViewKey('q', function (aEvent, aArg) {
BrowserCloseTabOrWindow();
}, 'Close tab / window', true);
key.setViewKey('g', function () {
prompt.read("Open url in current tab:", function (aStr) {
gBrowser.loadURI(aStr, null, null);
});
}, 'Open a URL in the current tab', true);
key.setViewKey('G', function () {
prompt.read("Open url in current tab:", function (aStr) {
gBrowser.loadURI(aStr, null, null);
}, null, null, content.location.href);
}, 'Edit the current url', true);
key.setCaretKey([["C-a"], ["^"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectBeginLine") : goDoCommand("cmd_beginLine");
}, 'Move caret to the beginning of the line', false);
key.setCaretKey([["C-e"], ["$"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectEndLine") : goDoCommand("cmd_endLine");
}, 'Move caret to the end of the line', false);
key.setCaretKey([["C-n"], ["j"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectLineNext") : goDoCommand("cmd_scrollLineDown");
}, 'Move caret to the next line', false);
key.setCaretKey([["C-p"], ["k"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectLinePrevious") : goDoCommand("cmd_scrollLineUp");
}, 'Move caret to the previous line', false);
key.setCaretKey([["C-f"], ["l"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectCharNext") : goDoCommand("cmd_scrollRight");
}, 'Move caret to the right', false);
key.setCaretKey([["C-b"], ["h"], ["C-h"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectCharPrevious") : goDoCommand("cmd_scrollLeft");
}, 'Move caret to the left', false);
key.setCaretKey([["M-f"], ["w"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectWordNext") : goDoCommand("cmd_wordNext");
}, 'Move caret to the right by word', false);
key.setCaretKey([["M-b"], ["W"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectWordPrevious") : goDoCommand("cmd_wordPrevious");
}, 'Move caret to the left by word', false);
key.setCaretKey([["C-v"], ["SPC"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectPageNext") : goDoCommand("cmd_movePageDown");
}, 'Move caret down by page', false);
key.setCaretKey([["M-v"], ["b"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectPagePrevious") : goDoCommand("cmd_movePageUp");
}, 'Move caret up by page', false);
key.setCaretKey([["M-<"], ["g"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectTop") : goDoCommand("cmd_scrollTop");
}, 'Move caret to the top of the page', false);
key.setCaretKey([["M->"], ["G"]], function (ev) {
ev.target.ksMarked ? goDoCommand("cmd_selectEndLine") : goDoCommand("cmd_endLine");
}, 'Move caret to the end of the line', false);
key.setCaretKey('J', function (ev) {
util.getSelectionController().scrollLine(true);
}, 'Scroll line down', false);
key.setCaretKey('K', function (ev) {
util.getSelectionController().scrollLine(false);
}, 'Scroll line up', false);
key.setCaretKey(',', function (ev) {
util.getSelectionController().scrollHorizontal(true);
goDoCommand("cmd_scrollLeft");
}, 'Scroll left', false);
key.setCaretKey('.', function (ev) {
goDoCommand("cmd_scrollRight");
util.getSelectionController().scrollHorizontal(false);
}, 'Scroll right', false);
key.setCaretKey('z', function (ev) {
command.recenter(ev);
}, 'Scroll to the cursor position', false);
key.setCaretKey([["C-SPC"], ["C-@"]], function (ev) {
command.setMark(ev);
}, 'Set the mark', true);
key.setCaretKey(':', function (ev, arg) {
shell.input(null, arg);
}, 'List and execute commands', true);
key.setCaretKey('R', function (ev) {
BrowserReload();
}, 'Reload the page', true);
key.setCaretKey('B', function (ev) {
BrowserBack();
}, 'Back', false);
key.setCaretKey('F', function (ev) {
BrowserForward();
}, 'Forward', false);
key.setCaretKey(["C-x", "h"], function (ev) {
goDoCommand("cmd_selectAll");
}, 'Select all', true);
key.setCaretKey('f', function (ev) {
command.focusElement(command.elementsRetrieverTextarea, 0);
}, 'Focus to the first textarea', true);
key.setViewKey([':', 'b'], function (ev, arg) {
ext.exec("bmany-list-all-bookmarks", arg, ev);
}, 'bmany - List all bookmarks');
key.setViewKey([':', 'B'], function (ev, arg) {
ext.exec("bmany-list-bookmarklets", arg, ev);
}, "bmany - List all bookmarklets");
key.setViewKey([':', 'k'], function (ev, arg) {
ext.exec("bmany-list-bookmarks-with-keyword", arg, ev);
}, "bmany - List bookmarks with keyword");
key.setViewKey([':', 't'], function (ev, arg) {
ext.exec("bmany-list-bookmarks-with-tag", arg, ev);
}, "bmany - List bookmarks with tag");
var oni =
(function() {
const Cc = Components.classes;
const Ci = Components.interfaces;
const bmService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"]
.getService(Ci.nsINavBookmarksService);
const ioService = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
const tagService = Cc["@mozilla.org/browser/tagging-service;1"]
.getService(Ci.nsITaggingService);
function _saveBookmark(tags, bookmark) {
var uri = ioService.newURI(bookmark.url, null, null);
if (!bmService.isBookmarked(uri)) {
bmService.insertBookmark(bmService.bookmarksMenuFolder, uri,
bmService.DEFAULT_INDEX, bookmark.title);
tagService.tagURI(uri, tags.split(',').map(String.trim));
display.prettyPrint("Successfully bookmarked \"" + bookmark.title + "\"",
{timeout: 3000, fade: 250});
} else {
display.prettyPrint("Already bookmarked",
{timeout: 3000, fade: 250});
}
}
function _readTags(url, bookmark) {
bookmark.url = url;
prompt.read(
"tags (comma-separated):",
_saveBookmark,
bookmark, null
);
}
function _readURL(title) {
prompt.read(
"url:",
_readTags,
{title: title}, null,
window.content.location.href
);
}
function _readTitle() {
prompt.read(
"title:",
_readURL,
null, null,
window.content.document.title
);
}
function addBookmark() {
_readTitle();
}
function removeBookmark() {
var uri = ioService.newURI(window.content.location.href, null, null);
if (bmService.isBookmarked(uri)) {
bmService.getBookmarkIdsForURI(uri, {}).forEach(function(id) {
bmService.removeItem(id);
});
display.prettyPrint("Removed bookmark",
{timeout: 3000, fade: 250});
} else {
display.prettyPrint("No bookmark found for this page",
{timeout: 3000, fade: 250});
}
}
function tagBookmark() {
var uri = ioService.newURI(window.content.location.href, null, null);
if (bmService.isBookmarked(uri)) {
var tags = tagService.getTagsForURI(uri, {});
prompt.read("tags:", function(newTags) {
tagService.untagURI(uri, tags);
tagService.tagURI(uri, newTags.split(',').map(String.trim));
display.prettyPrint("Retagged bookmark",
{timeout: 3000, fade: 250});
}, null, null, tags.join(', '));
} else {
display.prettyPrint("No bookmark found for this page",
{timeout: 3000, fade: 250});
}
}
var self = {
addBookmark: addBookmark,
removeBookmark: removeBookmark,
tagBookmark: tagBookmark
};
return self;
})();
ext.add('oni-add-bookmark', function(ev, arg) { oni.addBookmark(arg); },
M({en: "oni - Add bookmark"}));
ext.add('oni-rm-bookmark', function(ev, arg) { oni.removeBookmark(arg); },
M({en: "oni - Remove bookmark"}));
ext.add('oni-tag-bookmark', function(ev, arg) { oni.tagBookmark(arg); },
M({en: "oni - Tag bookmark"}));
key.setViewKey([':', 'a'], function(ev, arg) {
ext.exec("oni-add-bookmark", arg, ev);
}, "Bookmark this page");
key.setViewKey([':', 'K'], function(ev, arg) {
ext.exec("oni-rm-bookmark", arg, ev);
}, "Remove the bookmark for this page");
key.setViewKey([':', 'T'], function(ev, arg) {
ext.exec("oni-tag-bookmark", arg, ev);
}, "Change the tags for this page");