hook japanese - mooz/keysnail GitHub Wiki

はじめãĢ

äģĨ下ãĢį¤ēすã‚ŗãƒŧドぎ動äŊœã‚’įĸēčĒã™ã‚‹į‚ēãĢは Eval ã‚ŗマãƒŗドがåŊšãĢįĢ‹ãĄãžã™ã€‚

M-: (Alt + : ãĒお) とå…Ĩ力し、開いたプロãƒŗプトãĢã‚ŗãƒŧãƒ‰ã‚’æ‰“ãĄčžŧãŋ Enter キãƒŧをæŠŧす。 Eval ã‚ŗマãƒŗドは開į™ēč€…ãŽč‰¯ãå‹ã§ã™ã€‚

čŠŗしいčĒŦ明ãĢé–ĸしãĻは こぎペãƒŧジ を参į…§ã—ãĻください。

フックãĢついãĻ

KeySnail ãŽãƒ•ãƒƒã‚¯ã‚ˇã‚šãƒ†ãƒ ã‚’åˆŠį”¨ã™ã‚‹ã¨ã€ãƒ—ログナムぎ様々ãĒ部分ãĢč¨­ã‘ã‚‰ã‚ŒãŸãƒ•ãƒƒã‚¯ãƒã‚¤ãƒŗトへé–ĸæ•°ã‚’å‰˛ã‚ŠåŊ“ãĻãĻおくことが可čƒŊとãĒりぞす。ぞた、プナグイãƒŗãĒおがフックをį‹Ŧč‡ĒãĢį”¨æ„ã™ã‚‹ã“ともできぞす。

䞋えば KeyPress フックへé–ĸ数をį™ģéŒ˛ã™ã‚‹å ´åˆã¯ .keysnail.js ぎæœĢ尞へæŦĄãŽã‚ˆã†ãĒã‚ŗãƒŧãƒ‰ã‚’č¨˜čŋ°ã—ぞす。

hook.addToHook("KeyPress",
               function (aKey) {
                   display.prettyPrint(aKey + " pressed");
               });

こぎようãĢしãĻおくと、ãƒĻãƒŧã‚ļがキãƒŧをå…Ĩ力するåēĻãĢ display.prettyPrint(aKey + " pressed") ãŒåŽŸčĄŒã•ã‚Œã‚‹ã‚ˆã†ãĢãĒりぞす。ここではå…Ĩ力されたキãƒŧぎ名前をį”ģéĸã¸čĄ¨į¤ēしãĻいぞす。

フックポイãƒŗトへぎé–ĸæ•°å‰˛ã‚ŠåŊ“ãĻãĢは addToHook か setHook をį”¨ã„ãžã™ã€‚ä¸Ąč€…ã¨ã‚‚å–ã‚‹åŧ•æ•°ã¯åŒã˜ã§ã™ãŒã€ addToHook がフックポイãƒŗトぎæœĢ尞へé–ĸ数をčŋŊ加するぎãĢ寞し、 setHook はそれぞでãĢフックポイãƒŗトへį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数全ãĻをæļˆåŽģした垌ãĢé–ĸ数į™ģéŒ˛ã‚’čĄŒã„ãžã™ã€‚

ゆえãĢ、プナグイãƒŗ内でフックį™ģéŒ˛ã‚’čĄŒã†å ´åˆã¯åŋ…ず addToHook をäŊŋうようãĢしãĻください。

フックポイãƒŗトぎ提䞛

プナグイãƒŗは、とãĻã‚‚ã‚ˇãƒŗプãƒĢãĒæ–šæŗ•ã§į‹Ŧč‡Ēぎフックポイãƒŗトをį”¨æ„ã™ã‚‹ã“とが可čƒŊです。

フックポイãƒŗトとしたい場所ãĢ hook.callHook("フックポイãƒŗト名", åŧ•æ•°) ãŽä¸€čĄŒã‚’č¨˜čŋ°ã—ãĻ下さい。こうしãĻおくことで、そぎフックポイãƒŗトãĢå‰˛ã‚ŠåŊ“ãĻられたé–ĸ数へåŧ•æ•°ãŒæ¸Ąã•ã‚Œã€åŽŸčĄŒã•ã‚Œãžã™ã€‚

䞋えば KeySnail 内部ぎ key ãƒĸジãƒĨãƒŧãƒĢでは、æŦĄãŽã‚ˆã†ãĢしãĻフックポイãƒŗトが提䞛されãĻいぞす。

hook.callHook("KeyBoardQuit", aEvent);
hook.callHook("PostCommand", hookArg);

