[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Change of mode does not activate the associated hook
From: |
tpeplt |
Subject: |
Re: Change of mode does not activate the associated hook |
Date: |
Thu, 04 Apr 2024 00:25:24 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Heime <heimeborgia@protonmail.com> writes:
> Have made a minor mode named "ark" that uses mode hooks.
> For a buffer with f90-mode enabled, the functionality in
> the file avus-f90.el would be activated. This works well
> when I open an file named "transform.f90".
>
> But if I am in a lisp-interaction buffer and change the
> major mode to f90-mode followed by "M-x ark-minor-mode",
> the associated mode hook for f90-mode is not activated.
>
> What is going on ?
>
> (defun ark-gali ()
> (interactive)
> (cond
> ((eq major-mode 'f90-mode)
> (require 'avus-f90))
>
> (defun ark-mode-hooks ()
> (add-hook 'f90-mode-hook #'ark-gali))
>
> (define-minor-mode ark-minor-mode
> (if ark-minor-mode
> (ark-mode-hooks)
> (message "%s" "TEST")))
1. The code that you provided will not compile without errors. If you
byte-compile your code, then you’ll be able to find and fix those
errors, which will make it more likely that someone can help with the
problem that you are having.
2. The first ‘defun’ is missing some trailing parentheses.
3. The expression for defining the minor mode is missing some arguments.
a. Using C-h f define-minor-mode, the docstring says:
(define-minor-mode MODE DOC [KEYWORD VAL ... &rest BODY])
so, unlike ‘defun’, the docstring (DOC) is required.
b. Farther down in the docstring is the following requirement for
BODY: "If you provide BODY, then you must provide at least one
keyword argument (e.g. ‘:lighter nil‘)."
Your ‘define-minor-mode’ did not provide at least one keyword
argument.
These two could be fixed as follows, for example:
(define-minor-mode ark-minor-mode
"a docstring for ‘ark-minor-mode’"
:lighter " Ark"
(if ark-minor-mode
(ark-mode-hooks)
(message "%s" "TEST")))
Once these changes have been made, the code should compile without
errors. Once that has been done, if the expressions are evaluated, you
should be able to type M-x ark-minor-mode and "Ark" will appear in your
mode line. You should also see the message "Ark minor mode enabled in
current buffer." If you type M-x ark-minor-mode a second time, then the
"Ark" will disappear from the mode line and you should see the message
TEST.
--