さようなら keyconfig、こんにちは KeySnail

2010/02/23

firefox のキーバインド変更をずっと keyconfig でしていましたが、数日前から keyconfig の代わりに KeySnail を使い始めました。

keyconfig の動作に不満はなかったんですが、add-on 自体が更新されなくなって長いのが気になっていて。今後 firefox のバージョンアップに伴い、古い add-on だし使えなくなるかもしれないけれど、依存して利用しているので動かなくなると大打撃。そうなったら怖いなーと思い、「keyconfig の代替えとなりうる、今も開発が続いていて、ちょうど手頃な add-on ないかなあ」と探していました。

keyconfig では以下のようなことをしていました。

  • 元々あるキーバインドを変えたり、追加したり
  • bookmarklet をワンキーで使ったり(CSS on/off を F1 キーで一発とか)
  • vim のように j で下にスクロール、k で上にスクロール、gg でページ先頭に移動、etc..

中々見つからず「きっと他にはないんだな…」と思って諦めたら、偶然 KeySnail という add-on を発見。探している時は見つからないのに、探してないと見つかるジンクス…!

さっそく試用してみたところ、これがよく出来ていて素晴らしい!久しぶりに「おおおー」と思う add-on でした。KeySnail は keyconfig で出来たことは出来るうえ、+α が大きいので、vimperator のように「環境」な面もあるかも。

2~3 日使ってみた感想は、keyconfig で出来たことは問題なく出来るし、管理もしやすいし、keyconfig にはなかったような機能もある、といった具合でかなり好印象です。この便利さはたまらないなーということで、長くお世話になった keyconfig から KeySnail に移行を決意 :)

KeySnail は Emacs ユーザー向きなのかな?と最初思ったのですが、Vim っぽい指定もできるのであまり問題なかったです。私は Vim っぽいキーバインド指定で使っています。

KeySnail プラグイン

KeySnaill はプラグインで機能を拡張させることができます。便利なものが多くて感動。特にいいなあと思ったものを紹介+メモ。

Prefer LDRize

このプラグインは、KeySnail と LDRize がぶつからないように、よきにはからうよう設定できるものです。
Prefer LDRize プラグインで LDRize と KeySnail をいい感じに共存させる – リタマス を参考にして、PRESERVE エリアに以下のように設定しました。

plugins.options["prefer_ldrize.keymap"] = {
    "p"   : null,
    "l"   : null,
    "v"   : null,
    "o"   : null,
};
plugins.options["prefer_ldrize.keymap"]["C-d"] = function () { ext.exec("prefer-ldrize-scroll-next-item"); };
plugins.options["prefer_ldrize.keymap"]["C-b"] = function () { ext.exec("prefer-ldrize-scroll-previous-item"); };

デフォルトだと LDRize の移動キーも j k 、私が設定しているスクロール用キーも j k でバッティングするので、私は後者を優先して LDRize のキーバインドを変更。これはグリモンの LDRize を開いてキー設定部分を書き換えてもいいかもしれません。

KeySnail を切れば通常の LDRize のキーバインドで動くし、バックアップするファイルも少ない方がいいし、ということで私は KeySnail の設定に書きました。

また、元々私の LDRize の利用方法は j k で移動するのがメインで、たまに v で開いたり、p でピンをたてて o で開いたり、といったライトなものだったので、必要最低限のキー p l v o だけ残し、あとは潰してしまうことに。思っていた以上に使いやすくなりました。

Yet Another Twitter Client KeySnail

Twitter クライアントです。これすごいな~。リストは見れないのですが、TL を気軽に見たり、ぱぱっと Twitter に投稿したりするには手軽で良いです。サクサク感がいいです :)

2010/02/24 追記
私が見落としていただけで、リスト表示にも対応していました。コメントで教えていただきました。ありがとうございます><

新しくなった Twitter クラアイントプラグインは操作性が格段に向上 – リタマス を参考に、PRESERVE エリアに以下のように指定。

