更新: 元の質問には回答しましたが、より一般的なアプローチを知りたいです。単一の C-/ で元に戻す複数の操作を定義するにはどうすればよいですか。
TODO コメントをコードに自動的に挿入する関数を作成しようとしています。この機能に「元に戻すオプション」を持たせたい。
buffer-undo-list にマークを追加する方法を見つけました:
(setq buffer-undo-list (cons (point) buffer-undo-list))
これにより、この関数が実行された位置にポイントを戻すことができます (元に戻すことにした場合)。
私の質問は: buffer-undo-list に複数の挿入を追加するにはどうすればよいですか? つまり、私の関数には複数の (str を挿入) ステートメントがありますが、それらすべてを 1 つの C-/ と一緒に元に戻したい (元に戻すことにした場合)。
このプロパティを持つ他の関数から正確にコピーしようとしましたが、うまくいきませんでした。以下のコードは私が今持っているものです:
(defun insert-todo ()
"Appednd 'TODO username: date - ' at the end of line and set point
to where this string ends"
(interactive)
(setq buffer-undo-list (cons (point) buffer-undo-list)) ;; save the point for undo
(save-excursion
(end-of-line)
(setq eol (point))
(let ((buffer-undo-list t)) ;; do not record following commands for undo
(insert " " comment-start (save-excursion comment-end))
(insert (format " TODO %s: " (getenv "USER")) (format-time-string "%d.%m.%Y") " - ")
(setq buffer-undo-list (cons (cons eol (point)) buffer-undo-list))))
(end-of-line)
)