2

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

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

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

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

我正在尝试诊断和修复这些故障。我设法通过在(region-active-p). 但是问题 2 让我完全难住了。我什至不知道如何诊断。

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

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

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

4

1 回答 1

3

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

于 2012-06-19T02:18:06.097 回答