更新:我最初的问题得到了回答,但我想知道更通用的方法——如何定义多个操作,这些操作将通过单个 C-/.
我正在尝试编写一个函数,它会自动将 TODO 注释插入我的代码中。我希望这个功能有一个“撤消选项”。
我想出了如何向缓冲区撤消列表添加标记:
(setq buffer-undo-list (cons (point) buffer-undo-list))
这允许我将点返回到执行此函数的位置(如果我决定撤消)。
我的问题是:如何向缓冲区撤消列表添加多个插入?我的意思是我的函数中有多个(插入 str)语句,但我想用一个 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)
)