plugins.options["twitter_client.keymap"] = {
    "C-e"   : "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",
    // twitter client specific actions
    "C-t"     : "tweet",
    "r"     : "reply",
    "R"     : "retweet",
    "D"     : "delete-tweet",
    "f"     : "add-to-favorite",
    "v"     : "display-entire-message",
    "V"     : "view-in-twitter",
    "c"     : "copy-tweet",
    "s"     : "show-target-status",
    "@"     : "show-mentions",
    "/"     : "search-word",
    "o"     : "open-url"
};

“C-e” : “prompt-toggle-edit-mode”, は、デフォルトだと “C-c” : “prompt-toggle-edit-mode”, となっていますが、これだとコピーのショートカットキー(C-c)を潰してしまうので押しやすくて使っていないキーを選んで C-e としました。

_keysnail.js に以下のように書いて、[C-s] [T] で今見ているページのタイトルと URL が入った書き込み欄、[C-s] [t] で普通の書き込み欄が出るようにしました。URL は、ちゃんと j.mp で短縮されるのが細かいながらに凄いなぁ。

key.setGlobalKey(['C-s', 'T'], function (ev, arg) {
    ext.exec("twitter-client-tweet-this-page", arg);
}, 'このページのタイトルと URL を使ってつぶやく', true);

key.setGlobalKey(['C-s', 't'], function (ev, arg) {
    ext.exec("twitter-client-tweet", arg);
}, 'つぶやく', true);

bit.ly (or j.mp) はアカウントを作って URL を短縮すると、クリックされた数などがみれます。デフォルトだと自分のアカウントにはならないので、「URL を自分の bit.ly (or j.mp) アカウントを使って短縮したい!」という場合には、プラグイン本体の yet-another-twitter-client-keysnail.ks.js を編集する必要があります。

具体的には、yet-another-twitter-client-keysnail.ks.js の 1271 ~1272 行目にある以下の部分の id と key を、自分の id と API key に書き換えれば OK です。自分の id と API key は、アカウントを作ってあれば http://bit.ly/account/ などで確認できます。

             const id  = "stillpedant";
             const key = "R_168719821d1100c59352962dce863251";

バージョンアップのたび書き換えないといけないので、私はそのうち失念してしまう予感がちょっとしますが、まぁとりあえず。この設定を _keysnail.js に書いておけるようになれば最高なんだけれど、いずれそうならないかな~

※プラグインは MIT ライセンスとなっていたので bit.ly (or j.mp) の id や API key を書き換えても大丈夫だと思いますが、行う場合には自己責任でお願いします。

2010/02/24 追記
作者の方がプラグイン本体を変更しなくても、_keysnail.js に設定を書いておけば良いようにしてくださいました!これでプラグインの更新があっても、都度書き換える必要がなくなりとても楽になりました。MOOZ さん本当にありがとうございます!

その他

他にも色々とプラグインがあるので、自分にあったものを探すのも楽しいかと思います :) あれもこれも試してみたくなってしまうなー><

その他設定 – migemo を利用

Customizing (Japanese) – keysnail – GitHub を参考に、PRESERVE エリアに以下のように書いて XUL/Migemo の機能を通じてマッチングするように。これはちょっと重くなるようなので、環境によっては指定しないほうがよいかもしれません。

//migemo 有効に
prompt.useMigemo           = true;
prompt.migemoMinWordLength = 3;

keyconfig でやっていた、bookmarklet へのキーバインド指定

_keysnail.js に以下のように書くことで可能でした。

key.setViewKey(['b', 'c'], function (ev, arg) {
    if (window.loadURI) {
        loadURI(getShortcutOrURI("css", {}));
    }
}, 'CSS on/off');

firefox の bookmarklet -> 右クリック -> プロパティ -> キーワード「css」、と予めして上記のように書けば、b を押してから c で、その bookmarklet が実行されます。

たとえば bookmarklet のキーワードを「hatebu」としていて、これを F1 に割り当てる場合には、以下のようにすれば OK です。

key.setViewKey('F1', function (ev, arg) {
    if (window.loadURI) {
        loadURI(getShortcutOrURI("hatebu", {}));
    }
}, 'hatebu に登録');

まとめ

書ききれないのですが、他にも設定できることはたくさんあっておもしろい!設定用の画面もありとっつきやすく、少し分かったらテキストエディタでがしがし編集も OK と柔軟に設定できます。カスタマイズ好きな方はハマると思います :)