letの束縛部分を便利に編集したい

区分
Emacs
報告者

こんにちは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の流儀に則ったものを作成して頂けると嬉しいです! ■

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa