I found this question somewhat on the topic, but is there a way [in emacs] to set a minor mode (or a list thereof) based on extension? For example, it's pretty easy to find out that major modes can be manipulated like so
(add-to-list 'auto-mode-alist '("\\.notes\\'" . text-mode))
and what I'd ideally like to be able to do is
(add-to-list 'auto-minor-mode-alist '("\\.notes\\'" . auto-fill-mode))
The accept answer of the linked question mentions hooks, specifically temp-buffer-setup-hook
. To use this, you have to add a function to the hook like so
(add-hook 'temp-buffer-setup-hook #'my-func-to-set-minor-mode)
My question is two-fold:
- Is there an easier way to do this, similar to major modes?
- If not, how would one write the function for the hook?
- It needs to check the file path against a regular expression.
- If it matches, activate the desired mode (e.g.
auto-fill-mode
).
Feeble and buggy attempt at a solution:
;; Enables the given minor mode for the current buffer it it matches regex
;; my-pair is a cons cell (regular-expression . minor-mode)
(defun enable-minor-mode (my-pair)
(if buffer-file-name ; If we are visiting a file,
;; and the filename matches our regular expression,
(if (string-match (car my-pair) buffer-file-name)
(funcall (cdr my-pair))))) ; enable the minor mode
; used as
(add-hook 'temp-buffer-setup-hook
(lambda ()
(enable-minor-mode '("\\.notes\\'" . auto-fill-mode))))