Emacs Haskell模式 - Speedbar不更新

4

我正在使用来自http://emacsformacosx.com/的OS X上的Emacs 23.4。我的~/.emacs文件包含以下内容:

(load "/path/to/haskell-site-file")

(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)

(require 'speedbar)
(speedbar-add-supported-extension ".hs")

(add-to-list 'load-path "/usr/local/share/ghc-mod-1.10.15")
(setq exec-path (append exec-path '("/usr/local/bin")))
(autoload 'ghc-init "ghc" nil t)
(add-hook 'haskell-mode-hook (lambda () (ghc-init) (flymake-mode)))

当我使用M-x speedbar调用Speedbar时,会出现一个Speedbar框架,其中显示了Haskell文件的变量,导入项,实例和数据类型。但是当我编辑Haskell文件时,Speedbar框架不会刷新以反映文件的修改。我尝试调用Speedbar > Update菜单,但这并没有起作用。我该如何更新Speedbar框架?
1个回答

2
默认情况下,Speedbar使用imenu从缓冲区中获取标签,而imenu在重新解析缓冲区方面非常懒惰。此外,一旦speedbar获得了标签列表,它会一直使用该列表,直到您“关闭”文件。下次您打开文件并希望查看标签时,它将从imenu(或任何您用于标签的工具)重新获取标签。
由于imenu比speedbar更懒惰,因此您可以使用speedbar shift-click重新打开文件,然后speedbar将强制imenu重新解析。

我不明白你所说的“speedbar shift-click to re-open a file”是什么意思。在我的电脑上,关闭缓冲区(C-x k),然后重新打开文件可以刷新speedbar,但是否有更快的方法来强制执行此操作 - 比如使用一些elisp? - Binil Thomas
在speedbar中,如果您关闭一个文件(即单击文件名附近的小图标以折叠标签列表,使其不再存在),那么当您按下Shift并单击图标以查看标签时,它将重新解析缓冲区。这将是使用老派emacs键绑定的shift-middle-click操作,我认为双击也可以。我忘记了不同的变量。 - Eric
Shift-click 对我没有起作用。:( 我使用的是 OS X,如果这有关系的话。 - Binil Thomas
1
我找到了一个解决方法。如果我使用 C-x C-v 重新加载缓冲区,当重新打开 Speedbar 时,它会显示更新后的函数列表。 - Binil Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接