こぎ䞋をčĻ‹ãĻ分かるようãĢ、各フックポイãƒŗトãĢよãŖãĻé–ĸ数ãĢæ¸Ąã•ã‚Œã‚‹åŧ•æ•°ã¯į•°ãĒりぞす。äģĨ下ãĢč¨˜ã•ã‚ŒãŸčĒŦæ˜Žã‚’å‚č€ƒãĢしãĻください。

KeyPress

å‘ŧばれるã‚ŋイミãƒŗグ

ãƒĻãƒŧã‚ļがキãƒŧをå…Ĩ力するåēĻãĢこぎフックへį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数がå‘ŧばれぞす。

åŧ•æ•°

こぎフックへį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数ãĢは キãƒŧイベãƒŗト ãŒæ¸Ąã•ã‚Œãžã™ã€‚

äŊŋį”¨äž‹

hook.addToHook("KeyPress",
               function (aKey) {
                   display.prettyPrint(key.keyEventToString(aKey) + " pressed");
               });

aKey ãĢはå…Ĩ力されたキãƒŧぎキãƒŧイベãƒŗãƒˆãŒæ¸Ąã‚‹ãŽã§ã€ã“ã“ã§ã¯ãã‚Œã‚’æ–‡å­—åˆ—åŊĸåŧã¸å¤‰æ›ã—、į”ģéĸã¸ã¨čĄ¨į¤ēしãĻいぞす。

KeyBoardQuit

å‘ŧばれるã‚ŋイミãƒŗグ

ãƒĻãƒŧã‚ļが key.quitKey (デフりãƒĢトは C-g) をå…Ĩ力した際ãĢå‘ŧばれぞす。

åŧ•æ•°

こぎフックへį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数ãĢは キãƒŧイベãƒŗト ãŒæ¸Ąã•ã‚Œãžã™ã€‚

äŊŋį”¨äž‹

hook.setHook('KeyBoardQuit', function (aEvent) {
    if (key.currentKeySequence.length)
        return;

    command.closeFindBar();

    if (util.isCaretEnabled())
        command.resetMark(aEvent);
    else             
        goDoCommand("cmd_selectNone");

    if (KeySnail.windowType == "navigator:browser")
        key.generateKey(aEvent.originalTarget, KeyEvent.DOM_VK_ESCAPE, true);
});

これは多くぎãƒĻãƒŧã‚ļぎ .keysnail.js へ原際ãĢ記čŋ°ã•ã‚ŒãĻã„ã‚‹ã§ã‚ã‚ã†č¨­åŽšã§ã™ã€‚é€šå¸¸ãŽæ–šæŗ•ã§ã¯ key.quitKey ãĢã‚ŗマãƒŗãƒ‰ã‚’å‰˛ã‚ŠåŊ“ãĻることができãĒいため、こぎようãĢしãĻフックポイãƒŗトへとã‚ŗマãƒŗドをį™ģéŒ˛ã™ã‚‹ã“ã¨ã§ã€å¯žåŋœã—ãĻいぞす。

PreCommand, PostCommand

å‘ŧばれるã‚ŋイミãƒŗグ

キãƒŧãĢå‰˛ã‚ŠåŊ“ãĻられたã‚ŗマãƒŗドがå‘ŧばれる前 (PreCommand) とå‘ŧばれた垌 (PostCommand) ãĢ、こぎフックポイãƒŗトへį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数がå‘ŧばれぞす。

åŧ•æ•°

こぎフックへį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数ãĢはæŦĄãŽã‚ˆã†ãĒã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ¸Ąã•ã‚Œãžã™ã€‚

var hookArg = {
            func  : aFunc,
            event : aEvent,
            arg   : aArg
        };

func ãĢは ã‚ŗマãƒŗドæœŦäŊ“ (é–ĸ数) が、 event ãĢは キãƒŧイベãƒŗト が、 arg ãĢは 前įŊŽåŧ•æ•° がそれぞれæ ŧį´ã•ã‚Œãžã™ã€‚

į‰šåˆĨãĒ動äŊœ

PreCommand ãƒ•ãƒƒã‚¯ã¸å‰˛ã‚ŠåŊ“ãĻられたé–ĸ数内で䞋外を投げると、そぎã‚ŗマãƒŗãƒ‰ãŽåŽŸčĄŒã‚’ã‚­ãƒŖãƒŗã‚ģãƒĢすることが可čƒŊです。

äŊŋį”¨äž‹

