如何诊断涉及间接缓冲区的 emacs lisp 问题



我正在使用Dave Love的noweb模式来编辑一个混合了LaTeX和C代码的文件。 爱的模式使用他的多模式在模式之间来回切换。这种切换是通过间接缓冲区完成的。

在 Emacs 21 中,该模式似乎运行良好。 但是强制升级到 Emacs 23 暴露了问题:

  1. 在模式之间转换时,标记会丢失。

  2. 在两个不同的可见窗口中查看同一缓冲区时,窗口 A 中的移动偶尔会导致窗口 B 中的移动,也会导致窗口 B 的point移动。

我正在尝试诊断和修复这些故障。 我设法通过在(region-active-p)时关闭所有缓冲区/模式切换来解决问题 1。 但是问题2让我完全难倒了。 我什至不知道如何诊断它。

我正在寻找任何帮助,尤其是对这两个问题之一的回答:

  • 我应该如何尝试诊断此问题?

  • 在哪里可以找到对间接缓冲区语义的清晰和更完整的解释? GNU Emacs Lisp 参考手册没有说太多,我不确定阅读源代码是最好的下一步。

正如你可能想象的那样,语义和Emacs是两个非常独立的世界。 同样,可悲的是,没有"清晰完整的解释"。 基本上,间接缓冲区共享其缓冲区文本、文本属性以及一些内部变量,同时它们保留单独的缓冲区局部变量和单独的覆盖。 共享和不共享之间的划分在很大程度上是任意的。 更糟糕的是,间接缓冲区很少使用,因此错误和不必要的假设不可避免地会蔓延。要追踪您的问题,最好的方法是首先提出可靠可重复的配方。我可以重现一些奇怪的行为,w.r.t 基础缓冲区的标记最终成为间接缓冲区中的标记,因此这看起来像某个地方的普通错误(可悲的是,这似乎在 24.1 中没有修复)。 请M-x report-emacs-bug .

最新更新