所以我的hooks.el
中有一个名为emacs.d
的文件,其中包含以下内容:
(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 :(得分: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)))
这样,键只定义一次。