FirefoxのテキストエリアをEmacsにしてくれるプラグインK2Emacsをリリースしました


Emacsは中毒性が高いエディタだ、なんていうことを聞きます。とりあえず、Emacsでどうにかしたい。Emacsからでたくない。ただ、そこでネックとなってくるのが、ブラウザ。Emacsではw3mというテキストブラウザが使えるので、それを使えばどうにかしのげますが、昨今のリッチなサイトでは、結構苦しいなーと思ってしまうのです。
なので、Firefoxなり他のブラウザを使うことを余儀なくされるのですが、そこでストレスなのが入力環境。Emacsとは全く異なる環境を強いられるわけです。
そして、入力フォームの機能も非常に陳腐。例えば、ブログの編集画面とかだと、大層なwisiwyg機能とかをつけてくれたりするわけですが、なんつーかですね、そんなアイコンなぞ押したくないんじゃ!!と思ってしまうわけです。
その前に、僕はHTML直書派なのですが、フォームとかに書くと、あータグに色つけてーとか思ってしまいます。こういうストレスを感じている方は少なからずいらっしゃるようで、例えばq4aさんは次のようにおっしゃってます。
editorinjection – 接続法第三式

w3m を使っていると, textarea などに対して sensible-editor として nano が呼び出される. nano 自体はあまり好みではないのだけど,この仕組みは非常に優れていると思う.
最終的に何らかの文字情報を入力することが目的であれば,それは JavaScript で場当たり的に機能を補完したりとかいった方法ではなく,ユーザが使い慣れているテキストエディタに丸投げするという方法で解決されるべきだ.餅は餅屋.そうすれば,サービスごとの仕様差に発狂したり*1, Ajax とか名前がかっこよくなっただけで本質的に何も変わっていない JavaScript の実行速度ばかりに特化したチューンナップがもたらした細々した謎仕様に辟易したり*2,怒りにまかせてブログにだらだらと長文の文句を書き殴ったあげく誤って戻るボタンを押して憤死したり*3することは無くなる.

それにトラバしたrubikitchさんは次のようにおっしゃっています。
餅は餅屋 – (rubikitch loves (Emacs Ruby CUI))

「餅は餅屋」に大賛成。なんというかサイトごとに入力機能を強化してるのは車輪の再発明みたいで好きじゃない。というか、そこまでいくともはや「ブラウザ(閲覧するもの)」の範疇を超えている。

俺はEmacs上でいろいろと入力環境を強化しているが、ブラウザ(Firefox)だけで操作するとなると、それらが使えなくなるのがとてつもなくつらい。初期状態でもkill-ringとかdabbrevとかがあるよね。ブラウザに入力するときにはいつもEmacsを呼んでいる‥いってみればEmacsを『超強化されたIME』としても使っている。一見不便そうだけど、素早く切り替えができて快適に入力できるのであれば、それでいいじゃないか。

つまり、Emacsで書いてコピペするということですよね。むーそれもなんかスマートでないような気が。もっとEmacsとFirefoxを仲良くさせたいなー。
、という視点でK2Emacsはできてます。

K2Emacsとは、、、の前にKeySnailとは

K2Emacsは、KeySnailというFirefoxのアドオンのプラグインです。ややこしいですね。
KeySnailとは、以前にもここで紹介させてもらったアドオンで、FirefoxをEmacsにしてくれるアドオンです。
firefoxをEmacsにしてくれるKeySnailがすごすぎる

この日記を書いたのが、9月の末のお話。それから、1ヶ月ちょっとしかたってないのですが、その間にKeySnailは化け物アドオンへと進化しつつあります。プラグインシステムの導入。このシステムの導入で、僕のFirafoxはただのブラウザから環境に変わりつつあります。

例えば、KeySnail開発者のmoozさんが、作ったtwitterクライアント。脊髄反射的につぶやけ、お腹いっぱいな機能がてんこ盛りです。
詳しくは、moozさんのエントリーで。
KeySnail で簡易 Twitter クライアント – リタマス
Twitter クライアント化プラグイン 1.2.4 リリース – リタマス

そして、できたてほやほやのプラグインHoK。いわゆるヒントモードを追加してくれるプラグインです。このプラグインを導入して僕はマウスを壁めがけてぶん投げてやりました。
KeySnail で Hit a hint が可能となるプラグイン HoK をリリース – リタマス
Emacsユーザの方は、とりあえず入れてみるといいと思います。ちなみに、僕はこのアドオンのおかげで(せいで?)javascriptを勉強してみることになりました。
とにかく、Emacsライクなブラウジング環境にビビることうけあいです。

やっとK2Emacsについて

