2012-05-01 90 views
4

我在OS X上使用Emacs 23.4(從http://emacsformacosx.com/)。我~/.emacs文件包含:Emacs Haskell模式 - Speedbar不更新

(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))) 

當我調用Speedbar與M-x speedbar我得到一個speedbar框,顯示變量,進口,實例和數據類型的哈斯克爾文件。但是,當我編輯Haskell文件時,速度欄框不會刷新以反映對文件的編輯。我嘗試調用Speedbar > Update菜單,但這並沒有辦法。如何更新速度欄框架?

回答

2

Speedbar默認使用imenu從緩衝區獲取標籤,而imenu對於重新緩衝緩存很懶惰。另外,一旦speedbar有一個標籤列表,它會一直使用這個列表直到你關閉這個文件。當你打開文件來查看標籤時,它會從imenu(或者你正在使用的標籤工具)中重新獲取標籤。

由於imenu比速度條更慢,因此您可以使用速度欄shift-click重新打開一個文件,速度欄將強制imenu重新分析。

+0

我不明白你的意思是「快速移位點擊重新打開文件」。關閉緩衝區(C-x k),然後重新打開文件,刷新我機器上的speedbar,但有沒有更快的方法來強制這一點 - 說一些elisp? –

+0

在加速欄中,如果你關閉了一個文件(即點擊文件名附近的小圖標摺疊標籤列表,所以它不再存在),那麼當你按shift並點擊圖標查看標籤時,它將會重新解析緩衝區。這將是舊式emacs鍵綁定中的中鍵,我認爲雙擊也可以。我忘記了不同的變體。 – Eric

+0

shift-click對我無效。 :(我在OS X上,如果有問題的話 –