【问题标题】:How to diagnose emacs lisp problems involving indirect buffers?如何诊断涉及间接缓冲区的emacs lisp问题?
【发布时间】:2012-06-15 11:23:15
【问题描述】:

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

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

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

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

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

我正在寻求任何帮助,尤其是这两个问题的答案:

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

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

【问题讨论】:

  • 如果它解决了问题,我建议尝试一下刚刚正式发布的 Emacs 24。
  • @phils 我正在等待它被添加到 Debian
  • 在这种情况下,我只能建议M-x report-emacs-bug,如果您断定这是间接缓冲机制本身的问题。从emacs -Q 复制问题的方法肯定会很有用。

标签: elisp emacs23 literate-programming


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2012-08-05
    • 1970-01-01
    • 2011-04-12
    • 2019-12-18
    • 1970-01-01
    相关资源
    最近更新 更多