[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Enabling a globalized-minor-mode by default
From: |
Stefan Monnier |
Subject: |
Re: Enabling a globalized-minor-mode by default |
Date: |
Thu, 10 Sep 2020 17:14:11 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
> I'm trying to understand how to define a globalized minor mode that is
> enabled by default. My goal is to make this mode's keymap available
> with no configuration on the user's part, unless the user explicitly
> disables the minor mode.
[...]
> Now, if I:
>
> - byte-compile this file,
> - M-: (package-generate-autoloads "testautoload" default-directory)
> - emacs -Q -L .
> - M-: (load-file "testautoload-autoloads.el")
Loading an ELisp file should not affect the visible behavior of Emacs,
so according to that principle a global mode that's pre-enabled should
only ever exist if it's bundled with Emacs.
For the same kind of reasons merely installing a package should not
affect the visible behavior of Emacs.
[ And yes "affect the visible behavior" is not well defined, or at least
it needs to be tempered by some tolerated exceptions. For example,
it's considered normal for a package to add itself (via its autoloads)
to `auto-mode-alist`, which does have a visible impact on Emacs's
behavior. ]
> ;;;###autoload
> (progn
> (require 'cl-macs)
> (cl-eval-when (load eval)
> (when global-testautoload-mode
> (global-testautoload-mode 1))))
[ Please require `cl-lib` rather than `cl-macs`, because we want to be
free to move definitions between the various internal files of
`cl-lib`. ]
> Is that bad form somehow, or is that the way to go?
Yup.
> Admittedly, maybe forcing a globalized minor mode on users by default is
> bad form. For context, I am trying to make magit-file-mode work
> out-of-the-box, i.e. without users having to (1) (require 'anything) in
> their config or (2) customize global-magit-file-mode to t explicitly,
> which should be redundant because this is the default value.
`require` is definitely not needed here.
Only `(global-magit-file-mode 1)` needs to be added to the init file
(or do the equivalent via Customize) and it shouldn't be redundant
because t shouldn't be the default value ;-)
Stefan