emacsでadd-hookをまとめて設定する
emacsでadd-hookが必要なパッケージを使うときに
ひとつのモードにつき一つずつ
(require 'rainbow-delimiters) (add-hook 'prog-mode-hook 'rainbow-delimiters-mode) (add-hook 'emacs-lisp-mode-hook 'rainbow-delimiters-mode) (add-hook 'python-mode-hook 'rainbow-delimiters-mode) (add-hook 'c-mode-hook 'rainbow-delimiters-mode) (add-hook 'js2-mode-hook 'rainbow-delimiters-mode) (require 'highlight-symbol) (add-hook 'emacs-lisp-mode-hook 'highlight-symbol-mode) (add-hook 'python-mode-hook 'highlight-symbol-mode) (add-hook 'c-mode-hook 'highlight-symbol-mode) (add-hook 'js2-mode-hook 'highlight-symbol-mode)
のようにしていくのは面倒ですし、
新しいmodeを追加しようと思ったときに、
どこに設定があるんだっけ?となって大変です。
そこで、ある程度の固まりでhookの固まりを作っておいて、
基本的にはそれを使い回すことで
DRYなemacs設定ファイルができます。
;; loopを使うために必要 (require 'cl) ;; ここにmode-hookを追加する (defvar programing-hooks '(prog-mode-hook emacs-lisp-mode-hook python-mode-hook c-mode-hook js2-mode-hook)) (require 'rainbow-delimiters) (loop for hook in programing-hooks do (add-hook hook 'rainbow-delimiters-mode)) (require 'highlight-symbol) (loop for hook in programing-hooks do (add-hook hook 'highlight-symbol-mode))
もちろん全部のmodeに設定したくないものもあるでしょうから
それに関しては一つ一つ設定していくことになります。
一つのパッケージだけだとそれほど効果は感じられませんが、
複数のパッケージを利用する際にはかなり楽になるので、
ぜひご検討ください。