gpt4 book ai didi

elisp - 是否有 Elisp 函数列出给定缓冲区中的标记?

转载 作者:行者123 更新时间:2023-12-01 06:07:22 27 4
gpt4 key购买 nike

我看到了 buffer-has-markers-at至少会告诉是否有指向某个位置的标记,但它不仅自 24.3 以来已被标记为过时,而且不提供实际获取标记对象的方法。

看着 the C source ,我可以看到缓冲区到 buffer_text 结构指向一个 Lisp_marker 结构的单链表,但我找不到任何 Elisp 函数来访问它们。此外,还有 a related thread from 1999 .

最佳答案

扩展我的评论:确实没有功能可以为您提供缓冲区中存在的一组标记。

部分原因是,虽然在实现级别,每个缓冲区都持有其标记的列表,但在概念级别,标记指向缓冲区,而不是相反:如果任何数据都没有引用标记,则任何更多,它将被垃圾收集。

因此,您可以在 C 源代码中找到的标记列表包含“真实标记”和“僵尸标记”,即已变得无法访问并将在下一次 GC 中消除的标记。

将此暴露给 Elisp 意味着其中一些僵尸标记可以“复活”。也许它可以在不引入任何技术问题的情况下完成,但这确实意味着这样一个函数的语义会有点丑陋。

所以我想提供它作为调试帮助可能是可以的(并让函数首先调用 GC,以便剥离僵尸),但不清楚它是否非常有用:其中一些标记纯粹是内部的由 save-excursion 之类的人临时介绍的东西.

也许更好的选择是让您的代码使用(0 长度)覆盖而不是标记,因此您可以使用 overlays-in ,因此您可以在这些叠加层上设置属性,从而更容易找出每个叠加层的用途。

关于elisp - 是否有 Elisp 函数列出给定缓冲区中的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926513/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com