Created
February 19, 2010 13:43
-
-
Save mooz/308705 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ========================== KeySnail Init File =========================== // | |
| // この領域は, GUI により設定ファイルを生成した際にも引き継がれます | |
| // 特殊キー, キーバインド定義, フック, ブラックリスト以外のコードは, この中に書くようにして下さい | |
| // ========================================================================= // | |
| //{{%PRESERVE% | |
| userscript.addLoadPath("~/programming/js"); | |
| // Prompt settings {{ ======================================================= // | |
| prompt.rows = 15; | |
| prompt.useMigemo = true; | |
| prompt.migemoMinWordLength = 3; | |
| prompt.displayDelayTime = 200; | |
| prompt.setActionKey("selector", "?", "prompt-display-keymap-help"); | |
| // }} ======================================================================= // | |
| // Misc {{ ================================================================== // | |
| // keyboard macro | |
| macro.sleepTime = 50; | |
| // kill ring | |
| command.kill.killRingMax = 15; | |
| command.kill.textLengthMax = -1; | |
| // }} ======================================================================= // | |
| // Dabbrev {{ =============================================================== // | |
| plugins.options["dabbrev.next_key"] = "C-j"; | |
| plugins.options["dabbrev.prev_key"] = "C-k"; | |
| plugins.options["dabbrev.candidates"] = [ | |
| "stillpedant", | |
| "stillpedant@gmail.com" | |
| ]; | |
| // }} ======================================================================= // | |
| // KKK {{ =================================================================== // | |
| plugins.options["kkk.sites"] = ["^http://([0-9a-zA-Z]+\\.)?github\\.com/"]; | |
| // }} ======================================================================= // | |
| // Yatck {{ ================================================================= // | |
| plugins.options["twitter_client.timeline_count_every_updates"] = 20; | |
| plugins.options["twitter_client.log_level"] = 0; | |
| plugins.options["twitter_client.popup_new_statuses"] = false; | |
| plugins.options["twitter_client.keymap"] = { | |
| "C-z" : "prompt-toggle-edit-mode", | |
| "SPC" : "prompt-next-page", | |
| "b" : "prompt-previous-page", | |
| "j" : "prompt-next-completion", | |
| "k" : "prompt-previous-completion", | |
| "g" : "prompt-beginning-of-candidates", | |
| "G" : "prompt-end-of-candidates", | |
| "q" : "prompt-cancel", | |
| // local | |
| "t" : "tweet", | |
| "r" : "reply", | |
| "R" : "retweet", | |
| "D" : "delete-tweet", | |
| "f" : "add-to-favorite", | |
| "v" : "display-entire-message", | |
| "V" : "view-in-twitter", | |
| "c" : "copy-tweet", | |
| "i" : "copy-user-id", | |
| "s" : "show-target-status", | |
| "@" : "show-mentions", | |
| "/" : "search-word", | |
| "o" : "open-url,n", | |
| ">" : "select-next-filter", | |
| "<" : "select-previous-filter" | |
| }; | |
| plugins.options["twitter_client.tweet_keymap"] = { | |
| "C-RET" : "prompt-decide", | |
| "RET" : "" | |
| }; | |
| // }} ======================================================================= // | |
| // Bmany {{ ================================================================= // | |
| plugins.options["bmany.default_open_type"] = "tab"; | |
| plugins.options["bmany.keymap"] = { | |
| "O" : "open-background-tab,cn" | |
| }; | |
| // }} ======================================================================= // | |
| // K2Emacs {{ =============================================================== // | |
| // sync with keysnails editor | |
| plugins.options["K2Emacs.editor"] = util.getUnicharPref("extensions.keysnail.userscript.editor"); | |
| // }} ======================================================================= // | |
| // Prefer LDRize {{ ========================================================= // | |
| plugins.options["prefer_ldrize.keymap"] = { | |
| "j" : null, | |
| "k" : null, | |
| "p" : null, | |
| "v" : null, | |
| "o" : null | |
| }; | |
| plugins.options["prefer_ldrize.black_list"] = [ | |
| "www\\.youtube\\.com/watch.*", | |
| "(www|tw|es|de|)\\.nicovideo\\.jp/watch/.*" | |
| ]; | |
| // }} ======================================================================= // | |
| // Site local keymap {{ ===================================================== // | |
| var local = {}; | |
| plugins.options["remap_pages.local_keymap"] = local; | |
| function fake(k, i, type) function () { key.feed(k, i, type); }; | |
| function pass(k, i, type) [k, fake(k, i, type)]; | |
| function ignore(k) [k, null]; | |
| local["^https?://mail.google.com/mail/"] = [ | |
| pass(['g', 'i'], 3), | |
| pass(['g', 's'], 3), | |
| pass(['g', 't'], 3), | |
| pass(['g', 'd'], 3), | |
| pass(['g', 'a'], 3), | |
| pass(['g', 'b'], 3), | |
| pass(['g', 'c'], 3), | |
| pass(['g', 'k'], 3), | |
| // thread list | |
| pass(['*', 'a'], 3), | |
| pass(['*', 'n'], 3), | |
| pass(['*', 'r'], 3), | |
| pass(['*', 'u'], 3), | |
| pass(['*', 's'], 3), | |
| pass(['*', 't'], 3), | |
| // navigation | |
| ['u', null], | |
| ['k', null], | |
| ['j', null], | |
| ['k', null], | |
| ['o', null], | |
| ['p', null], | |
| ['n', null], | |
| // application | |
| ['c', null], | |
| ['/', null], | |
| ['q', null], | |
| ['?', null], | |
| // manipulation | |
| ['x', null], | |
| ['s', null], | |
| ['y', null], | |
| ['e', null], | |
| ['m', null], | |
| ['!', null], | |
| ['#', null], | |
| ['r', null], | |
| ['R', null], | |
| ['a', null], | |
| ['A', null], | |
| ['f', null], | |
| ['F', null], | |
| ['N', null], | |
| pass(['<tab>', 'RET'], 3), | |
| ['ESC', null], | |
| [']', null], | |
| ['[', null], | |
| ['z', null], | |
| ['.', null], | |
| ['I', null], | |
| ['U', null], | |
| ['C-s', null], | |
| ['T', null] | |
| ]; | |
| local["^http://www.google.(co.jp|com)/reader/view/"] = [ | |
| // jump | |
| pass(["g", "h"]), | |
| pass(["g", "a"]), | |
| pass(["g", "s"]), | |
| pass(["g", "S"]), | |
| pass(["g", "u"]), | |
| pass(["g", "t"]), | |
| pass(["g", "T"]), | |
| pass(["g", "d"]), | |
| pass(["g", "f"]), | |
| pass(["g", "F"]), | |
| pass(["g", "c"]), | |
| pass(["g", "C"]), | |
| pass(["g", "e"]), | |
| pass(["g", "p"]), | |
| // navigation | |
| ["j", null], | |
| ["k", null], | |
| ["n", null], | |
| ["p", null], | |
| ["N", null], | |
| ["P", null], | |
| ["X", null], | |
| ["o", null], | |
| // item | |
| ["s", null], | |
| ["L", null], | |
| // ["t", null], | |
| // ["e", null], | |
| ["S", null], | |
| ["d", null], | |
| ["v", null], | |
| ["o", null], | |
| ["c", null], | |
| ["C", null], | |
| ["m", null], | |
| ["A", null], | |
| ["T", null], | |
| // application | |
| ["u", null], | |
| ["1", null], | |
| ["2", null], | |
| ["/", null], | |
| ["a", null], | |
| ["=", null], | |
| ["-", null], | |
| // reblog | |
| ["r", function () { | |
| let link = content.document.querySelector("#current-entry a.entry-title-link"); | |
| if (link && plugins.kungfloo) | |
| plugins.kungfloo.reblog(link, false, false, ["FFFFOUND", "Flickr", "Tumblr"]); | |
| }] | |
| ]; | |
| local["^http://www.youtube.com/watch"] = [ | |
| ["p" , function () { key.feed("M-p"); }], | |
| ["q" , function () { key.feed("M-q"); }], | |
| ["9" , null], | |
| ["0" , null], | |
| ["m" , function () { key.feed("M-m"); }], | |
| ["," , null], | |
| ["." , null], | |
| ["<" , null], | |
| [">" , null] | |
| ]; | |
| local["^http://(www|tw|es|de|).nicovideo.jp/watch/*"] = [ | |
| ["i", function (ev, arg) { ext.exec("nicoinfo", arg); }], | |
| ["p", function (ev, arg) { ext.exec("nicopause", arg); }], | |
| ["m", function (ev, arg) { ext.exec("nicomute", arg); }], | |
| ["r", function (ev, arg) { ext.exec("nicorepeat", arg); }], | |
| ["z", function (ev, arg) { ext.exec("nicosize", arg); }], | |
| ["h", function (ev, arg) { ext.exec("nicommentvisible", arg); }], | |
| [".", function (ev, arg) { ext.exec("nicoseekForward", 10); }], | |
| [",", function (ev, arg) { ext.exec("nicoseekBackward", 10); }], | |
| ["0", function (ev, arg) { ext.exec("nicovolumeIncrement", 20); }], | |
| ["9", function (ev, arg) { ext.exec("nicovolumeDecrement", 20); }], | |
| ["-", function (ev, arg) { ext.exec("nicovolume", 100); }] | |
| ]; | |
| // }} ======================================================================= // | |
| // Unfuck your enemies {{ =================================================== // | |
| plugins.options["unfuck_your_enemies.site_info"] = { | |
| "http://github\\.com/[^/]+/[^/]+/raw/.+/([^?]+)": { | |
| xpi: ["application/x-xpinstall", "attachment"] | |
| }, | |
| "http://[^\.]+\\.googlecode\\.com/issues/attachment?(?:.*&name|name)=([^&]+)": { | |
| js : ["text/plain", "inline"] | |
| }, | |
| "http://[^\.]+\\.googlecode\\.com/files/([^?]+)": { | |
| js : "text/plain" | |
| } | |
| }; | |
| // }} ======================================================================= // | |
| // HoK {{ =================================================================== // | |
| plugins.options["hok.user_keymap"] = {}; | |
| plugins.options["hok.user_keymap"]["C-m"] = "Enter"; | |
| plugins.options["hok.local_queries"] = [ | |
| ["^http://www\\.google\\.(co\\.jp|com)/reader/view/", | |
| "*.unselectable, *.link, *.section-button"], | |
| ["^http://b\\.hatena\\.ne\\.jp/entry/", | |
| "span.hatena-star-add-button, li#pin-header img, span#colorselecter"], | |
| ["^http://www.google.co.jp/ig", | |
| "*.subject, *.thread"] | |
| ]; | |
| // }} ======================================================================= // | |
| // Tanything {{ ============================================================= // | |
| plugins.options["tanything_opt.keymap"] = { | |
| "C-z" : "prompt-toggle-edit-mode", //ローカルキーバインドモードを抜けて編集モードに移行 | |
| "SPC" : "prompt-next-page", | |
| "b" : "prompt-previous-page", //前のページに移動 | |
| "j" : "prompt-next-completion", //次のアイテムに移動 | |
| "k" : "prompt-previous-completion", //前のアイテム移動 | |
| "g" : "prompt-beginning-of-candidates", //最初のアイテムに移動 | |
| "G" : "prompt-end-of-candidates", //最後のアイテムに移動 | |
| "q" : "prompt-cancel", //プロンプトを消す | |
| // | |
| "o" : "localOpen", //選択したタブを開く | |
| "d" : "localClose", //選択したタブを閉じる | |
| "K" : "localLeftclose", | |
| "J" : "localRightclose", | |
| "*" : "localAllclose", | |
| "D" : "localDomainclose", | |
| "c" : "localClipUT", //選択したタブのタイトルとURLをHTMLタグつきでコピー | |
| "C" : "localClipU", //選択したタブのURLをHTMLタグつきでコピー | |
| "e" : "localMovetoend", //選択したタブを末尾に移動 | |
| "a" : "localMovetostart", //選択したタブを先頭に移動 | |
| "B" : "localAddBokmark" | |
| }; | |
| // }} ======================================================================= // | |
| // Exts {{ ================================================================== // | |
| function followRel(doc, pattern) { | |
| let link = doc.querySelector(util.format('a[rel~="%s"]', pattern)); | |
| plugins.hok.followLink(link, plugins.hok.CURRENT_TAB); | |
| } | |
| ext.add("follow-next-link", function () { followRel(content.document, "next"); }, "follow next link"); | |
| ext.add("follow-prev-link", function () { followRel(content.document, "prev"); }, "follow previous link"); | |
| ext.add("hatena-bookmark-popular-entries", function () { | |
| let head = (content.location.href.match("([a-z]+://[^/]+)/?") || {0:null})[0]; | |
| if (head) | |
| openUILinkIn("http://b.hatena.ne.jp/entrylist?sort=count&url=" + encodeURIComponent(head), "tab"); | |
| }, "このサイトのはてなブックマーク人気エントリーを一覧表示"); | |
| ext.add("source", function () { | |
| let plugins = util.readDirectory(userscript.pluginDir, true) | |
| .filter(function (file) !(file.leafName.match("^_.+\\.ks\\.js$") || | |
| !file.leafName.match("\\.ks\\.js$") || | |
| file.isDirectory())); | |
| prompt.selector( | |
| { | |
| message : "reload plugin:", | |
| collection : plugins.map(function (f) f.leafName), | |
| callback : function (i) { if (i >= 0) userscript.loadPlugin(plugins[i]); } | |
| }); | |
| }, "Load specified plugin"); | |
| (function () { | |
| function props(obj) [k for ([k, v] in new Iterator(obj)) if (typeof k === "string")]; | |
| // old, new | |
| function diff(o, n) { | |
| return { | |
| added : n.filter(function (e1) o.every(function (e2) e1 !== e2)), | |
| removed : o.filter(function (e1) n.every(function (e2) e1 !== e2)) | |
| }; | |
| } | |
| const name = "window-members"; | |
| ext.add("garbage-finder-store", function () { | |
| let member = props(window); | |
| persist.preserve(member, name); | |
| }, "Garbage Finder - Store"); | |
| ext.add("garbage-finder-check", function () { | |
| let oldMember = persist.restore(name); | |
| let result = diff(oldMember, props(window)); | |
| util.message("Added:\n" + result.added.join("\n")); | |
| util.message("Removed:\n" + result.removed.join("\n")); | |
| }, "Garbage Finder - Check"); | |
| })(); | |
| ext.add("xul-test", function () { | |
| function createDataURI(aXML) { | |
| const header = 'data:text/xml;charset=utf-8,'; | |
| return header + encodeURIComponent(aXML.toString()).replace(/(\r|\n)/g, ""); | |
| } | |
| var test = '<?xml version="1.0"?>' | |
| + '<?xml-stylesheet href="chrome://global/skin" type="text/css"?>' | |
| + '<dialog id="hoge-huga" title="Hoge Huga"' | |
| + ' xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"' | |
| + ' xmlns:html="http://www.w3.org/1999/xhtml" buttons="accept,cancel">' | |
| + '<vbox flex="1">' | |
| + '<description>てすと</description>' | |
| + '<listbox flex="1">' | |
| + '<listitem label="Ruby"/>' | |
| + '<listitem label="Emerald"/>' | |
| + '<listitem label="Sapphire" selected="true"/>' | |
| + '<listitem label="Diamond"/>' | |
| + '</listbox>' | |
| + '</vbox>' | |
| + '</dialog>'; | |
| window.openDialog(createDataURI(test), "hogehuga", "chrome,titlebar,centerscreen,resizable", "hoge-huga"); | |
| }, "XUL TEST"); | |
| ext.add("list-closed-tabs", function () { | |
| const fav = "chrome://mozapps/skin/places/defaultFavicon.png"; | |
| var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); | |
| var json = Cc["@mozilla.org/dom/json;1"].createInstance(Ci.nsIJSON); | |
| var closedTabs = [[tab.image || fav, tab.title] for each (tab in json.decode(ss.getClosedTabData(window)))]; | |
| if (!closedTabs.length) | |
| return void display.echoStatusBar("最近閉じたタブが見つかりませんでした", 2000); | |
| prompt.selector( | |
| { | |
| message : "select tab to undo:", | |
| collection : closedTabs, | |
| flags : [ICON | IGNORE, 0], | |
| callback : function (i) { if (i >= 0) window.undoCloseTab(i); } | |
| }); | |
| }, "List closed tabs"); | |
| ext.add("show-all-history", function() { | |
| PlacesCommandHook.showPlacesOrganizer('History'); | |
| }, "show-all-history"); | |
| ext.add("addon-manager", function() { | |
| gBrowser.loadURI('chrome://mozapps/content/extensions/extensions.xul'); | |
| }, "addon-manager"); | |
| ext.add("manage-password", function() { | |
| window.open('chrome://passwordmgr/content/passwordManager.xul', 'Toolkit:PasswordManager', 'chrome,resizable=yes'); | |
| }, "manage-password"); | |
| ext.add("open-keysnail-plugin-manager", function() { | |
| KeySnail.UserScript.openPluginManager(); | |
| }, "open-keysnail-plugin-manager"); | |
| ext.add("change-locale-to-english", function () { | |
| util.setUnicharPref("general.useragent.locale", "en-US"); | |
| }, "英語へ切り替え"); | |
| ext.add("change-locale-to-japanese", function () { | |
| util.setUnicharPref("general.useragent.locale", "ja"); | |
| }, "日本語へ切り替え"); | |
| ext.add("open-init-file-wizard", function () { | |
| userscript.openDialog(); | |
| }, "初期化ファイル作成ウィザード"); | |
| ext.add("download-statusbar-clear", function () { db_clearAll(); }, "Download Statusbar をクリア"); | |
| ext.add("change-style-sheet", function () { | |
| style.toggle(style.local("img { display:none; }", window.content.location.href), style.XHTML); | |
| }, "Stylish!"); | |
| ext.add("generate-plugin-table", function () { | |
| function getEn(aNodes) { | |
| if (typeof aNodes == "string") | |
| return aNodes; | |
| var length = aNodes.length(); | |
| if (length == 0) | |
| return ""; | |
| var text = aNodes[0].text(); | |
| return text.length ? text : ""; | |
| } | |
| var defaultIconURL = "http://github.com/mooz/keysnail/raw/master/skin/classic/keysnail/script.png"; | |
| for each (var plugin in plugins.context) | |
| { | |
| var info = plugin.PLUGIN_INFO; | |
| if (!info) | |
| continue; | |
| var iconURL = getEn(info.iconURL) || defaultIconURL; | |
| var updateURL = getEn(info.updateURL); | |
| var pluginName = getEn(info.name); | |
| var pluginDescription = getEn(info.description); | |
| var authorHomePageURL = getEn(info.author.@homepage); | |
| var authorName = getEn(info.author); | |
| var table = | |
| <tr> | |
| <td><img src={iconURL} /></td> | |
| <td><a href={updateURL}>{pluginName}</a></td> | |
| <td>{pluginDescription}</td> | |
| <td><a href={authorHomePageURL}>{authorName}</a></td> | |
| </tr>; | |
| util.message(table); | |
| } | |
| }, "プラグインリストのテーブルを生成"); | |
| ext.add("growl", function () { | |
| var length = Math.round(200 * Math.random()); | |
| plugins.lib.xulGrowl.update( | |
| {title: "こんにちはこんにちは!", | |
| message: Array(length).join("j"), | |
| link: "http://www.google.co.jp/"}); | |
| }, "notify"); | |
| ext.add("toggle-autopagerize", function (ev, arg) { | |
| plugins.hok.followLink( | |
| content.document.querySelector('div#autopagerize_help > div > a.autopagerize_link') | |
| ); | |
| }, M({ja: "Autopagerize の ON / OFF 切り替え", | |
| en: "Toggle Autopagerize status"})); | |
| // }} ======================================================================= // | |
| //}}%PRESERVE% | |
| // ========================================================================= // | |
| // ========================= Special key settings ========================== // | |
| key.quitKey = "C-g"; | |
| key.helpKey = "<f1>"; | |
| key.escapeKey = "C-q"; | |
| key.macroStartKey = "<f3>"; | |
| key.macroEndKey = "<f4>"; | |
| key.universalArgumentKey = "C-u"; | |
| key.negativeArgument1Key = ""; | |
| key.negativeArgument2Key = "C-M--"; | |
| key.negativeArgument3Key = "M--"; | |
| key.suspendKey = "<f2>"; | |
| // ================================= Hooks ================================= // | |
| hook.setHook('KeyBoardQuit', function (aEvent) { | |
| if (key.currentKeySequence.length) { | |
| return; | |
| } | |
| command.closeFindBar(); | |
| var 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-i', function (ev) { | |
| if (ev.target === document.getElementById("keysnail-prompt-textbox")) { | |
| ev.target.dispatchEvent(key.stringToKeyEvent("C-i", true)); | |
| } | |
| }, 'Tame C-i'); | |
| key.setGlobalKey(['C-x', 'b'], function (aEvent, aArg) { | |
| var tabs = gBrowser.mTabContainer.childNodes; | |
| var collection = []; | |
| for (var i = 0; i < tabs.length; ++i) { | |
| collection.push([tabs[i].image, tabs[i].label, tabs[i].linkedBrowser.contentDocument.URL]); | |
| } | |
| prompt.selector({ | |
| message: "pattern:", | |
| callback: function (aIndex) { | |
| if (aIndex >= 0) { | |
| gBrowser.mTabContainer.selectedIndex = aIndex; | |
| } | |
| }, | |
| collection: collection, | |
| header: ["Title", "URL"], | |
| flags: [ICON | IGNORE, 0, 0] | |
| }); | |
| }, '現在開いているタブ一覧を表示 & ジャンプ'); | |
| key.setGlobalKey(['C-x', 'g'], function () { | |
| command.focusToById("searchbar"); | |
| }, '検索バーへフォーカス', true); | |
| key.setGlobalKey(['C-x', 'K'], function (ev) { | |
| closeWindow(true); | |
| }, 'ウィンドウを閉じる'); | |
| key.setGlobalKey(['C-x', 'n'], function (ev) { | |
| ev.originalTarget.dispatchEvent(key.stringToKeyEvent("C-n", true)); | |
| }, 'ウィンドウを開く'); | |
| key.setGlobalKey(['C-x', 'C-c'], function (ev) { | |
| ev.originalTarget.dispatchEvent(key.stringToKeyEvent("C-q", true)); | |
| }, 'Firefox を終了'); | |
| key.setGlobalKey(['C-x', 'C-w'], function () { | |
| saveDocument(window.content.document); | |
| }, 'ファイルを保存'); | |
| key.setGlobalKey(['C-x', 'C-f'], function () { | |
| BrowserOpenFileWindow(); | |
| }, 'ファイルを開く'); | |
| key.setGlobalKey(['C-x', '1'], function (aEvent) { | |
| window.loadURI(aEvent.target.ownerDocument.location.href); | |
| }, '現在のフレームだけを表示'); | |
| key.setGlobalKey(['C-x', '0'], function (ev, arg) { | |
| SplitBrowser.activeBrowserCloseWindow(); | |
| }, '現在のフレームを閉じる'); | |
| key.setGlobalKey(['C-x', '2'], function (ev, arg) { | |
| SplitBrowser.addSubBrowser(window.content.location.href, SplitBrowser.activeSubBrowser, SplitBrowser.POSITION_BOTTOM); | |
| }, 'フレームを横に分割'); | |
| key.setGlobalKey(['C-x', '3'], function (ev, arg) { | |
| SplitBrowser.addSubBrowser(window.content.location.href, SplitBrowser.activeSubBrowser, SplitBrowser.POSITION_RIGHT); | |
| }, 'フレームを縦に分割'); | |
| key.setGlobalKey(['C-x', 'o'], function (aEvent, aArg) { | |
| command.focusOtherFrame(aArg); | |
| }, '次のフレームを選択', true); | |
| key.setGlobalKey(['C-x', 'z'], function (aEvent, aArg) { | |
| var savedLastFunc = key.lastFunc; | |
| if (!savedLastFunc) { | |
| return; | |
| } | |
| hook.hookList.PostCommand = [function (hookarg) { | |
| key.lastFunc = savedLastFunc; | |
| delete hook.hookList.PostCommand; | |
| }]; | |
| key.lastFunc(aEvent, aArg); | |
| }, 'ひとつ前のコマンドを繰り返す'); | |
| key.setGlobalKey(['C-x', ';'], function (ev, arg) { | |
| ext.exec("list-hateb-items", arg); | |
| }, 'はてなブックマークのアイテムを一覧表示', true); | |
| key.setGlobalKey(['C-x', 'k'], function (ev) { | |
| document.dispatchEvent(key.stringToKeyEvent("C-w", true)); | |
| }, 'タブ / ウィンドウを閉じる'); | |
| key.setGlobalKey(['C-x', 'r', 'l'], function (ev, arg) { | |
| ext.exec("bmany-list-all-bookmarks", arg, ev); | |
| }, 'ブクマ一覧', true); | |
| key.setGlobalKey(['C-x', 'r', 'SPC'], function (ev, arg) { | |
| ext.exec("scrollet-set-mark", arg, ev); | |
| }, 'Scrollet - マークをセット'); | |
| key.setGlobalKey(['C-x', 'r', 'j'], function (ev, arg) { | |
| ext.exec("scrollet-jump-to-mark", arg, ev); | |
| }, 'Scrollet - マークへジャンプ'); | |
| key.setGlobalKey(['C-c', 'b'], function (ev, arg) { | |
| var elem = document.commandDispatcher.focusedElement; | |
| if (elem) { | |
| elem.blur(); | |
| } | |
| gBrowser.focus(); | |
| _content.focus(); | |
| }, 'コンテンツにフォーカス', true); | |
| key.setGlobalKey(['C-c', 'C-f'], function (ev, arg) { | |
| var toolbox = document.getElementById("navigator-toolbox"); | |
| toolbox.hidden = !toolbox.hidden; | |
| if (arg || !toolbox.hidden) { | |
| var statusbar = document.getElementById("status-bar"); | |
| statusbar.hidden = toolbox.hidden; | |
| } | |
| }, '擬似フルスクリーン状態の切り替え', true); | |
| key.setGlobalKey(['C-c', 'C-c', 'C-v'], function () { | |
| toJavaScriptConsole(); | |
| }, 'Javascript コンソールを表示'); | |
| key.setGlobalKey(['C-c', 'C-c', 'C-c'], function () { | |
| command.clearConsole(); | |
| }, 'Javascript コンソールの表示をクリア'); | |
| key.setGlobalKey(['C-c', 'c', 'h'], function () { | |
| var tabs = gBrowser.mTabContainer.childNodes; | |
| for (var i = tabs.length - 1; tabs[i] != gBrowser.mCurrentTab; i--) {} | |
| for (i--; i >= 0; i--) { | |
| gBrowser.removeTab(tabs[i]); | |
| } | |
| }, '左側のタブを全て閉じる', true); | |
| key.setGlobalKey(['C-c', 'c', 'l'], function () { | |
| var tabs = gBrowser.mTabContainer.childNodes; | |
| for (var i = tabs.length - 1; tabs[i] != gBrowser.selectedTab; i--) { | |
| gBrowser.removeTab(tabs[i]); | |
| } | |
| }, '右側のタブを全て閉じる', true); | |
| key.setGlobalKey(['C-c', 'C-n', 'C-t'], function (ev, arg) { | |
| noscriptOverlay.allowPage(true); | |
| }, 'NoScript - ページを一時許可'); | |
| key.setGlobalKey(['C-c', 't'], function (ev, arg) { | |
| ext.exec("twitter-client-tweet", arg); | |
| }, 'つぶやく', true); | |
| key.setGlobalKey(['C-c', 'T'], function (ev, arg) { | |
| ext.exec("twitter-client-tweet-this-page", arg); | |
| }, 'このページのタイトルと URL を使ってつぶやく', true); | |
| key.setGlobalKey(['C-c', 's'], function (aEvent, aArg) { | |
| ext.exec("twitter-client-search-word", aArg); | |
| }, 'Twitter 検索', true); | |
| key.setGlobalKey(['C-c', 'p'], function (ev, arg) { | |
| var p = document.getElementById("keysnail-prompt"); | |
| if (p.hidden) { | |
| return; | |
| } | |
| document.getElementById("keysnail-prompt-textbox").focus(); | |
| }, 'プロンプトへフォーカス'); | |
| key.setGlobalKey('C-M-l', function () { | |
| gBrowser.mTabContainer.advanceSelectedTab(1, true); | |
| }, 'ひとつ右のタブへ'); | |
| key.setGlobalKey('C-M-h', function () { | |
| gBrowser.mTabContainer.advanceSelectedTab(-1, true); | |
| }, 'ひとつ左のタブへ'); | |
| key.setGlobalKey('C-M-r', function () { | |
| userscript.reload(); | |
| }, '設定ファイルを再読み込み'); | |
| key.setGlobalKey(['<f1>', 'b'], function () { | |
| key.listKeyBindings(); | |
| }, 'キーバインド一覧を表示'); | |
| key.setGlobalKey(['<f1>', 'F'], function () { | |
| openHelpLink("firefox-help"); | |
| }, 'Firefox のヘルプを表示'); | |
| key.setGlobalKey('C-m', function (aEvent) { | |
| key.generateKey(aEvent.originalTarget, KeyEvent.DOM_VK_RETURN, true, "keypress"); | |
| key.generateKey(aEvent.originalTarget, KeyEvent.DOM_VK_RETURN, true, "keydown"); | |
| }, 'リターンコードを生成'); | |
| key.setGlobalKey('C-j', function (aEvent, arg) { | |
| ext.exec("bmany-list-toolbar-bookmarks"); | |
| }, 'ブックマークツールバーのアイテムを開く', true); | |
| key.setGlobalKey('M-w', function (aEvent) { | |
| command.copyRegion(aEvent); | |
| }, '選択中のテキストをコピー'); | |
| key.setGlobalKey('C-s', function (aEvent) { | |
| command.iSearchForwardKs(aEvent); | |
| }, 'インクリメンタル検索'); | |
| key.setGlobalKey('C-r', function (ev) { | |
| command.iSearchBackwardKs(ev); | |
| }, '逆方向インクリメンタル検索'); | |
| key.setGlobalKey('C-M-p', function (ev, arg) { | |
| KeySnail.openPreference(); | |
| }, '設定ダイアログを開く', true); | |
| key.setGlobalKey('C-M-t', function (aEvent, aArg) { | |
| var defaultIcon = "chrome://keysnail/skin/icon16.png"; | |
| var collection = [[tab.image || defaultIcon, tab.label, tab.linkedBrowser.contentDocument.URL] for (tab in Array.prototype.slice.call(gBrowser.mTabs, 1))]; | |
| prompt.selector({ | |
| message: "select tab:", | |
| callback: function (aIndex) { | |
| if (aIndex >= 0) { | |
| gBrowser.mTabContainer.selectedIndex = aIndex; | |
| } | |
| }, | |
| collection: collection, | |
| header: ["Tab", "URL"], | |
| style: [null, "color:#00268d;"], | |
| flags: [ICON | IGNORE, 0, 0] | |
| }); | |
| }, '現在開いているタブ一覧を表示 & ジャンプ'); | |
| key.setGlobalKey('C-:', function (aEvent, aArg) { | |
| ext.exec("prefer-ldrize-toggle-status", aArg); | |
| }, 'LDRize 優先状態の切り替え', true); | |
| key.setGlobalKey('C-9', function (ev, arg) { | |
| ext.exec("hogehoge"); | |
| }, 'Text', true); | |
| key.setGlobalKey('C-;', function (ev, arg) { | |
| ext.exec("site-local-keymap-toggle-status", arg, ev); | |
| }, 'サイトローカル・キーマップの有効状態を切り替え', true); | |
| key.setGlobalKey('C-0', function (ev, arg) { | |
| var length = Math.round(10 * Math.random()); | |
| plugins.lib.xulGrowl.update({ | |
| title: "Hello!", | |
| message: Array(length).join("Hello!"), | |
| link: "http://www.google.co.jp/" | |
| }); | |
| }, 'Growl', true); | |
| key.setGlobalKey('M-:', function (ev, arg) { | |
| command.interpreter(ev, arg); | |
| }, 'Eval', true); | |
| key.setGlobalKey('M-x', function (aEvent, aArg) { | |
| ext.select(aArg, aEvent); | |
| }, 'エクステ一覧'); | |
| key.setViewKey('C-a', function (ev, arg) { | |
| ext.exec("tanything", arg); | |
| }, 'タブを一覧表示', true); | |
| key.setViewKey('s', function (ev, arg) { | |
| var engines = util.suggest.getEngines(); | |
| var suggestEngines = [util.suggest.ss.getEngineByName("Google")]; | |
| var collection = engines.map((function (engine)[(engine.iconURI || { | |
| spec: "" | |
| }).spec, engine.name, engine.description])); | |
| prompt.selector({ | |
| message: "engine:", | |
| collection: collection, | |
| flags: [ICON | IGNORE, 0, 0], | |
| header: ["Name", "Description"], | |
| keymap: { | |
| s: "prompt-decide", | |
| j: "prompt-next-completion", | |
| k: "prompt-previous-completion" | |
| }, | |
| callback: function (i) { | |
| if (i >= 0) { | |
| util.suggest.searchWithSuggest(engines[i], suggestEngines, "tab"); | |
| } | |
| } | |
| }); | |
| }, 'Search With Suggest', true); | |
| key.setViewKey('>', function (ev, arg) { | |
| var url = content.location.href; | |
| var pattern = /(.*)([0-9]+)([^0-9]*)$/; | |
| var digit = url.match(pattern); | |
| if (digit[1] && digit[2]) { | |
| let next = +digit[2] + (arg ? arg : 1); | |
| content.location.href = digit[1] + next + (digit[3] || ""); | |
| } | |
| }, 'Increment last digit in the URL'); | |
| key.setViewKey('<', function (ev, arg) { | |
| var url = content.location.href; | |
| var pattern = /(.*)([0-9]+)([^0-9]*)$/; | |
| var digit = url.match(pattern); | |
| if (digit[1] && digit[2]) { | |
| let next = +digit[2] - (arg ? arg : 1); | |
| content.location.href = digit[1] + next + (digit[3] || ""); | |
| } | |
| }, 'Decrement last digit in the URL'); | |
| key.setViewKey('c', function (ev, arg) { | |
| ext.exec("list-hateb-comments", arg); | |
| }, 'はてなブックマークのコメントを一覧表示', true); | |
| key.setViewKey('a', function (ev, arg) { | |
| ext.exec("hateb-bookmark-this-page"); | |
| }, 'このページをはてなブックマークに追加', true); | |
| key.setViewKey('C-e', function (aEvent, aArg) { | |
| ext.exec("hok-start-continuous-mode", aArg); | |
| }, 'リンクを連続して開く Hit a Hint を開始', true); | |
| key.setViewKey('H', function () { | |
| if (gBrowser.mCurrentTab.previousSibling) { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, gBrowser.mCurrentTab._tPos - 1); | |
| } else { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, gBrowser.mTabContainer.childNodes.length - 1); | |
| } | |
| }, '選択中のタブを右へ移動'); | |
| key.setViewKey('L', function () { | |
| if (gBrowser.mCurrentTab.nextSibling) { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, gBrowser.mCurrentTab._tPos + 1); | |
| } else { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, 0); | |
| } | |
| }, '選択中のタブを左へ移動'); | |
| key.setViewKey('C-n', function (aEvent) { | |
| key.generateKey(aEvent.originalTarget, KeyEvent.DOM_VK_DOWN, true); | |
| }, '一行スクロールダウン'); | |
| key.setViewKey('C-p', function (aEvent) { | |
| key.generateKey(aEvent.originalTarget, KeyEvent.DOM_VK_UP, true); | |
| }, '一行スクロールアップ'); | |
| key.setViewKey('i', function (ev, arg) { | |
| util.setBoolPref("accessibility.browsewithcaret", true); | |
| }, 'キャレットモード', true); | |
| key.setViewKey('j', function () { | |
| goDoCommand("cmd_scrollLineDown"); | |
| }, '一行スクロールダウン'); | |
| key.setViewKey('k', function () { | |
| goDoCommand("cmd_scrollLineUp"); | |
| }, '一行スクロールアップ'); | |
| key.setViewKey([['b'], ['M-v']], function () { | |
| goDoCommand("cmd_scrollPageUp"); | |
| }, '一画面分スクロールアップ'); | |
| key.setViewKey('C-v', function (ev, arg) { | |
| goDoCommand("cmd_scrollPageDown"); | |
| }, '一画面スクロールダウン'); | |
| key.setViewKey([['g', 'g'], ['M-<']], function () { | |
| goDoCommand("cmd_scrollTop"); | |
| }, 'ページ先頭へ移動'); | |
| key.setViewKey(['g', 'u'], function () { | |
| var uri = gBrowser.currentURI; | |
| if (uri.path == "/") { | |
| return; | |
| } | |
| var pathList = uri.path.split("/"); | |
| if (!pathList.pop()) { | |
| pathList.pop(); | |
| } | |
| loadURI(uri.prePath + pathList.join("/") + ("/")); | |
| }, '一つ上のディレクトリへ移動'); | |
| key.setViewKey(['g', 'h'], function (ev, arg) { | |
| BrowserGoHome(ev); | |
| }, 'ホームへ移動'); | |
| key.setViewKey(['g', 'U'], function () { | |
| var uri = window._content.location.href; | |
| if (uri == null) { | |
| return; | |
| } | |
| var root = uri.match(/^[a-z]+:\/\/[^/]+\//); | |
| if (root) { | |
| loadURI(root, null, null); | |
| } | |
| }, 'ルートディレクトリへ移動', true); | |
| key.setViewKey([['G'], ['M->']], function () { | |
| goDoCommand("cmd_scrollBottom"); | |
| }, 'ページ末尾へ移動'); | |
| key.setViewKey('R', function (aEvent) { | |
| BrowserReload(); | |
| }, '更新'); | |
| key.setViewKey('B', function (aEvent) { | |
| BrowserBack(); | |
| }, '戻る'); | |
| key.setViewKey('F', function (aEvent) { | |
| BrowserForward(); | |
| }, '進む'); | |
| key.setViewKey('l', function () { | |
| gBrowser.mTabContainer.advanceSelectedTab(1, true); | |
| }, 'ひとつ右のタブへ'); | |
| key.setViewKey('h', function () { | |
| gBrowser.mTabContainer.advanceSelectedTab(-1, true); | |
| }, 'ひとつ左のタブへ'); | |
| key.setViewKey(['C-x', 'h'], function () { | |
| goDoCommand("cmd_selectAll"); | |
| }, 'すべて選択'); | |
| key.setViewKey('M-n', function () { | |
| command.walkInputElement(command.elementsRetrieverButton, true, true); | |
| }, '次のボタンへフォーカスを当てる'); | |
| key.setViewKey('M-p', function () { | |
| command.walkInputElement(command.elementsRetrieverButton, false, true); | |
| }, '前のボタンへフォーカスを当てる'); | |
| key.setViewKey('f', function () { | |
| command.focusElement(command.elementsRetrieverTextarea, 0); | |
| }, '最初のインプットエリアへフォーカス', true); | |
| key.setViewKey(['d', 'b'], function () { | |
| userscript.openPluginManager(); | |
| }, 'プラグインマネージャを開く', true); | |
| key.setViewKey('T', function (ev, arg) { | |
| ext.exec("twitter-client-display-timeline", arg); | |
| }, 'Yet Another Twitter Client KeySnail', true); | |
| key.setViewKey('e', function (aEvent, aArg) { | |
| ext.exec("hok-start-foreground-mode", aArg); | |
| }, 'Hit a Hint を開始', true); | |
| key.setViewKey('E', function (aEvent, aArg) { | |
| ext.exec("hok-start-background-mode", aArg); | |
| }, 'リンクをバックグラウンドで開く Hit a Hint を開始', true); | |
| key.setViewKey(';', function (aEvent, aArg) { | |
| ext.exec("hok-start-extended-mode", aArg); | |
| }, 'HoK - 拡張ヒントモード', true); | |
| key.setViewKey(['u', 'c'], function () { | |
| ext.exec("list-closed-tabs"); | |
| }, 'List closed tabs'); | |
| key.setViewKey(['u', 't'], function () { | |
| undoCloseTab(); | |
| }, 'Undo closed tab'); | |
| key.setViewKey('%', function (ev, arg) { | |
| ext.exec("scrollet-scroll-percent", arg); | |
| }, '前置引数で指定した割合までページをスクロール'); | |
| key.setViewKey([']', ']'], function (ev, arg) { | |
| ext.exec("follow-next-link", arg, ev); | |
| }, 'follow next link', true); | |
| key.setViewKey(['[', '['], function (ev, arg) { | |
| ext.exec("follow-prev-link", arg, ev); | |
| }, 'follow previous link', true); | |
| key.setViewKey('C-h', function () {}, 'Kill C-h'); | |
| key.setViewKey(':', function () { shell.input(); }, "Command System"); | |
| key.setViewKey('t', function (ev, arg) { shell.input("tabopen "); }, "Open tab"); | |
| key.setViewKey('o', function (ev, arg) { | |
| shell.input("open "); | |
| }, "Open"); | |
| key.setViewKey('s', function (ev, arg) { | |
| shell.input("tabopen google "); | |
| }, "Google word"); | |
| key.setEditKey([['M-<down>'], ['M-<up>']], function (ev, arg) { | |
| var select = ev.originalTarget; | |
| if (select.localName.toLowerCase() !== "select") { | |
| return; | |
| } | |
| var options = Array.slice(select.childNodes).filter((function (e)(e.localName || "") === "option")); | |
| prompt.selector({ | |
| message: "select:", | |
| collection: options.map((function (e) e.textContent)), | |
| initialIndex: select.selectedIndex || 0, | |
| callback: function (i) { | |
| select.selectedIndex = i; | |
| } | |
| }); | |
| }, "Select option"); | |
| key.setEditKey(['C-x', 'l'], function (aEvent) { | |
| command.recenter(aEvent); | |
| }, 'キャレット位置までスクロール (Recenter)'); | |
| key.setEditKey([['C-x', 'u'], ['C-_']], function (aEvent) { | |
| display.echoStatusBar("Undo!", 2000); | |
| goDoCommand("cmd_undo"); | |
| goDoCommand("cmd_selectNone"); | |
| }, 'アンドゥ'); | |
| key.setEditKey(['C-x', 'r', 'd'], function (aEvent, aArg) { | |
| command.replaceRectangle(aEvent.originalTarget, "", false, !aArg); | |
| }, '矩形削除', true); | |
| key.setEditKey(['C-x', 'r', 't'], function (aEvent) { | |
| var input = aEvent.originalTarget; | |
| prompt.read("String rectangle:", function (aStr) { | |
| command.replaceRectangle(input, aStr); | |
| }); | |
| }, '矩形置換', true); | |
| key.setEditKey(['C-x', 'r', 'o'], function (aEvent) { | |
| command.openRectangle(aEvent.originalTarget); | |
| }, '矩形行空け', true); | |
| key.setEditKey(['C-x', 'r', 'k'], function (aEvent, aArg) { | |
| command.kill.buffer = command.killRectangle(aEvent.originalTarget, !aArg); | |
| }, '矩形切り取り', true); | |
| key.setEditKey(['C-x', 'r', 'y'], function (aEvent) { | |
| command.yankRectangle(aEvent.originalTarget, command.kill.buffer); | |
| }, '矩形貼り付け', true); | |
| key.setEditKey(['C-x', 'h'], function (aEvent) { | |
| command.selectAll(aEvent); | |
| }, '全て選択'); | |
| key.setEditKey([['C-SPC'], ['C-@']], function (aEvent) { | |
| command.setMark(aEvent); | |
| }, 'マークをセット'); | |
| key.setEditKey('C-o', function (aEvent) { | |
| command.openLine(aEvent); | |
| }, '行を開く (open line)'); | |
| key.setEditKey('C-\\', function () { | |
| display.echoStatusBar("Redo!", 2000); | |
| goDoCommand("cmd_redo"); | |
| }, 'リドゥ'); | |
| key.setEditKey('C-a', function (aEvent) { | |
| command.beginLine(aEvent); | |
| }, '行頭へ移動'); | |
| key.setEditKey('C-e', function (aEvent) { | |
| command.endLine(aEvent); | |
| }, '行末へ'); | |
| key.setEditKey('C-f', function (aEvent) { | |
| command.nextChar(aEvent); | |
| }, '一文字右へ移動'); | |
| key.setEditKey('C-b', function (aEvent) { | |
| command.previousChar(aEvent); | |
| }, '一文字左へ移動'); | |
| key.setEditKey('M-f', function (aEvent) { | |
| command.nextWord(aEvent); | |
| }, '一単語右へ移動'); | |
| key.setEditKey('M-b', function (aEvent) { | |
| command.previousWord(aEvent); | |
| }, '一単語左へ移動'); | |
| key.setEditKey('C-n', function (aEvent) { | |
| command.nextLine(aEvent); | |
| }, '一行下へ'); | |
| key.setEditKey('C-p', function (aEvent) { | |
| command.previousLine(aEvent); | |
| }, '一行上へ'); | |
| key.setEditKey('C-v', function (aEvent) { | |
| command.pageDown(aEvent); | |
| }, '一画面分下へ'); | |
| key.setEditKey('M-v', function (aEvent) { | |
| command.pageUp(aEvent); | |
| }, '一画面分上へ'); | |
| key.setEditKey('M-<', function (aEvent) { | |
| command.moveTop(aEvent); | |
| }, 'テキストエリア先頭へ'); | |
| key.setEditKey('M->', function (aEvent) { | |
| command.moveBottom(aEvent); | |
| }, 'テキストエリア末尾へ'); | |
| key.setEditKey('C-d', function () { | |
| goDoCommand("cmd_deleteCharForward"); | |
| }, '次の一文字削除'); | |
| key.setEditKey('C-h', function () { | |
| goDoCommand("cmd_deleteCharBackward"); | |
| }, '前の一文字を削除'); | |
| key.setEditKey('M-d', function (ev) { | |
| command.deleteForwardWord(ev); | |
| }, '次の一単語を削除'); | |
| key.setEditKey([['C-<backspace>'], ['M-<delete>']], function (ev) { | |
| command.deleteBackwardWord(ev); | |
| }, '前の一単語を削除'); | |
| key.setEditKey('M-u', function (ev, arg) { | |
| command.wordCommand(ev, arg, command.upcaseForwardWord, command.upcaseBackwardWord); | |
| }, '次の一単語を全て大文字に (Upper case)', true); | |
| key.setEditKey('M-l', function (ev, arg) { | |
| command.wordCommand(ev, arg, command.downcaseForwardWord, command.downcaseBackwardWord); | |
| }, '次の一単語を全て小文字に (Lower case)', true); | |
| key.setEditKey('M-c', function (ev, arg) { | |
| command.wordCommand(ev, arg, command.capitalizeForwardWord, command.capitalizeBackwardWord); | |
| }, '次の一単語をキャピタライズ', true); | |
| key.setEditKey('C-k', function (aEvent) { | |
| command.killLine(aEvent); | |
| }, 'カーソルから行末までを切り取り'); | |
| key.setEditKey('C-y', command.yank, '貼り付け'); | |
| key.setEditKey('M-y', command.yankPop, '以前にコピーしたテキストを順に貼り付け'); | |
| key.setEditKey('C-M-y', function (aEvent) { | |
| 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]); | |
| } | |
| } | |
| }); | |
| }, '以前にコピーしたテキスト一覧から選択して貼り付け'); | |
| key.setEditKey('C-w', function (aEvent) { | |
| goDoCommand("cmd_copy"); | |
| goDoCommand("cmd_delete"); | |
| command.resetMark(aEvent); | |
| }, 'リージョンをカット'); | |
| key.setEditKey('M-n', function () { | |
| command.walkInputElement(command.elementsRetrieverTextarea, true, true); | |
| }, '次のテキストエリアへフォーカス'); | |
| key.setEditKey('M-p', function () { | |
| command.walkInputElement(command.elementsRetrieverTextarea, false, true); | |
| }, '前のテキストエリアへフォーカス'); | |
| key.setEditKey(['C-c', 'e'], function (ev, arg) { | |
| ext.exec("edit_text", arg); | |
| }, '外部エディタで編集', true); | |
| key.setEditKey('C-M-v', function (ev, arg) { | |
| Clipple.pasteMultiple(ev); | |
| }, 'Clipple - 貼り付け', true); | |
| key.setCaretKey('H', function () { | |
| if (gBrowser.mCurrentTab.previousSibling) { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, gBrowser.mCurrentTab._tPos - 1); | |
| } else { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, gBrowser.mTabContainer.childNodes.length - 1); | |
| } | |
| }, '選択中のタブを右へ移動'); | |
| key.setCaretKey('L', function () { | |
| if (gBrowser.mCurrentTab.nextSibling) { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, gBrowser.mCurrentTab._tPos + 1); | |
| } else { | |
| gBrowser.moveTabTo(gBrowser.mCurrentTab, 0); | |
| } | |
| }, '選択中のタブを左へ移動'); | |
| key.setCaretKey([['C-n'], ['j']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectLineNext") : goDoCommand("cmd_scrollLineDown"); | |
| }, '一行下へ'); | |
| key.setCaretKey([['C-p'], ['k']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectLinePrevious") : goDoCommand("cmd_scrollLineUp"); | |
| }, '一行上へ'); | |
| key.setCaretKey([['C-f'], ['l']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectCharNext") : goDoCommand("cmd_scrollRight"); | |
| }, '一文字右へ移動'); | |
| key.setCaretKey([['C-b'], ['h'], ['C-h']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectCharPrevious") : goDoCommand("cmd_scrollLeft"); | |
| }, '一文字左へ移動'); | |
| key.setCaretKey('>', function () { | |
| goDoCommand("cmd_scrollRight"); | |
| }, '右へスクロール'); | |
| key.setCaretKey('.', function () { | |
| util.getSelectionController().scrollHorizontal(false); | |
| }, 'ページを右へスクロール'); | |
| key.setCaretKey('<', function () { | |
| goDoCommand("cmd_scrollLeft"); | |
| }, '左へスクロール'); | |
| key.setCaretKey(',', function () { | |
| util.getSelectionController().scrollHorizontal(true); | |
| }, 'ページを左へスクロール'); | |
| key.setCaretKey([['b'], ['M-v']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectPagePrevious") : goDoCommand("cmd_movePageUp"); | |
| }, '一画面分上へ'); | |
| key.setCaretKey([['C-v'], ['SPC']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectPageNext") : goDoCommand("cmd_movePageDown"); | |
| }, '一画面分下へ'); | |
| key.setCaretKey([['g'], ['M-<']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectTop") : goDoCommand("cmd_scrollTop"); | |
| }, 'ページ先頭へ移動'); | |
| key.setCaretKey([['G'], ['M->']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectBottom") : goDoCommand("cmd_scrollBottom"); | |
| }, 'ページ末尾へ移動'); | |
| key.setCaretKey('R', function (aEvent) { | |
| BrowserReload(); | |
| }, '更新'); | |
| key.setCaretKey('B', function (aEvent) { | |
| BrowserBack(); | |
| }, '戻る'); | |
| key.setCaretKey('F', function (aEvent) { | |
| BrowserForward(); | |
| }, '進む'); | |
| key.setCaretKey(['C-x', 'h'], function () { | |
| goDoCommand("cmd_selectAll"); | |
| }, 'すべて選択'); | |
| key.setCaretKey('M-n', function () { | |
| command.walkInputElement(command.elementsRetrieverButton, true, true); | |
| }, '次のボタンへフォーカスを当てる'); | |
| key.setCaretKey('M-p', function () { | |
| command.walkInputElement(command.elementsRetrieverButton, false, true); | |
| }, '前のボタンへフォーカスを当てる'); | |
| key.setCaretKey('f', function () { | |
| command.focusElement(command.elementsRetrieverTextarea, 0); | |
| }, '最初のインプットエリアへフォーカス', true); | |
| key.setCaretKey([['C-SPC'], ['C-@']], function (aEvent) { | |
| command.setMark(aEvent); | |
| }, 'マークをセット'); | |
| key.setCaretKey([['C-a'], ['^']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectBeginLine") : goDoCommand("cmd_beginLine"); | |
| }, '行頭へ移動'); | |
| key.setCaretKey([['C-e'], ['$']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectEndLine") : goDoCommand("cmd_endLine"); | |
| }, '行末へ移動'); | |
| key.setCaretKey([['M-f'], ['w']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectWordNext") : goDoCommand("cmd_wordNext"); | |
| }, '一単語右へ移動'); | |
| key.setCaretKey([['M-b'], ['W']], function (aEvent) { | |
| aEvent.target.ksMarked ? goDoCommand("cmd_selectWordPrevious") : goDoCommand("cmd_wordPrevious"); | |
| }, '一単語左へ移動'); | |
| key.setCaretKey('J', function (ev) { | |
| util.getSelectionController().scrollLine(true); | |
| }, '画面を一行分下へスクロール'); | |
| key.setCaretKey('K', function () { | |
| util.getSelectionController().scrollLine(false); | |
| }, '画面を一行分上へスクロール'); | |
| key.setCaretKey('z', function (aEvent) { | |
| command.recenter(aEvent); | |
| }, 'カーソル位置へスクロール'); | |
| key.setCaretKey('e', function (aEvent, aArg) { | |
| ext.exec("hok-start-foreground-mode", aArg); | |
| }, 'Hit a Hint を開始', true); | |
| key.setCaretKey('E', function (aEvent, aArg) { | |
| ext.exec("hok-start-background-mode", aArg); | |
| }, 'リンクをバックグラウンドで開く Hit a Hint を開始', true); | |
| key.setCaretKey(';', function (aEvent, aArg) { | |
| ext.exec("hok-start-extended-mode", aArg); | |
| }, 'HoK - 拡張ヒントモード', true); | |
| key.setCaretKey('s', function (ev, arg) { | |
| ext.exec("swap-caret", arg, ev); | |
| }, 'キャレットを交換', true); | |
| key.setCaretKey('i', function (ev, arg) { | |
| util.setBoolPref("accessibility.browsewithcaret", false); | |
| }, 'キャレットモードを抜ける', true); | |
| key.setViewKey(['d', 'd'], function (ev) { | |
| BrowserCloseTabOrWindow(); | |
| }, 'タブ / ウィンドウを閉じる'); | |
| key.defineKey([key.modes.VIEW, key.modes.CARET], 'r', function (ev, arg) { | |
| ext.exec("kungfloo-reblog", arg, ev); | |
| }, 'kungfloo - Reblog', true); | |
| key.setEditKey('M-@', function (ev) { | |
| ext.exec("dmacro-exec"); | |
| }, 'Dynamic macro'); | |
| key.setEditKey(plugins.options["dabbrev.next_key"], function (ev, arg) { | |
| ext.exec("dabbrev-expand", arg, ev); | |
| }, "Expand previous word \"dynamically\"."); | |
| key.setViewKey(['C-x', 'b'], function (ev, arg) { ext.exec("tanything", arg); }, 'タブを一覧表示', true); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment