2013-04-16 84 views
27

我想在每次啓動emacs時啓用rainbow-mode,而不必使用M-x rainbow-mode如何在emacs啓動時默認啓用非全局副模式?

我想我有一些命令放在我的.emacs文件中。

我嘗試了所有的以下的,但他們沒有工作:

(require 'rainbow-mode) 

(rainbow-mode initialize) 

(global-rainbow-mode) 

更一般地,我怎麼在啓動時自動加載任何模式/包?

回答

30

rainbow-mode不是全局次要模式,所以需要在每個緩衝區的基礎上啓用它。

我只用它的CSS,所以我有:

(add-hook 'css-mode-hook 'my-css-mode-hook) 
(defun my-css-mode-hook() 
    (rainbow-mode 1)) 

如果真正希望它是全球性的,無處不在,你可以很容易地定義一個全局次要模式自己:

(define-globalized-minor-mode my-global-rainbow-mode rainbow-mode 
    (lambda() (rainbow-mode 1))) 

(my-global-rainbow-mode 1) 

您可以添加任何邏輯到那個(lambda() (rainbow-mode 1))函數(將在每個緩衝區中評估),以便決定是否實際上是請致電(rainbow-mode 1)對於給定的緩衝區,所以如果您對elisp感到滿意,那麼您可以輕鬆擴展此方法以涵蓋您對所討論模式的特定要求。


更一般地,我怎麼在啓動時自動加載任何模式/包?

它可以有所不同,但我已經展示的方法就足夠了最輕微的模式:要麼你希望他們啓用每當MODE啓用(即一些具體的其他模式名稱),在這種情況下,你可以使用MODE-hook根據css-mode-hook示例的變量(總是可用的);或者您希望永久啓用該模式,在這種情況下,全局小模式是一種好方法(因爲您可以在全局範圍內打開和關閉它)。某些次要模式默認爲全局模式(或提供全局變體),但您可以根據需要創建自己的模式,如my-global-rainbow-mode示例。

另外要注意,模式可以衍生從其他模式,在這種情況下所有相關MODE-hook鉤將運行(詳見https://stackoverflow.com/a/19295380/324105)。一個常見的使用案例是使用prog-mode-hook來啓用所需的所有所需的功能,這些功能是從它派生的編程模式(這是大多數編程模式)。

請記住,許多(希望大多數)圖書館和軟件包將提供使用說明。如果找不到文檔,請務必嘗試使用M-xfind-library訪問庫文件,然後通讀頂部的註釋。通常有一個非常豐富的「評論」部分,有時這是最終用戶文檔的主要來源,並解釋如何啓用其功能。

+9

您可以在不通過my-css-mode-hook的情況下執行'(add-hook'css-mode-hook'rainbow-mode)'。 – Stefan

+3

Stefan:僅在Emacs 24中,否則會切換模式,我不傾向於認爲每個人都已升級。 (在我的情況下,該功能也做了一堆其他的事情,所以我確實需要它:) – phils

+0

謝謝你!我用它來全局啓用goto-address-mode。最後,我輸入.emacs:'(define-globalized-minor-mode global-goto-address-mode goto-address-mode (lambda()(goto-address-mode 1)))'然後按事故在檢查模式的配置時發現定製值,所以最終我讓全局模式激活由定製來處理。 – pupitetris

相關問題