我正在使用 Dave Love 的 noweb-mode编辑 LaTeX 和 C 代码混合的文件。 Love的模式使用他的multi-mode在模式之间来回切换。 这种切换是通过间接缓冲区完成的。
在 Emacs 21 中,该模式似乎运行良好。但强制升级到 Emacs 23 却暴露了问题:
在模式之间进行转换时,标记会丢失。
当在两个不同的可见窗口中查看同一缓冲区时,窗口 A 中的移动偶尔会导致窗口 B 中的移动,并且还会导致窗口 B 的
点
移动。
我正在尝试诊断并修复这些故障。我通过在 (region-active-p)
时关闭所有缓冲区/模式切换来解决问题 1。但问题2把我彻底难住了。我什至不知道如何诊断。
我正在寻求任何帮助,特别是以下两个问题的答案:
我应该如何尝试诊断此问题?
在哪里可以找到间接缓冲区语义的清晰且更完整的解释? GNU Emacs Lisp 引用手册没有说太多,我不确定阅读源代码是最好的下一步。
最佳答案
正如您所想,语义和 Emacs 是两个截然不同的世界。同样遗憾的是,也没有“清晰而完整的解释”。基本上,间接缓冲区共享其缓冲区文本、文本属性以及一些内部变量,同时保留单独的缓冲区局部变量和单独的覆盖层。共享内容和非共享内容之间的划分在很大程度上是任意的。更糟糕的是,很少使用间接缓冲区,因此错误和无根据的假设不可避免地会出现。
要找出问题所在,最好的方法是首先提出可靠、可重复的方案。
我可以重现一些奇怪的行为 w.r.t 标记,其中基本缓冲区的标记最终成为间接缓冲区中的标记,因此这看起来像是某个地方的一个普通错误(遗憾的是,这似乎没有在 24.1 中修复)。请M-x report-emacs-bug
。
关于elisp - 如何诊断涉及间接缓冲区的 emacs lisp 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049757/