ちょっとだけ役に立つかもしれないtemplate-replaceの例

一週間の内三日も帰る->寝るだとちょっと辛いです。主にプログラミングできないために。

前回、template-replace.elという拡張を紹介したわけですが、さすがにあれだけ突き放しすぎだった気がするので、(テストがてら)一つちょっとだけ役にたつかもしれない例を挙げておくことにします。

emacs lispを書いていると、「あーここcarで囲むんだった」とか「あ、括弧付けわすれた」とかなりませんか?私はよくなります。そんな時に役立つかもしれないtemplate-replace。
以下のような設定をします。

(setq template-replace-alist
      '(("wrap" . ((pattern . ((lambda () (bounds-of-thing-at-point 'symbol))
                             (lambda () (cons (save-excursion
                                                (re-search-backward "(" nil t)
                                                (point))
                                              (save-excursion
                                                (re-search-forward ")" nil t)
                                                (point))))))
                 (template . "(%s %s)")
                 (input . "wrap function: ")))
        ))

これで、M-x template-replaceを実行すると、まずはpatternが複数あるので、ポイント位置のシンボル、または直近の()で囲まれた領域のいずれかをpopup.elで選択します。選択後、「wrap function: 」というプロンプトが出て、ミニバッファへ入力を促されます。で、ここでcarとか入力して enter を押すと、popup.elで選択した領域が、(car 〜)のように囲まれます。〜は、選択した領域になります。
さて、これだけじゃなく、別のシンボルもcarで囲みたいなぁ、といった場合、そのポイントの上で M-x template-replace-resume を実行すると(選択はしなきゃいけませんが)、そのシンボルが自動的にcarで囲まれます。プレフィックスすら入力する必要はありません。

とまぁ、実は本当にいくかどうかわからないまま書いてみたらちゃんといった、という設定例でした。それなりに簡単にできたと思います。
興味とか持たれた方はこちらよりどうぞ。コメントを見るよりもコードを見た方がわかりやすいかと思います。