Hatena::Groupkeysnail

きすねた(ん)

2010-02-20

食堂はじめました

| 12:37 | 食堂はじめました - きすねた(ん) を含むブックマーク はてなブックマーク - 食堂はじめました - きすねた(ん)

ということで id:hogelog さんがやってくれました。 keysnail グループです。

手始めに とりあえず「アレが欲しいこれが欲しいもっともっと欲しい!」リスト。 - hogelogの日記 - keysnailグループ へのお答えというか、口調は自然体で失礼しますが、そんな感じのエントリです。

1.

vimperatorの[ [, ] ]が欲しい。ページ内から適当に「次へ」とか書いてあるリンク探して叩いてくれる機能。誤爆も多いけど特定のサイトでは楽。

これは確かに、一度欲しいなーと思って適当に以下のようなモノを書いた。これだと rel 属性をご丁寧にも指定してくれているサイトでしか働かないので、ほとんど役に立たない。

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");

おそらく上記のコードに doc.querySelector で value が "next", "prev" や "次", "前" を含むモノを加えれば、まあまあ動くものが出来るのではないかなと思う。

いざとなったら liberator から拝借してくればよいし。

2.

vimperatorのC-a、C-xも。URL中に含まれる末尾の数字部分をインクリメントしたりデクリメントしたり。

これは以前書いたものが incre-decre-url.js ? GitHub にある。 Tips japanese ? mooz/keysnail Wiki ? GitHub に色々と雑多なものがまとまっている。

3.

vimperatorの quickmark。普段よく開くサイトは登録してあって「g o t」とか叩くだけでhttp://twitter.comが開かれたりしてたので、手をホームポジションに持っていって「A-d t w ↓ ↓ C-h C-h C-h C-h C-h」とかめんどくさい

quickmark は「スクロール位置まで保存してくれる簡易ブックマーク」、という認識であっているのでしょうか?

KeySnail では persist.preserve(aObj, aName) と persist.restore(aName) という関数を使ってオブジェクトをローカルファイル (profD/keysnail/persist/{aName}.js) へ保存しておき、後で復元する事が可能。なのでおそらく一日もあれば実装は可能かと思われる。

おそらく g o というキーへコマンドを割り当てておき t の部分は prompt.reader を使って受けとることになるかと思う。 prompt.reader の onChange を使えば、ユーザが Enter を押さなくても一文字入力した時点で強制的に callback を呼ぶことが可能。この辺りの使い方は HoK の拡張ヒントモードが参考になるかと思う。

prompt.reader(
    {
        message  : "Extended hint mode (Press TAB to see completions): ",
        onChange : function (arg) {
            if (arg.event.keyCode === KeyEvent.DOM_VK_SHIFT ||
                arg.event.keyCode === KeyEvent.DOM_VK_TAB)
                return;

            var current = arg.textbox.value;
            if (current)
                arg.finish();
        },
        collection          : formatActions(actions),
        header              : [M({ja: "キー", en: "Key"}), M({ja: "説明", en: "Description"})],
        style               : ["font-weight:bold;text-align:right;margin-right:2em;", "color:#5100ae;"],
        width               : [40, 60],
        supressRecoverFocus : true,
        callback            : function (aStr) {
            if (aStr !== null)
                doAction(aStr);
            recoverFocus();
        }
    }
);

4.

なんかこうQuitキーのQuit力が弱い。たぶんhookとかかませば良いのだろうけど。Suspendからの復帰にもQuitを使いたい、 prompt表示されてる時にcontentsクリックしてフォーカス持っていった時もQuitで閉じたいなど。

suspend 中は key.suspendKey しか監視をしていないので、 suspend からの復帰はちょっと難しいかもしれない。 KeySnail 内部にもう一つ hook を設ければ良いだけの話なので、実装しても良い。

prompt を閉じる動作は、以下のようなコードで良いと思う。 prompt.finish の第一引数に true を渡すと、キャンセルになる。

hook.addToHook('KeyBoardQuit', function (ev) {
    if (ev.target !== document.getElementById("keysnail-prompt-textbox"))
        prompt.finish(true);
});

5.

Flashに入力食われてるとき表示が無いからちょっと混乱するかも。

Vimperator さすが。これはどうやって実現しているのか気になるところなので、少し調査をしてみたいと思う。

6.

vimperatorプラグインのmarker_reader.js機能が欲しい。ページダウンとかは淡々と長い文章を書いてあるページだとどこまでスクロールしたのかわからなくなるから、ページにマークを付けてスクロールする機能。自分で書いたプラグインだしよく使っていたけど、なんかこう非常にダサいなーと思うアレだったので書き直したい。

Scrollet というプラグインがページのスクロール位置を一時的にマークへ保存してくれる。ただ marker_reader.js とは動作が異なる可能性もある。

marker_reader.js の方で liberator.* な関数をあまり使っていないのであれば、移植はすんなり行くかもしれない。

7.

vimperatorプラグインloginManager.js相当の能力が欲しい。tumblrtwitterなど各種ログイン必要サイトでログアウトしてログインページ開いて入力してアカウント切り替え、とかめんどくさくて死ぬ。

何やら便利そうな響き。複数アカウントがあったときに、それをコマンドラインから一発でやってくれるというものなのだろうか。欲しい!

これも liberator.* な関数をあまり使っていないのであれば移植はすんなりいくかもしれない。 liberator.echoerr とかは display.echoStatusBar 辺りでまかなうとして。

8.

skk.ks.js……

KeySnail を変態アドオンとして世に知らしめる為にも必要だと思いました!

終わりに

Vimperator 使いの方からこういった要望とかアドバイスを頂けると助かりますね。そこから情報などを引き出していけるので。

色々と質問があれば答えていけると思いますので、ご覧の皆さんもぜひ keysnail グループへ加入して日記に書いてみてください。

hogeloghogelog2010/02/21 03:20すばらしい!
割ときすねたんの中がまだあんましわからんのでひどくありがたいです。