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

时间:2012-06-15 11:23:15

标签: elisp emacs23 literate-programming

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

在Emacs 21中,该模式似乎运行良好。但强行升级到Emacs 23后发现了一些问题:

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

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

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

    我正在寻求任何帮助,但特别回答这两个问题中的任何一个:

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

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

1 个答案:

答案 0 :(得分:3)

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