是否有列出给定缓冲区中标记的 Elisp 函数?
Are there Elisp functions that list markers in a given buffer?
我看到 buffer-has-markers-at
至少会告诉是否有标记指向一个位置,但它不仅自 24.3 以来被标记为过时,而且它没有提供一种实际获取标记的方法对象。
正在查看 the C source, I can see that buffer to buffer_text structs point to a singly linked list of Lisp_marker structs, but I can't find any Elisp functions to access them. Also, there's a related thread from 1999。
扩展我的评论:确实没有函数可以为您提供缓冲区中存在的标记集。
部分原因是,虽然在实现级别每个缓冲区都包含其标记列表,但在概念级别,标记指向缓冲区而不是相反:如果未引用标记任何数据都将被垃圾收集。
因此,您可以在 C 源代码中找到的标记列表包含 "real markers" 以及 "zombie markers",即变得无法访问并将在下一次 GC 中消除的标记。
将此暴露给 Elisp 意味着其中一些僵尸标记可能是 "resuscitated"。也许可以在不引入任何技术问题的情况下完成,但这确实意味着这样一个功能的语义会有点难看。
所以我想提供这个作为调试辅助工具可能没问题(并让函数首先调用 GC,以便去除僵尸),但不清楚它是否非常有用:一些这些标记纯粹是由 save-excursion
.
之类的人临时引入的内部事物
也许更好的选择是让您的代码使用(0 长度)覆盖而不是标记,这样您就可以使用 overlays-in
,这样您就可以在这些覆盖上设置属性,从而更容易找出每个叠加层的用途。
我看到 buffer-has-markers-at
至少会告诉是否有标记指向一个位置,但它不仅自 24.3 以来被标记为过时,而且它没有提供一种实际获取标记的方法对象。
正在查看 the C source, I can see that buffer to buffer_text structs point to a singly linked list of Lisp_marker structs, but I can't find any Elisp functions to access them. Also, there's a related thread from 1999。
扩展我的评论:确实没有函数可以为您提供缓冲区中存在的标记集。
部分原因是,虽然在实现级别每个缓冲区都包含其标记列表,但在概念级别,标记指向缓冲区而不是相反:如果未引用标记任何数据都将被垃圾收集。
因此,您可以在 C 源代码中找到的标记列表包含 "real markers" 以及 "zombie markers",即变得无法访问并将在下一次 GC 中消除的标记。
将此暴露给 Elisp 意味着其中一些僵尸标记可能是 "resuscitated"。也许可以在不引入任何技术问题的情况下完成,但这确实意味着这样一个功能的语义会有点难看。
所以我想提供这个作为调试辅助工具可能没问题(并让函数首先调用 GC,以便去除僵尸),但不清楚它是否非常有用:一些这些标记纯粹是由 save-excursion
.
也许更好的选择是让您的代码使用(0 长度)覆盖而不是标记,这样您就可以使用 overlays-in
,这样您就可以在这些覆盖上设置属性,从而更容易找出每个叠加层的用途。