在emacs中,我有时会错误地调用call-last-kbd-macro.在撤消时我会预期撤销以原子方式撤消键盘宏的整个效果,但这不会发生.相反,我发现自己必须一次撤消宏的每一步.如何在执行宏之前让emacs返回缓冲区状态?
恐怕仅使用内置'undo
机制无法做到这一点。Emacs 中的宏系统实际上会回放内容,就像用户实际键入击键(或鼠标事件)一样,因此撤消历史记录( buffer-undo-list
) 会正常更新。
以下是有关如何扩展当前undo
机制以实现您想要的功能的建议。
扩展'undo
以了解撤消列表中的新条目、macro-begin
标记和macro-end
元素
建议/更改宏播放以在宏播放的开头/结尾插入标记
让undo
代码将两个标记之间的所有撤消事件视为一个单元并撤消所有事件(并在撤消历史记录的末尾添加适当的标记,这样当您redo
进行操作时,它们仍然被视为单个块)
注意事项:
macro-begin
和标记。macro-end
不用说,这是一项复杂的工作。祝你好运。