萌新提问:如何在session中保留折叠信息

我现在用 desktop-save和desktop-read进行session的保存和恢复,但是我的代码折叠似乎无法持久保存,每次重新恢复的时候就没有折叠了,请问有什么办法可以保留折叠情况么?

1 个赞

这里假设 LZ 用的是 Emacs 的 hideshow

看了下实现,是用 overlay 做的,然后找到了一个可持久化的包:

mneilly/Emacs-Persistent-Overlays: This is an Emacs mode that allows you to store overlays between sessions. This is useful for keeping your code folding in hideshow mode

我没有尝试,也许能用

感谢,这个包是可用的,但是似乎只在一些编程语言中可用,请问如果对于org文件有什么方法可以使得折叠持久化么?

也许可以照着上面的包给org mode 搓点代码,不过搜索org save fold state 还是能找到一些野包:

不知道能不能用就是了

org-mode 应该是自己实现了hideshow的功能,所以上一个帖子里面的包不起作用,不过我也不确定是这样

没仔细看具体场景但总之desktop是存一些变量,只要这个功能存了变量,应该把变量加进desktop就行,没有变量就要自己改改了

这个包似乎不起作用,所有的折叠他都存不下来,我看了一下他存储的折叠信息都是nil,不知道为啥

请问你现在找到解决方案了吗?一刷新文档折叠信息就全部没有了,和 logseq 混用的时候还是很烦的。

刷新使得问题变复杂。刷新将清除当前所有的 local 状态,就算把 overlays 持久化了,一旦文件是被第三方修改,overlays 跟文件就不匹配了。

确实是,vscode 虽然能保留折叠信息。但是如果是第三方应用修改了文件,它也是会失去折叠信息。估计是必须像 logseq 那样,在块里面加入一个 collapse 属性来控制折叠才方便实现了。

或者改变“刷新”机制:

  1. diff 新旧文件。
  2. 有更新:模拟编辑操作,把补丁应用到当前 buffer。
  3. 无更新:不做任何操作。

这样就避免了刷新导致的 overlays 丢失的问题。

抱歉我现在还是没有找到持久化org折叠的内容

我现在是模仿 logseq,在标题属性里面加入了 collapsed 属性,然后每次刷新或者加载文件时,会根据这个属性值决定是否折叠。就是emacs-lisp 水平有行,有点小 bug。