elisp 中有没有类似 save-excursion 或者 with-current-buffer 的函数, 能保存当前 buffer 内容, 允许修改, 然后再恢复?

动机是 org mode 导出到 ics 格式时, 带有 TODO 的 entry 无法正确导入到 icloud calendar. 因此我打算在导出之前去除所有标题的 TODO. 但我希望对 buffer 的修改是暂时的, 执行完导出命令就恢复.

这个需求很像 org-export-before-parsing-hook 提供的功能, 但是导出其它格式的时候我并没有这个需求. 因此想问问有没有一个函数能这样:

(with-current-buffer-content (progn ...)) ; 执行完以后就恢复 buffer 内容

可以用 with-temp-buffer

edit:

你是不是没有设置 org-icalendar-include-todo

1 个赞

使用undo不行吗,我经常在org-mode里使用undo,而且是在save后把整个buffer内容清空后全部改变的情况下使用undo来回到上一个状态。因此还面临 页面展开折叠的状态无法在undo时保持的问题

1 个赞

用了, todo 导出是 VTODO, 不是 VEVENT, 可以导出到其它 calendar app, 但是 icloud calendar 就有问题. 而且从 VTODO 改成 VEVENT, 还是导不进去. 我怀疑是 icloud calendar 对 ics 支持得不够好. 用 fantastical(另一个日历 app) 就可以.