unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: tpeplt <tpeplt@gmail.com>
To: Heime <heimeborgia@protonmail.com>
Cc: Heime via Users list for the GNU Emacs text editor
	<help-gnu-emacs@gnu.org>
Subject: Re: Change of mode does not activate the associated hook
Date: Thu, 04 Apr 2024 00:25:24 -0400	[thread overview]
Message-ID: <87cyr592kr.fsf@gmail.com> (raw)
In-Reply-To: <F96Y6DFuk-PWZmAFvQ5W22ek6amIa8BFbUpnpvvXxzehEnKwTTjYYCZoDHPJV36SAQZPp_JJ27JZiiwRoOellnewbtOKlfTSpe_ww8LRXfA=@protonmail.com> (Heime's message of "Thu, 04 Apr 2024 01:46:17 +0000")

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.

--



      reply	other threads:[~2024-04-04  4:25 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-04  1:46 Change of mode does not activate the associated hook Heime
2024-04-04  4:25 ` tpeplt [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87cyr592kr.fsf@gmail.com \
    --to=tpeplt@gmail.com \
    --cc=heimeborgia@protonmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).