Emacs Lisp 式の値を; =>
というコメントをつけた部分に自動注釈するlispxmpというパッケージがあります。
作者のrubikitch氏のブログに詳しいです。
デフォルトではbuffer全体が対象ですが、regionがactiveなときはregion内でだけ実行するように機能を追加しました。
(defun lispxmp ()
"Annotate value of lines containing `; =>' in the current buffer.
If a region active, annotate only in the region."
(interactive)
(save-restriction
(when (region-active-p)
(narrow-to-region (region-beginning) (region-end)))
(let ((pt (point)) (wstart (window-start (selected-window))))
(lispxmp-create-code (current-buffer))
(delete-region (point-min) (point-max))
(insert-buffer-substring lispxmp-temp-buffer)
(unwind-protect
(if debug-on-error
(eval-buffer)
(condition-case err
(eval-buffer)
(error
(ding)
;; next action when error
(run-with-timer 0 nil 'message "Error in eval: %S" err))))
(lispxmp-create-annotations (current-buffer) lispxmp-results)
(goto-char pt)
(set-window-start (selected-window) wstart)))))
以下で公開しています。
他にも
-
cl
からcl-lib
への変更 -
defadvice
からadvice-add
への変更
など動作に変更はない部分での、新しいversionへの対応をしています(とはいえこういう対応をしなくても動くのがEmacsの素晴らしいところではありますよね)。
2025-02-08追記
save-excursion
では戻りきれていなかったので、元々の実装にならって修正しました。