letの束縛部分を便利に編集したい
- 平成22年5月6日(木) 15時58分51秒
- 区分
- Emacs
- 報告者:
- chiba
こんにちはchibaです。 ネタ切れなのでいきなりLISPネタなのですが、letでつつまれた式を編集している際に、後で束縛したい変数を追加したくなることって良くありますよね。
(let ((str "foo bar baz")) .... (setq len (length str)))という風に書いていて、後でlenが欲しくなるような
つまり
(let ((str "foo bar baz")
(len 0))
....
(setq len (length str)))
こういう風に前に戻って(len 0)を追加したいわけですね。
思い立ったが吉日なのでそういうelispを書いてみることにしました。
(progn
(defun edit-let-bind ()
(interactive)
(let ((foundp nil))
(save-excursion
(catch 'loop
(while (not (c-at-toplevel-p))
(backward-up-list)
(down-list)
(let ((thing (thing-at-point 'symbol)))
(cond ((or (string= "let" thing)
(string= "do" thing))
(down-list)
(setq foundp t)
(throw 'loop nil))
('T (backward-up-list))))))
(when foundp
(recursive-edit)))))
;; keybind
(define-key global-map [(control meta shift ?c)] 'edit-let-bind))
非常に適当な作りですが、letや、doの束縛部を編集するために、再帰編集モードに入り、束縛部分にカーソルを飛し、編集が終わったら、再帰編集モードから抜ける、という風にしてみました。
再帰編集モードから抜けるのが、C-M-cだったので、C-M-sh-cで、束縛部の編集へ。
一応それなりに便利に使えますが、どなたかもっとちゃんとした、elispの流儀に則ったものを作成して頂けると嬉しいです! ■