emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Redundant (harmful) duplication of run-hooks in define-globalized-mi


From: Stefan Monnier
Subject: Re: Redundant (harmful) duplication of run-hooks in define-globalized-minor-mode [patch]
Date: Thu, 17 Jan 2013 13:31:32 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

> I'm still trying to come up with a reason somebody might want to turn on
> the minor mode _before_ the major mode's hook has been run.

The issue is how to locally turn off the globalized minor mode from
a major-mode hook.  If the globalized mode is enabled after the
major-mode hook, you basically can't do it without resorting to
ugly gymnastics.

I'm not completely sure what happens (and what should happen instead) in
your scenario, but for the case described by João, where you don't just
want to disable it in some modes, but you want to prevent it from ever
being enabled in such modes, obviously the current approach
fails similarly.

A simple solution is to activate the minor mode late, and provide
a `disable-foo-mode' variable, that can be set in the major mode hook.
But it's kind of ugly because it requires another var and the user needs
to know about that magic var.

Maybe we could do it this way:

for a globalized minor mode `foo', before running the major-mode hook, a magic
`disable-foo-mode' is set to nil.  A function is added to `foo-mode-hook'
which sets this var to t when foo-mode is disabled.  And after running
the major-mode hook, the globalized minor mode code checks the magic var
to decide whether to enable the minor mode.

This way, the user doesn't need to know about the extra magic var; she
can just call (foo-mode -1) in her major-mode hook as she can now, but
the minor-mode is really only activated late.

It's also kind of ugly because of all the magic, but it's the best I can
come up with so far.


        Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]