標準入力を受け取ってemacsで開く

vimだと、

echo hoge | vim -

というように、"-"とオプション指定すると標準入力のものを開いて編集できるらしい。


emacsではどうすればいいのかな?と調べてみたけどよく分からない。とりあえず見つけたのがコレ。
unix - How to make Emacs read buffer from stdin on start? - Super User
真似してやってみた。PATHが通っているところでemacspipeというシェルを作成。

#!/bin/sh
TMP=$(mktemp -t emacs)
cat > $TMP
emacsclient -n $TMP
rm $TMP

emacsclientってコマンドは最近まで全然知らなかったんだけど、"M-x server-start"しておけばemacsclientコマンドに渡したファイルをemacsで開けるようになるらしい。べんり!
これで

echo hoge | emacspipe

という具合に標準入力で渡ってきたものをemacsで見ることができるようになった。

追記

mktempで生成されるファイル名だとmodeの判別されなくてアレなので、引数で拡張子渡せるようにした。

#!/bin/sh
TMP=$(mktemp -t emacs).$1
cat > $TMP
emacsclient -n $TMP
rm $TMP

こうしておくと、

echo print 1 | emacspipe pl

と例えば".pl"の拡張子を付加して開くようにすることで自動的にperlのmodeで開くようになって編集しやすい。