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

标签 elisp emacs23 literate-programming

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

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

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

  2. 当在两个不同的可见窗口中查看同一缓冲区时,窗口 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/

相关文章:

function - Emacs Lisp 可以将 lambda 形式分配给 Scheme 之类的变量吗?

Emacs 缩进级别全局覆盖

emacs - 与默认 emacs 分开改变 Emacs 迷你缓冲区的字体大小?

html - F# FSharp.Literate 格式的代码片段无法正确显示(.css 和 .js?)

latex - 如何隐藏代码块

emacs - Emacs-如何查看/调试单个elisp函数/emacs命令

dynamic - 如何在 Emacs 中动态添加小部件?

emacs - 禁用次要模式键绑定(bind)

haskell - 识字 Haskell (.lhs) 和 Haddock

emacs - 如何在 Emacs 的 lisp-mode 中高亮显示所有函数的名称?