2011-07-30 36 views
16

我想爲特定的文件擴展名(即不是模式)運行鉤子。我有elisp的零經驗,所以我的貨物邪教編碼這樣的:Emacs中的文件擴展鉤子

(defun set_tab_mode() 
    (when (looking-at-p "\\.cat") 
    (insert "OK") 
    (orgtbl-mode))) 

(add-hook 'find-file-hook 'set_tab_mode) 

(應設置orgtbl次要模式後綴.cat文件,並插入文本「OK」,也就是說,它不僅是一個模式設置的問題) 。 不幸的是它不起作用。

回答

17

試試這個:

(defun my-set-tab-mode() 
    (when (and (stringp buffer-file-name) 
      (string-match "\\.cat\\'" buffer-file-name)) 
    (insert "OK") 
    (orgtbl-mode))) 

(add-hook 'find-file-hook 'my-set-tab-mode) 
21

可以在auto-mode-alist使用拉姆達:

(add-to-list 'auto-mode-alist 
      '("\\.cat\\'" . (lambda() 
           ;; add major mode setting here, if needed, for example: 
           ;; (text-mode) 
           (insert "OK") 
           (turn-on-orgtbl)))) 
+1

他試圖雖然設置未成年人模式,你方法僅適用於不幸的是主要模式。 – bneil

+1

@bneil你可以在lambda中放置任意代碼,無論它是設置主要模式,次要模式還是做一些其他的事情。 –

+0

我正在尋找一種方法來爲給定的文件類型一次打開兩種模式,並且當我知道'auto-mode-alist'時,我不知道你可以使用'lambda's。這對我有用,謝謝! –