// ========================== 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 //}}%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", function (ev) { getBrowser().mTabContainer.advanceSelectedTab(1, true); }, "Select next tab", false); key.setGlobalKey("C-M-h", 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-f"], function (ev) { BrowserOpenFileWindow(); }, "Open the local file", 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.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(); 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); j }, 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.setEditKey("M-n", function (ev) { command.walkInputElement(command.elementsRetrieverTextarea, true, true); }, "Focus to the next text area", false); key.setEditKey("M-p", function (ev) { command.walkInputElement(command.elementsRetrieverTextarea, false, true); }, "Focus to the previous text area", false); 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-<"], ["g"]], function (ev) { goDoCommand("cmd_scrollTop"); }, "Scroll to the top of the page", true); key.setViewKey([["M->"], ["G"]], 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("M-p", function (ev) { command.walkInputElement(command.elementsRetrieverButton, true, true); }, "Focus to the next button", false); key.setViewKey("M-n", function (ev) { command.walkInputElement(command.elementsRetrieverButton, false, true); }, "Focus to the previous button", false); 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.setCaretKey("M-p", function (ev) { command.walkInputElement(command.elementsRetrieverButton, true, true); }, "Focus to the next button", false); key.setCaretKey("M-n", function (ev) { command.walkInputElement(command.elementsRetrieverButton, false, true); }, "Focus to the previous button", false); // ========================== General =========================== // key.setGlobalKey(['C-c','C-i'], function (ev, arg) { util.setBoolPref("accessibility.browsewithcaret", !util.isCaretEnabled()); }, 'Enter to caret mode', true); // ========================== HoK =========================== // hook.setHook("PluginLoaded", function () { if (!plugins.hok) return; /* HoK 1.3.9+ required */ plugins.hok.pOptions.selector = plugins.hok.pOptions.selector /* feedly */ + ", *[data-uri]" + ", *[data-selector-toggle]" + ", *[data-page-action]" + ", *[data-app-action]" /* google plus */ + ", *[guidedhelpid]" /* twitter */ + ", *[data-item-count]"; }); key.setGlobalKey(["C-x","C-f"], function (aEvent, aArg) { ext.exec("hok-start-foreground-mode", aArg); }, "Hok - Foreground hint mode", true); key.setGlobalKey(["C-x", "f"], function (aEvent, aArg) { ext.exec("hok-start-background-mode", aArg); }, "HoK - Background hint mode", true); key.setGlobalKey(["C-c", "C-e"], function (aEvent, aArg) { ext.exec("hok-start-continuous-mode", aArg); }, "Start continuous HaH", true); // ========================== bmanykey =========================== // key.setGlobalKey(["C-x", "r", "l"], function (ev, arg) { ext.exec("bmany-list-all-bookmarks", arg, ev); }, "bmany - List all bookmarks"); // ========================== anything.el =========================== // key.setGlobalKey(["C-x", "b"], function (ev, arg) { ext.exec("tanything", arg); }, "view all tabs", true);