やっとK2Emacsのお話です。すでに書いたように、KeySnailのプラグインとして動作します。機能は1個しかありません。ここまでたらたらと書いておいて何ですが1個だけです。それは、textareaを外部エディタで編集できるようにする、というものです。
まずは、KeySnailがインストールされていないことには始まりません。インストールしておきましょう。
Home – keysnail – GitHub

K2Emacsをインストールします。以下のリンクを右クリックすると、このプラグインをインストールという項目が出てくるのでそれをクリックします。
K2Emacs

最後に、KeySnailをインストールしたときに作成した初期化ファイルに、次のようなスクリプトを追加してキーバインドを設定します。

[js]
key.setEditKey(["C-c", "e"], function (ev, arg) {
ext.exec("edit_text", arg);
}, "外部エディタで編集", true);
[/js]

デフォルトの設定は、オレオレ設定でubuntuがデフォルトになっています。なのでWinとかMACだとオプションの設定をする必要があります。以下はオプションの設定例。ここで1行目は好みのエディタのパスを、2行目では、エディタで開くファイル形式を指定します。3行目はテキストのエンコード、4行目はプラットフォームごとのディレクトリセパレータの設定です。
これを初期化ファイル内のPRESERVEエリアに書いておきます。KeySnailの設定ダイアログだと、キーバインドからその他のコードというタブを開いたところに書いておけば良いです。
[js]
plugins.options["K2Emacs.editor"] = "C:\WINDOWS\notepad.exe";
plugins.options["K2Emacs.ext"] = "html";
plugins.options["K2Emacs.encode"] = "UTF-8"
plugins.options["K2Emacs.sep"] = "\";
[/js]

これで設定終了。
では、実際に使ってみます。どっかのテキストエリアにフォーカスされたときにC-c eします。そしたら多分Emacsが立ち上がるのでhogehogeして保存。Emacsを終了させたら、テキストエリアにEmacsで書いたことが反映されているはずです。

でも、Emacs起動遅いんでは?

ここで、ふつーのEmacsを設定してしまうとやっぱり起動に時間がかかってしまいます。ブログへのコメント程度だと多分起動する前に書き上がってしまうかも。んなの本末転倒なので、ちょっとしたtipsを。
今年、2年ぶりにメジャーバージョンアップしたEmacs23では、デーモン機能が正式にサポートされました。この機能を使うことで、Emacsを高速に立ち上げることができます。
やり方は、簡単。端末でemacs –daemonとしておいて、emacsclientを起動するだけです。デーモン立ち上げるの忘れちゃうよーという人は、自動的に起動させておくと良いかもです。詳しいやり方は、以下のサイトを参考にすると良いと思います。
ゆたりんブログ: emacs23.1がリリース daemon機能を試用してみる

ちなみに、K2Emacsはデフォルトの設定でEmacsclientを立ち上げるように設定されているので、デーモンさえあげてしまえば、特に設定する必要はありません。

elispとjavascript

今回、javascriptを初めて本格的に勉強して気づいたのが、Firefoxってなんでもできるのね、ということでした。
この日記を見ていただいた方で、実際に使ってみたら、あ、でもあの機能がないよねーとか、あのキーバインドねーよ、ということがあるかもしれません。
でも、だいじょーぶ。自分で書けばいいんですね。Emacsでelisp書くように書いちゃえばいいのです。そしてある程度書いたらプラグインとして公開してみると、他の人も幸せになれるかもしれません。そうやって、コミュニティが広がっていけば、FirefoxはほんとーにEmacsになるかも。

謝辞

このプラグインは、alice0775さんのかかれたuserChromeスクリプトを参考にして作りました。有用なスクリプトを公開してもらって、感謝しきりです。
userChrome.jsの話題9 テキストエリアを外部エディタで編集する – alice0775のファイル置き場 – Yahoo!ジオシティーズ
それと、ぐだぐだなjavascript初心者に丁寧に教えてくれるmoozさんにはいつもお世話になってます。また、イカしたプラグイン楽しみにしてます。

追記

最初はK2editorという名前にしていたのですが、ぶコメでK2editorってエディタあるよーって突っ込まれてしまいました。ごめんなさい、調べときゃ良かったです。というわけでK2Emacsに変えました。と言っても、Emacs以外でも使えるんですけどね。多分KeySnail入れてる時点でほぼEmacsユーザだろうから、まいいかなと。すでにインストールしてくれた方は非常に申し訳ないのですが、アンインストールしてもう1回リンク先からインストールしてもらえるとうれしいです。

さらに追記

またまたぶコメでMacで動かんやんけ!!と言われてしまったので、念のためオプション設定に関する説明を追記しました。と言いながらも、実はMac持ってないので本当に動くかわかりません。動作報告もらえるとうれしいです。当方の環境でubuntu,Winでは問題なく動いています。

さらにさらに追記

 Macでも動くように修正しました。詳しくは以下。
K2EmacsがMacにも対応しました