読者です 読者をやめる 読者になる 読者になる

けちゃぶろぐ

Golang とか Ruby とか Vim とか……。

Google Chrome の textarea を Emacs で編集する

WEB ブラウザでなにかと textarea に文章を入力することがありますが、編集中に思わず C-n とか連打しちゃって、新しいウィンドウが大量に立ち上がる……なんてことが多々あります。
Emacs でテキスト編集してブラウザにコピペ……。それでもいいかもしれませんが少し面倒です。
そこで、Edit with Emacs を導入しました。

Edit with Emacs は、Google Chrome の Extension と、edit-server.el という Emacs Lisp の組み合わせで動作します。

インストール

まず、Google Chrome の Extension をインストールします。

次に、edit-server.el を適当に配置します。
edit-server.el は、Extension のオプションからDLできます。github からも取得できます。

配置したら load-path に追加し、.emacs 等に以下を追加します。

(require 'edit-server)
(edit-server-start)

新しくフレームを開きたくない場合は、

(setq edit-server-new-frame nil)

も書いときます。

これで準備は完了です。

使い方

使い方は簡単。

まず、表示している WEB ページの textarea を右クリックし、コンテキストメニューから Edit with Emacs をクリックします。
すると、Emacs で編集用のバッファが開きます。

ちなみに、Extension のオプションで、textarea の横に edit ボタンを表示したり、Alt + Enter で呼びだせるように設定できます。

textarea に入力済のテキストがあるときは、バッファにテキストが自動挿入されています。

あとはテキストを編集して、C-x C-s*1 を実行すると、編集されたテキストがブラウザに反映されます。
編集をキャンセルする場合は、C-x C-c*2 です。

これだけです。

なんか文字化けする

自宅の Mac 環境だと特に問題はありませんでしたが、会社の Windows 環境だと Emacs で編集用バッファが表示されたときに、もともと入力されていた日本語が文字化けしていました。

原因としては、Extension との通信に使用しているネットワークプロセス の文字コードが指定されておらず、default-process-coding-system に設定されている文字コードが使用されていることです。

私は、default-process-coding-system には諸事情により cp932 を指定しています。
一方、Extension と Emacs 間の通信は HTTP を使用しており、テキストは UTF-8エンコードされているようです。

default-process-coding-system に utf-8 を指定すればいいのですが、それでは他の動作に影響を与えてしまうのでやりたくありません。
なので、edit-server.el に1行加えることにしました。

(make-network-process
 :name "edit-server"
 :buffer edit-server-process-buffer-name
 :family 'ipv4
 :host (if edit-server-host
           edit-server-host
         'local)
 :service edit-server-port
 :log 'edit-server-accept
 :coding '(utf-8-dos . utf-8-dos)    ;;  この1行を追加する
 :server t
 :noquery t)

edit-server-start 関数でネットワークプロセスを生成している箇所があるので、文字コードの指定をしてやります。

これで文字化けすることなく表示することができました。

*1:C-c C-c や C-x # も使えます。私は C-c C-c を使ってます。

*2:個人的には気にいらないので、C-x C-c を削除して、C-c C-k にマップしています。