help-gnu-emacs
[Top][All Lists]
Advanced

[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




reply via email to

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