特定のファイルで指定したmajor-modeとminor-modeになってほしい時

todo.howmでmajor: taskpaper, minor: howmになってほしくてこう書いた。

(add-to-list 'auto-mode-alist (cons "todo.howm$" 'taskpaper-mode))
(add-to-list 'auto-mode-alist (cons ".howm$" 'howm-mode))

するとhowm-modeにしかならない。F1 v auto-mode-alistしてみると後から追加したものが先に来るみたいだ。そこでこう書いた。

(add-to-list 'auto-mode-alist (cons ".howm$" 'howm-mode))
(add-to-list 'auto-mode-alist (cons "todo.howm$" 'taskpaper-mode))

こんどはtaskpaper-modeしかつかない。最初にマッチしたものを適用して残りは見ないらしい。もう一度F1 v auto-mode-alistを見てみる。

Each element looks like (REGEXP . FUNCTION)

ふむふむ。

(defun taskpaper-and-howm-mode ()
  (taskpaper-mode) ; major-mode
  (howm-mode) ; minor-mode
)

(add-to-list 'auto-mode-alist (cons ".howm$" 'howm-mode))
(add-to-list 'auto-mode-alist (cons "todo.howm$" 'taskpaper-and-howm-mode))

できた。めでたしめでたし。