2009-08-19 72 views
14

我有一個Emacs擴展,它創建一個名爲*erl-output*的緩衝區。默認情況下,此緩衝區僅由fundamental-mode創建。有沒有辦法在緩衝區上自動啓用compilation-minor-mode在Emacs中,如何根據緩衝區名稱自動啓用次要模式?

+2

使用源代碼luke。 – jrockway

+0

我看了'compile.el',但沒有發現任何有用的東西。 –

+2

你爲什麼要'編譯小模式'?爲什麼不是主要模式? –

回答

20

自動改變主要模式,你可以添加以下到您的.emacs文件:

(add-to-list 'auto-mode-alist '("^\\*erl-output\\*$" . my-major-mode)) 

這不會爲你工作;這是爲主要模式選擇,你在次要模式選擇。

相反,你可以嘗試Hook。該手冊說:

一個鉤子是一個Lisp變量,其中包含一個函數列表,將在一些定義良好的場合調用。

因此,您應該能夠編寫一個函數,在需要時設置次要模式。看着List of Standard Hooks我想你應該試試temp-buffer-setup-hook or temp-buffer-show-hook

你必須寫一個檢查緩衝區名,並設置(如果需要)模式的功能,並使用類似在.emacs下將其添加到鉤:

(add-hook 'temp-buffer-setup-hook 'my-func-to-set-mode) 
+0

是的,這正是我所遇到的問題。 :-) –

+0

@Adam - 我已經更新了我的答案,涵蓋了Hooks以及auto-mode-alist;希望他們會爲你工作。 –

+0

我嘗試啓用主要模式沒有成功。在.emacs中我寫了: '(add-to-list'auto-mode-alist'(「^ \\ * erl-output \\ * $」。compilation-mode))' 它不是用'編譯-mode'。如果我用'(get-buffer-create「* erl-output *」)手動創建一個緩衝區,那麼該模式仍然沒有設置 –

4

由於您的分機創建緩衝,爲什麼不只是添加:

(compilation-mode) 

(或(compilation-minor-mode)如果你真的設置未成年人思想模式)在商建立*erl-output*緩衝區的代碼。您可以編輯該模式的源代碼,或者使用有關創建例程的建議...

+0

'編譯模式'似乎使緩衝區只讀。擴展偶爾寫入緩衝區。 –

+0

啊,這是一個很好的理由,謝謝。 –

相關問題