2012-06-15 70 views
2

我使用Dave Love的noweb-mode来编辑LaTeX和C代码混合的文件。爱的模式使用他的multi-mode在模式之间来回切换。 这种切换是通过间接缓冲区完成的。如何诊断涉及间接缓冲区的emacs lisp问题?

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

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

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

我试图诊断和修复这些故障。我设法通过关闭所有缓冲区/模式切换来解决问题1,而(region-active-p)。但问题2让我完全陷入困境。我甚至不知道如何诊断它。

我期待的任何帮助,尤其是回答以下两种问题:

  • 我应该如何设法弄清这个问题?

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

+0

为了解决问题,我建议尝试Emacs 24,它刚刚正式发布。 – phils

+0

@phils我在等待它被添加到Debian –

+0

在这种情况下,我可以建议的是'M-x report-emacs-bug',如果你认为这是间接缓冲机制本身的问题。从'emacs -Q'复制问题的配方肯定会有用。 – phils

回答

3

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