2013-07-10 28 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))) 

这样,则密钥只能定义一次。

相关问题