org-mode文件包含大量内容时内容被完全改变(或清空)这时按撤销回到上一页面,可不可以保持上一页面内容的展开和折叠顺序状态

如题,我现在是把org-mode当成一个浏览器页面来用了。

在所有浏览器的左上角都会有前进后退按钮,类似文本编辑器里面的undo,只不过撤销的是整个页面,而不是几个字符,但如果org文件的内容每次都是完全改变而不是只改变几个字符,这时的undo就不是几个字符了,是撤销整个buffer的内容,这时的undo和浏览器的后退按钮也就比较接近了

这时问题来了,org文件的内容是始终展开的,阅读过程中做了折叠,当undo后退回上一页面时内容再次全部展开,刚做的折叠的顺序状态没有了。

org-mode文件包含大量内容时内容被完全改变(或清空)这时按撤销回到上一页面,可不可以保持上一页面内容的展开和折叠顺序状态?

不知道org-mode能不能做到这点,如果不能的话我就改为不在频繁的改变org文件的内容

举例说明问题:把下面的文本复制到一个org文件中,将其折叠后在点击标题栏上的按钮,在undo回来,这时折叠的状态没有了

#+STARTUP:folded
* [[elisp:(erase-buffer)][点击清空当前org文件内容]]
先把这里内容折叠,在点击上面按钮,然后在undo撤销回到这里,能否保持折叠的状态?

搞定了,如图,现在把web后端返回的内容输出到了minibuffer,而不改变当前buffer

ipv6也用上了,现在的不足之处是web后端返回的中文内容输出在minibuffer都是乱码,只好先用英文

2 个赞

这个问题应该是有办法解决的

今天惊喜的发现用(hs-minor-mode)来展开折叠代码时清空页面内容,在撤销回到上一页时。代码的展开折叠状态是保持的。

发现这个情况后我就在org-mode里启用了hs-minor-mode,又以文学编程形式写了一段代码块测试,用hs-minor-mode折叠里面的代码,发现没有问题。不管我怎么(erase-buffer)改变内容后undo,代码展开折叠状态是保持的,就是org-mode本身的展开折叠不行。

另外我看了vsc等编辑器,代码展开折叠的状态并不能在页面内容被清空的情况下保持,但是emacs可以。

建议你重新组织一下你的提问。我感觉 2、3 楼可删掉。

去掉不必要的文字描述,不要把你当前做的、还没发布的东西卷进来,因为别人读了更混乱。

最好把问题放到阳春的环境下,这样每个人即容易看懂,又容易复现:

⋊> emacs -Q --eval "\
   (progn
     (switch-to-buffer \"*.org\")
     (setq org-hide-emphasis-markers t)
     (org-mode)
     (insert \"Reproduce steps:

   1. 折叠以下代码:

   #+BEGIN_SRC c
   int main(int argc, char *argv[])
   {
     return 0;
   }
   #+END_SRC

   2. [[elisp:(erase-buffer)][点击清空当前 buffer 内容]]

   3. Undo 回复删除内容\"))"

感谢提供问题复现代码,原先的2楼确实多余,删除,原3楼也属于这个问题的实际应用场景,先留着