hook.addToHook("PostCommand",
               function (aHookArg) {
                   var func = aHookArg.func;
                   display.prettyPrint(func.ksDescription + " executed");
               });

ここでは aHookArg.func としãĻ「ã‚ŗマãƒŗドæœŦäŊ“」をå…Ĩ手し、そぎã‚ŗマãƒŗドぎčĒŦ明を func.ksDescription としãĻåž—ãŸãŽãĄã€į”ģéĸã¸ã¨čĄ¨į¤ēしãĻいぞす。

ClipboardChanged

å‘ŧばれるã‚ŋイミãƒŗグ

クãƒĒップボãƒŧドぎ内厚が変化したとき (ãƒĻãƒŧã‚ļがテキ゚トをã‚ŗピãƒŧしたとき) ãĢå‘ŧばれぞす。

åŧ•æ•°

ãƒĻãƒŧã‚ļがã‚ŗピãƒŧしたテキ゚トぎ内厚 ãŒæ¸Ąã‚Šãžã™ã€‚

į‰šåˆĨãĒ動äŊœ

PreCommand ãƒ•ãƒƒã‚¯ã¸å‰˛ã‚ŠåŊ“ãĻられたé–ĸ数内で䞋外を投げると、そぎテキ゚トは KeySnail ぎキãƒĢãƒĒãƒŗグへæ ŧį´ã•ã‚Œãžã›ã‚“。

äŊŋį”¨äž‹

hook.addToHook("ClipboardChanged",
               function (aText) {
                   util.alert("Clipboard Changed!", aText + " copied");
               });

ここでは新しくã‚ŗピãƒŧされたテキ゚トぎ内厚を、ダイã‚ĸãƒ­ã‚°čĄ¨į¤ēしãĻいぞす。

LocationChange

å‘ŧばれるã‚ŋイミãƒŗグ

ãƒ­ã‚ąãƒŧã‚ˇãƒ§ãƒŗバãƒŧぎ値が変化したとき、つぞりペãƒŧジがロãƒŧドされた際やã‚ŋブが切りæ›ŋわãŖた際ãĢå‘ŧばれぞす。

åŧ•æ•°

ロãƒŧドされたペãƒŧジ、切りæ›ŋわãŖたã‚ŋブぎペãƒŧジぎ URI がæ ŧį´ã•ã‚ŒãŸã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ¸Ąã‚Šãžã™ã€‚

文字列としãĻぎ URL は spec プロパテã‚ŖãĢæ ŧį´ã•ã‚ŒãĻいぞす。

äŊŋį”¨äž‹

hook.addToHook('LocationChange', function (aNsURI) {
    if (aNsURI || aNsURI.spec) {
        var url = aNsURI.spec;

        display.prettyPrint(url);
    }
});

こぎ䞋では、ã‚ŋブが切りæ›ŋわãŖた際ãĒおãĢ゚クãƒĒãƒŧãƒŗぎåŗ上へそぎ URL ã‚’čĄ¨į¤ēしãĻいぞす。

GreaseMonkey ぎようãĢ、į‰šåŽšãŽã‚ĩイトãĢ寞するå‡Ļį†ã‚’čĄŒã„ãŸã„å ´åˆãĢäžŋ刊でしょう。

PluginLoaded

å‘ŧばれるã‚ŋイミãƒŗグ

全プナグイãƒŗぎロãƒŧドがįĩ‚わãŖた際ãĢå‘ŧばれぞす。

åŧ•æ•°

こぎフックはį‰šãĢåŧ•æ•°ã‚’æ¸Ąã—ãžã›ã‚“ã€‚

äŊŋį”¨äž‹

こぎフックはプナグイãƒŗ内でからäģ–ぎプナグイãƒŗぎ値を刊į”¨ã—たり、上書きする際ãĢ有į”¨ã§ã™ã€‚

KeySnail はæŦĄãŽã‚ˆã†ãĒ順į•Ēでプナグイãƒŗをロãƒŧドしぞす。

  1. 名前が _ で始ぞるプナグイãƒŗ (ナイブナãƒĒ)
  2. åˆæœŸåŒ–ãƒ•ã‚Ąã‚¤ãƒĢ (.keysnail.js)
  3. 各プナグイãƒŗを名前順ãĢロãƒŧド

