* bug#38843: define-globalized-minor-mode enable boolean will prevent loading with :require
@ 2020-01-01 7:10 Paul W. Rankin
2020-10-30 14:49 ` Lars Ingebrigtsen
0 siblings, 1 reply; 4+ messages in thread
From: Paul W. Rankin @ 2020-01-01 7:10 UTC (permalink / raw)
To: 38843
When defining a global minor mode with define-globalized-minor-mode, an
automatic custom option is created to enable that minor mode. If the
user wishes to enable this global minor mode at startup, he/she toggles
this boolean to "on" and saves his/her init. This should enable the
global minor mode upon startup (if available).
If a global minor modes is based on local minor modes, it may use a
:require keyword in the global minor mode definition, e.g. from
page-break-lines:
;;;###autoload
(define-global-minor-mode global-page-break-lines-mode
page-break-lines-mode page-break-lines-mode-maybe
:require 'page-break-lines
:group 'page-break-lines)
Toggling the option global-page-break-lines-mode in this case will add
the following to the user's init:
'(global-page-break-lines-mode t nil (page-break-lines))
The problem occurs when page-break-lines is for whatever reason
unavailable, it will prevent Emacs from loading.
The customize system is designed not to prevent loading even when
libraries are unavailable, e.g.settings remain after uninstalling the
associated program/library because it makes sense if the user chooses to
reinstall. That is, the presence of settings pertaining to unavailable
programs/libraries should not prevent Emacs from loading.
So, what is the solution here? This feels to me like a bug with the way
define-globalized-minor-mode saves this boolean...
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#38843: define-globalized-minor-mode enable boolean will prevent loading with :require
2020-01-01 7:10 bug#38843: define-globalized-minor-mode enable boolean will prevent loading with :require Paul W. Rankin
@ 2020-10-30 14:49 ` Lars Ingebrigtsen
2020-10-30 15:25 ` Paul W. Rankin via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 4+ messages in thread
From: Lars Ingebrigtsen @ 2020-10-30 14:49 UTC (permalink / raw)
To: Paul W. Rankin; +Cc: 38843
"Paul W. Rankin" <hello@paulwrankin.com> writes:
> If a global minor modes is based on local minor modes, it may use a
> :require keyword in the global minor mode definition, e.g. from
> page-break-lines:
>
> ;;;###autoload
> (define-global-minor-mode global-page-break-lines-mode
> page-break-lines-mode page-break-lines-mode-maybe
> :require 'page-break-lines
> :group 'page-break-lines)
>
> Toggling the option global-page-break-lines-mode in this case will add
> the following to the user's init:
>
> '(global-page-break-lines-mode t nil (page-break-lines))
>
> The problem occurs when page-break-lines is for whatever reason
> unavailable, it will prevent Emacs from loading.
So the problem is basically that you've switched a minor mode on via
Customize, but then deleted the minor mode. I'm actually not sure
whether it makes sense for Emacs to signal an error or not here: You've
asked to have a mode switched on, but then Emacs can't do that because
it can't find the file it's defined in.
So this is, in some ways, no different from having a `require' in your
.emacs that no longer exists.
On the other hand, it's a bit unfriendly, and doing the same with other
mode variables doesn't bug out. The following patch fixes the problem.
Does anybody have an opinion here?
diff --git a/lisp/custom.el b/lisp/custom.el
index cc445fe765..94c36dedd9 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -1010,7 +1010,9 @@ custom-theme-set-variables
set)
(when requests
(put symbol 'custom-requests requests)
- (mapc #'require requests))
+ (mapc (lambda (lib) (ignore-error file-missing
+ (require lib)))
+ requests))
(setq set (or (get symbol 'custom-set) #'custom-set-default))
(put symbol 'saved-value (list value))
(put symbol 'saved-variable-comment comment)
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply related [flat|nested] 4+ messages in thread
* bug#38843: define-globalized-minor-mode enable boolean will prevent loading with :require
2020-10-30 14:49 ` Lars Ingebrigtsen
@ 2020-10-30 15:25 ` Paul W. Rankin via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-11-01 12:16 ` Lars Ingebrigtsen
0 siblings, 1 reply; 4+ messages in thread
From: Paul W. Rankin via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2020-10-30 15:25 UTC (permalink / raw)
To: Lars Ingebrigtsen; +Cc: 38843
> On 31 Oct 2020, at 12:49 am, Lars Ingebrigtsen <larsi@gnus.org> wrote:
>
> So the problem is basically that you've switched a minor mode on via
> Customize, but then deleted the minor mode. I'm actually not sure
> whether it makes sense for Emacs to signal an error or not here: You've
> asked to have a mode switched on, but then Emacs can't do that because
> it can't find the file it's defined in.
The customize system is designed not to prevent loading even when libraries aren't found, e.g. settings persist after uninstalling their library, because it makes sense that if the user then chooses to reinstall they get to keep their settings. The counter option is that uninstalling a package removes that packages settings, forcing the user to go through and set them all again.
The separation of settings and source is a good thing, and ought not to trip Emacs over. The absence of the source should not matter a wink to the settings.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-11-01 12:16 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-01-01 7:10 bug#38843: define-globalized-minor-mode enable boolean will prevent loading with :require Paul W. Rankin
2020-10-30 14:49 ` Lars Ingebrigtsen
2020-10-30 15:25 ` Paul W. Rankin via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-11-01 12:16 ` Lars Ingebrigtsen
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).