skeleton での minibuffer 入力時に C-h を help にしない
ちょっとした shell script を Emacs で書く時には skeleton 機能が便利なのでよく使っている。C-cC-t (sh-tmp-file) で
TMP=${TMPDIR:-/tmp}/sample.sh.$$ trap "rm $TMP* 2>/dev/null" 0
こんなのを挿入*1してくれたり、C-cC-i (sh-if) だと
if [ ]; then else fi
こんな風になったりとか。if の condition のところは minibuffer からインタラクティブに指定できたりする。便利。
それはいいんだけどさ。
この minibuffer で文字を入力する際に C-h で文字を消そうとすると help が表示されて、わざわざ BS を押し直さなきゃいけないのでどうにもリズムを狂わされる。普段は minibuffer でも C-h で文字が消えてくれるのに。面倒なのでずっと放置してたけど、今日は気が向いた*2ので skeleton.el のソースを眺めてみた。
元凶についてはよく判りませんでした orz。なんで skeleton の時だけ help になるんだろう。skeleton.el で bind しなおしてんのかと思ってたけどそうでもないっぽいし。なんか見逃してんのかなあ…。もしかしてこんなんなるのはウチだけ? テメエの .emacs が悪さしてたりして。とりあえず目的だけは
(defadvice skeleton-read (around unbind-c-h activate compile) (let ((help-char ?\M-?)) ad-do-it))
こんなんで達成できたのでヨシとしよう。自分は help-command は M-? に割当てているので、ここでも同様の割当てに。原因についてはまた気が向いた時にでも。
余談
あー、そう言えば Bulkfeeds 経由で カーソルの位置にデバッグ用のprintfを挿入 - higepon blog とか 「カーソルの位置にデバッグ用のprintfを挿入」をひと工夫 - 趣味的にっき あたりの話が流れてきてましたが、そんな時こそ skeleton かと。まあ、単純なやつならベタに書いたほうが早いけど。
余談その2
あー、そう言えばここんとこ Ruby を書く機会が多かったんですが、Ruby 用の skeleton ってないんですかね。ちょっとググると ska-skel-ruby.el ってのが見っかりましたが Ruby で頻出の定型文ってこんなもんだっけ? たまにしか使わないからピンとこないな。とりあえずこれを入れといてみよ。