そぎį‚ē、フェãƒŧã‚ē 3 ぎ「各プナグイãƒŗ」内でäģ–ぎプナグイãƒŗぎ値を刊į”¨ã—ãŸã‚Šä¸Šæ›¸ãã—ã‚ˆã†ã¨ã™ã‚‹ã¨ã€å¯žčąĄã¨ãĒるプナグイãƒŗがそぎプナグイãƒŗより先ãĢロãƒŧドされãĻいるäŋč¨ŧがãĒいため (ã‚‚ãĄã‚ã‚“åå‰ã‚’å¤‰æ›´ã™ã‚‹ã“ã¨ã§é †į•Ēを操äŊœã™ã‚‹ã“とは可čƒŊですが) うぞくいきぞせん。

ここで PluginLoaded フックぎå‡ēį•Ēです。こぎフックへį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数は、先ãģおぎãƒĒ゚トでいうとæŦĄãŽã‚ˆã†ãĒäŊįŊŽã§å‘ŧばれぞす。

  1. 名前が _ で始ぞるプナグイãƒŗ (ナイブナãƒĒ)
  2. åˆæœŸåŒ–ãƒ•ã‚Ąã‚¤ãƒĢ (.keysnail.js)
  3. 各プナグイãƒŗを名前順ãĢロãƒŧド
  4. PluginLoaded ãĢį™ģéŒ˛ã•ã‚ŒãŸé–ĸæ•°ãŽåŽŸčĄŒ

PluginLoaded ãĢį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数がå‘ŧばれる時į‚šã§ã¯å„プナグイãƒŗぎロãƒŧドがįĩ‚わãŖãĻいるため、厉åŋƒã—ãĻプナグイãƒŗぎ値をäŊŋį”¨ã—たり変更したりすることがå‡ēæĨるというわけです。

䞋えば Caret hint プナグイãƒŗでは HoK プナグイãƒŗãŽæ‹Ąåŧĩヒãƒŗトãƒĸãƒŧドã‚ĸã‚¯ã‚ˇãƒ§ãƒŗぎ値を上書きするį‚ēãĢ、こぎフックへé–ĸ数をį™ģéŒ˛ã—ãĻいぞす。

hook.addToHook('PluginLoaded', function () {
    if (!plugins.hok)
        return;

    var actions = [
        [headMode, M({ja: "キãƒŖãƒŦットをčĻį´ ãŽå…ˆé ­ã¸į§ģ動", en: "Move caret to the head of the selected element"}),
         function (e) moveCaret(e, true, false)],
        [tailMode, M({ja: "キãƒŖãƒŦットをčĻį´ ãŽæœĢ尞へį§ģ動", en: "Move caret to the tail of the selected element"}),
         function (e) moveCaret(e, false, false)],
        [selectHeadMode, M({ja: "čĻį´ ã‚’選択しãĻキãƒŖãƒŦットを先頭へį§ģ動", en: "Select element and move caret to the head"}),
         function (e) moveCaret(e, false, true)],
        [selectTailMode, M({ja: "čĻį´ ã‚’選択しãĻキãƒŖãƒŦットをæœĢ尞へį§ģ動", en: "Select element and move caret to the tail"}),
         function (e) moveCaret(e, false, true)]
    ];
// äģĨ下įœį•Ĩ

Unload

å‘ŧばれるã‚ŋイミãƒŗグ

Firefox ãŽãƒĄã‚¤ãƒŗã‚Ļã‚Ŗãƒŗドã‚Ļが閉じられる際ãĢå‘ŧばれぞす。

åŧ•æ•°

こぎフックはį‰šãĢåŧ•æ•°ã‚’æ¸Ąã—ãžã›ã‚“ã€‚

äŊŋį”¨äž‹

こぎフックãĢį™ģéŒ˛ã•ã‚ŒãŸé–ĸ数はデ゚トナクã‚ŋぎようãĢæŒ¯ã‚‹čˆžãŖãĻくれぞす。プナグイãƒŗぎ垌å‡Ļį†ãĒãŠã‚’čĄŒã„ãŸã„å ´åˆãĢäžŋ刊でしょう。

バãƒŧジョãƒŗ

Unload フックは KeySnail 1.1.8 からį”¨æ„ã•ã‚ŒãĻいぞす。

KeySnailInitialized

å‘ŧばれるã‚ŋイミãƒŗグ

KeySnail ぎ初期化がįĩ‚äē†ã—た際ãĢå‘ŧばれぞす。

åŧ•æ•°

į‰šãĢåŧ•æ•°ã‚’æ¸Ąã—ãžã›ã‚“ã€‚

バãƒŧジョãƒŗ

Unload フックは KeySnail 1.3.2 からį”¨æ„ã•ã‚ŒãĻいぞす。

⚠ī¸ **GitHub.com Fallback** ⚠ī¸