diff --git a/keysnail/.keysnail.js b/keysnail/.keysnail.js new file mode 100644 index 0000000..93898f6 --- /dev/null +++ b/keysnail/.keysnail.js @@ -0,0 +1,519 @@ +// ========================== KeySnail Init File =========================== // + +// 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"; +//}}%PRESERVE% +// ========================================================================= // + +// ========================= Special key settings ========================== // + +key.quitKey = "C-g"; +key.helpKey = ""; +key.escapeKey = "C-q"; +key.macroStartKey = ""; +key.macroEndKey = ""; +key.suspendKey = ""; +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(["", "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(["", "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-"], ["M-"]], 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()) + (!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"], [""]], 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(':', 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);