2013-07-10 32 views
1

所以我有這個文件稱爲hooks.elemacs.d有這樣的內容:是Emacs應該有一個hook.el文件?

(add-hook 'term-mode-hook ...) 
(add-hook 'term-exec-mode-hook ...) 
(add-hook 'python-mode-hook ...) 
(add-hook 'ido-setup-hook ...) 
(add-hook 'makefile-mode-hook ...) 
(add-hook 'c-mode-common-hook ...) 
(add-hook 'c-mode-hook ...) 
(add-hook 'c++-mode-hook ...) 
(add-hook 'dired-mode-hook 
     (lambda() 
     (define-key dired-mode-map "h" 'dired-previous-line) 
     (define-key dired-mode-map "j" 'ido-find-file) 
      ;; ... 
      )) 

我只是想知道如果我做一些奇怪這裏 或者是這確實指定快捷鍵的慣用方式基於模式?

我的意思是增加掛鉤,而不是明明白白寫着:

(define-key dired-mode-map "h" 'dired-previous-line) 

當然,除非dired被加載並dired-mode-map定義這是不行的,因此 掛鉤。即使我並不總是使用它們,加載所有模式也可能不是最好的做法, ,只是爲了定義自定義快捷方式。 但另一方面,每個新緩衝區都會打開掛鉤 - 並且所有這些快捷鍵都會一遍又一遍地重新定義,而不是一次。

你有什麼需要解決的問題?我確信有更好的東西可以切換到。

在此期間,我可以炫耀的書籤我hooks.el

(defun goto-hook-file() 
    "Opens hooks.el at point specific to current `major-mode'" 
    (interactive) 
    (let ((str-mode-hook (format "%s-hook" major-mode))) 
    (find-file (concat emacs.d "hooks.el")) 
    (goto-char (point-min)) 
    (search-forward str-mode-hook nil t))) 
+0

您應該更改問題標題;此刻這是相當無意義的。這裏有一個非常相似(如果不是很重複的)問答:http://stackoverflow.com/questions/9818307/emacs-mode-specific-custom-key-bindings-local-set-key-vs-define-key。 – phils

+0

不會說它完全重複。我在發佈之前找不到它。現在我的問題有一個鏈接到真正的交易:) –

回答

5

您可以使用eval-after-load

(eval-after-load 'dired 
    '(progn 
    (define-key dired-mode-map "h" 'dired-previous-line) 
    (define-key dired-mode-map "j" 'ido-find-file))) 

這樣,則密鑰只能定義一次。

相關問題