このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

Firefoxアドオン It's All Text! と Emacs を一緒に使う

誰かさんのツィートから「テキストエリアの入力を普段使っているテキストエディタなどで行なえるFirefox拡張『It's All Text!』」http://veadardiary.blog29.fc2.com/blog-entry-2063.html という記事を拝見しました。コレ、使ってみようかな、と。

インストールしたら、[ツール]-[It's All Text!]-[設定]ダイアログを開きます。必須の入力項目は「エディタ:」のところだけです。ここに、使用するテキストエディタフルパスを指定します。

久々にemacsclientの出番

エディタにはEmacsWindowsならMeadow3)を指定することにします。

今となってはEmacsも特別に重いプログラムではありませんが、ブラウザのテキストエリア編集のたびにEmacsプロセスがあがるのはうれしくありません。既に起動中のEmacsに編集させるツールとしてemacsclientがあります。最近使う機会がメッキリなくなっていたので、存在も使い方も忘れかけていました。

emacsclientはコマンドラインツールで、編集したいファイルをコマンドライン引数に並べるだけです。そういえば、昔は環境変数EDITORにemacsclientを指定してました。It's All Text! の場合は、環境変数の代わりに、ダイアログに対してフルパスを入れるわけです。C:\Installed\meadow3\bin\emacsclient.exe とダイアログに入力しました。

Emacsの本体側をサーバーとして動かさないといけないので、.emcas に次のように書きます。


(if (locate-library "server")
(progn
(load-library "server")
(server-start)
))

これで準備OKです。

It's All Text! の機能

例えば「はてなダイアリー」の「編集」ボタンで、テキストエリアのあるページを開きます。テキストエリアの右下(位置は設定可能)をマウスポインタが通ると、It's All Text! の編集ボタンが現れます。

このボタンを押すと、テキストエリア内容が一時ファイルに書き出されて、指定したテキストエディタが起動されます。emacsclientを使った場合は、今起動しているEmacsに新しいバッファが追加されます。It's All Text! は、一時ファイルを監視していて、更新されるとファイルの内容をテキストエリアに反映させます。要するに、テキストエディタで編集しているファイルとブラウザのテキストエリアが同期するわけ。

編集が終えたら、ブラウザからフォームのサブミット操作をします。一連の操作はこれだけです。

ファイルの文字エンコーディングとテキストエリアで使用する文字エンコーディングが食い違うと無茶苦茶なことになるので、注意するなり対処するなりが必要です(深刻な問題にはなりませんけど)。「ファイル→テキストエリア」の方向は自動で同期しますが、「テキストエリア→ファイル」の方向は自動的に反映されないので、It's All Text! の[編集]ボタンを押す必要があります*1

--no-wait オプションを指定する

emacsclientは、コマンドプロンプト・ウィンドウを伴って起動されます。ウィンドウをクローズしてemacsclientを終了しないと、コマンドプロンプトがイッパイたまってしまいます。また、Emacs側でバッファを閉じようとするといちいち「クライアントが生きているけど、いいのか?」とか聞かれて鬱陶しい。

emacsclientには、Emacsへの通知が済めばサッサッと終わってしまうオプションがあります。--no-wait オプションです。このオプションを付ければ解決です。使用するエディタとして C:\Installed\meadow3\bin\emacsclient.exe --no-wait を指定。

アレッ? ダメだ。動かない。It's All Text! は、エディタ起動のコマンドラインをファイル名だと解釈するらしく、空白とオプション部分も含めたファイルを探しにいくようです。しょうがないので、次のようなバッチファイル(CMDスクリプトファイル)を作りました。


@echo off
C:\Installed\meadow3\bin\emacsclient.exe --no-wait %1

このバッチファイルのフルパスを「エディタ:」に指定します。

その他いろいろ

「編集」ボタンじゃなくて、テキストエリア内で右クリックしてもテキストエディタを起動できます。このとき「新たな拡張子で編集」で拡張子を選べます。これはけっこう便利。

Emacsは拡張子で編集モードを決めるので、拡張子「.css」と指定すれば、CSSモードで編集できます。選べる拡張子は、[ツール]-[It's All Text!]-[設定]ダイアログの「ファイル拡張子:」項目で変更追加できます。デフォルトは .txt,.html,.css,.xml,.xsl,.js ですが、例えば、.txt,.html,.css,.xml,.xsl,.js,.json,.csv とすれば、.jsonと.csvも選べるようになります。

リフレッシュ間隔の秒数のデフォルトは3ですが、僕は2に変更しました。まー、気分の問題ですが。

一時ファイルの実体がどこにあるかは気にしなくていいでしょうが、僕の環境では、C:/Users/hiyama/AppData/Roaming/Mozilla/Firefox/Profiles/y76pt8jp.default/itsalltext/ の下でした。このディレクトリの下を漁るような事態がないとは言い切れません。

ついでに、emacsclientの便利な、いやあんまり便利でもない機能だけど、-e または --eval オプションで ELisp の式を評価できます。コマンドラインで、突然S式の評価が必要になったときに使えます。


>emacsclient --eval "(cdr '(foo bar baz))"
(bar baz)

>

*1:Emacsはディスクファイルの変更を監視しているので、It's All Text! の書き込みを検出できますが、エディタによっては手動で再読み込みが必要でしょう。