如何让org-hide-emphasis-markers立刻在当前buffer中生效

在org-9.6.15中,我尝试通过设置org-hide-emphasis-markers改变markup的显示状态,发现已经折叠过的markup不会展开。需要重新渲染已经被折叠的的markup才能生效(也就是手动去更改所有markup元素的text-property)。org在org-do-emphasize中使用这个变量,但是我不知道什么时候会调用org-do-emphasize,它的调用似乎只是局部的。

如何做一个hideshow函数,根据org-hide-emphasis-markers的状态去控制整个buffer里(已经渲染过)的markup显示状态?

更详细一点,我想知道的是,有哪些工具是可以org可以提供给用户的,不用完全靠自己去解析org文档。如果自己解析可能会出很多问题。

关于这点我有发言权,可以到 worg 去查询:

Org-mode for developers

有 2 个常用的 API:

  1. Org Element API 这个 API 是关于 org-mode 各类元素提取的

  2. Using the Mapping API (The Org Manual) 这个 API 是用于快速定位元素位置的

org 是内置自己的解析引擎的,不需要用户自己解析,但 org-element-api 还不够完整,新任项目主持人希望能够将解析引擎完全迁移到 org-element-api。

2 个赞

这很有帮助,谢谢你!

如果你手动更改了 org-hide-emphasis-markers,希望立马看到效果的话,可以手动运行一下 (org-restart-font-lock),就可以了。

如果你想在函数里实现,只需要在更改 org-hide-emphasis-markers 后加一条 (org-restart-font-lock)就行呀。

2 个赞

nice!找的就是这个