* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
@ 2023-10-25 9:26 Ihor Radchenko
2023-10-26 9:11 ` Gerd Möllmann
0 siblings, 1 reply; 15+ messages in thread
From: Ihor Radchenko @ 2023-10-25 9:26 UTC (permalink / raw)
To: 66742
Steps to reproduce:
1. ./src/emacs -Q --batch -l ~/Downloads/dump.el
With dump.el:
(dump-emacs-portable "/tmp/emacs-dumped.dmp")
2. ./src/emacs -Q --dump-file="/tmp/emacs-dumped.dmp"
3. C-<SPC> C-p C-p
Expected: active region is highlighted
Observed: Transient mark mode is not enabled and thus active region is
not highlighted.
Configured using:
'configure --with-native-compilation CFLAGS=-g3 --with-pdumper=yes'
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-25 9:26 bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs Ihor Radchenko
@ 2023-10-26 9:11 ` Gerd Möllmann
2023-10-26 11:42 ` Ihor Radchenko
0 siblings, 1 reply; 15+ messages in thread
From: Gerd Möllmann @ 2023-10-26 9:11 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: 66742
Ihor Radchenko <yantar92@posteo.net> writes:
> Steps to reproduce:
>
> 1. ./src/emacs -Q --batch -l ~/Downloads/dump.el
> With dump.el:
>
> (dump-emacs-portable "/tmp/emacs-dumped.dmp")
>
> 2. ./src/emacs -Q --dump-file="/tmp/emacs-dumped.dmp"
>
> 3. C-<SPC> C-p C-p
>
> Expected: active region is highlighted
> Observed: Transient mark mode is not enabled and thus active region is
> not highlighted.
Just an analyis.
AFAICS, this one comes from a special handling of some custom variables.
In function command-line, we have
;; Re-evaluate predefined variables whose initial value depends on
;; the runtime context. But delay the warning about
;; `user-emacs-directory' being inaccessible until after processing
;; the init file and the command-line arguments, in case the user
;; customized `user-emacs-directory-warning' to nil via those.
(let ((user-emacs-directory-warning nil))
(when (listp custom-delayed-init-variables)
(mapc #'custom-reevaluate-setting
;; Initialize them in the same order they were loaded, in
;; case there are dependencies between them.
(reverse custom-delayed-init-variables))))
(setq custom-delayed-init-variables t)
The list of custom-delayed-init-variables is built by function
custom-initialize-delay. If you grep for that, you'll finds a number of
declarations containing an :initialize with the delaying function.
In a re-dumped Emacs, the variable is not a list, so nothing is done. In
the particular case of transient-mark-mode, the default value, which is
set in C, is nil, so it keeps that value.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 9:11 ` Gerd Möllmann
@ 2023-10-26 11:42 ` Ihor Radchenko
2023-10-26 12:06 ` Eli Zaretskii
0 siblings, 1 reply; 15+ messages in thread
From: Ihor Radchenko @ 2023-10-26 11:42 UTC (permalink / raw)
To: Gerd Möllmann; +Cc: 66742
Gerd Möllmann <gerd.moellmann@gmail.com> writes:
> The list of custom-delayed-init-variables is built by function
> custom-initialize-delay. If you grep for that, you'll finds a number of
> declarations containing an :initialize with the delaying function.
>
> In a re-dumped Emacs, the variable is not a list, so nothing is done. In
> the particular case of transient-mark-mode, the default value, which is
> set in C, is nil, so it keeps that value.
Thanks for the analysis.
I dag a bit further and it looks like :initialize is used in
`define-minor-mode' and `defcustom' with the latter simply deferring
:initialize keyword processing to `defcustom'.
The :initialize keyword in `defcustom' is implicitly assumed to be
evaluated during Emacs startup, in the Emacs sessions that will use the
custom definition.
Actually, I think that I will not be wrong to say that (defvar foo
<value>. ..), (defcustom foo <value> ...), and similar expressions are
often assumed to evaluated in the same Emacs session that will use the
library. For example, Org mode often calculated default variable values
dynamically:
(defcustom org-clock-x11idle-program-name
(if (executable-find "xprintidle")
"xprintidle" "x11idle")
...)
Re-dumping such code is prone to subtle bugs when the dumping
environment differs from the runtime.
Things get worse when loading a library relies on side effects:
----- org-persist.el ---------
;; Point to temp directory when `org-persist--disable-when-emacs-Q' is set.
(when (and org-persist--disable-when-emacs-Q
;; FIXME: This is relying on undocumented fact that
;; Emacs sets `user-init-file' to nil when loaded with
;; "-Q" argument.
(not user-init-file))
(setq org-persist-directory
(make-temp-file "org-persist-" 'dir)))
----------------------------
I suspect that it is only truly safe to re-dump parts of the libraries
that do not emit (byte-code ...) in the compiler output.
For example, the following is .elc part corresponding to the above
defcustom:
(defvar org-x11idle-exists-p (byte-code "\b\302>?\205%17\303\304\305 \"!\306=\205%17\303 !\306=\207" [system-type org-clock-x11idle-program-name (windows-nt ms-dos) call-process-shell-command format "command -v %s" 0] 4))#@46 Return the current X11 idle time in seconds.\x1f
The variable itself can be defined, but its value is (byte-code ...) and
thus should be evaluated during startup, and not dumped.
And the side-effect clause is a complete (byte-code ...):
(byte-code "\b\203%d \204%d\303\304\305\"%12\306\307\n!!\310%1!\204%%0\211\306\311%3!!\211\262%3\232\203%12\312%1!\2044%0\313\314\n\"\266%2\202D%0\315\316\317\"\210\315\316\320\"\210\315\316\321\"\266%2\315\322\323\"\210\324\325!\207" [org-persist--disable-when-emacs-Q user-init-file org-persist-directory make-temp-file "org-persist-" dir directory-file-name file-name-as-directory file-exists-p file-name-directory file-writable-p message "Missing write access rights to org-persist-directory: %S" add-hook kill-emacs-hook org-persist-clear-storage-maybe org-persist-write-all org-persist-gc after-init-hook org-persist-load-all provide org-persist] 5)
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 11:42 ` Ihor Radchenko
@ 2023-10-26 12:06 ` Eli Zaretskii
2023-10-26 12:44 ` Ihor Radchenko
0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2023-10-26 12:06 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: gerd.moellmann, 66742
> Cc: 66742@debbugs.gnu.org
> From: Ihor Radchenko <yantar92@posteo.net>
> Date: Thu, 26 Oct 2023 11:42:57 +0000
>
> Actually, I think that I will not be wrong to say that (defvar foo
> <value>. ..), (defcustom foo <value> ...), and similar expressions are
> often assumed to evaluated in the same Emacs session that will use the
> library.
There should be no such assumption, and so you will be wrong saying
that. We actually try paying attention to this aspect when reviewing
patches where a defcustom has a default value that is not a constant,
precisely for this reason.
> For example, Org mode often calculated default variable values
> dynamically:
>
> (defcustom org-clock-x11idle-program-name
> (if (executable-find "xprintidle")
> "xprintidle" "x11idle")
> ...)
That's a bug in Org, unless the rest of the code doesn't arrange for
this defcustom to be re-evaluated at startup.
> Things get worse when loading a library relies on side effects:
>
> ----- org-persist.el ---------
> ;; Point to temp directory when `org-persist--disable-when-emacs-Q' is set.
> (when (and org-persist--disable-when-emacs-Q
> ;; FIXME: This is relying on undocumented fact that
> ;; Emacs sets `user-init-file' to nil when loaded with
> ;; "-Q" argument.
> (not user-init-file))
> (setq org-persist-directory
> (make-temp-file "org-persist-" 'dir)))
> ----------------------------
Which library does the above load, and how is it related to something
determined at dump time?
> I suspect that it is only truly safe to re-dump parts of the libraries
> that do not emit (byte-code ...) in the compiler output.
>
> For example, the following is .elc part corresponding to the above
> defcustom:
>
> (defvar org-x11idle-exists-p (byte-code "\b\302>?\205%17\303\304\305 \"!\306=\205%17\303 !\306=\207" [system-type org-clock-x11idle-program-name (windows-nt ms-dos) call-process-shell-command format "command -v %s" 0] 4))#@46 Return the current X11 idle time in seconds.\x1f
>
> The variable itself can be defined, but its value is (byte-code ...) and
> thus should be evaluated during startup, and not dumped.
>
> And the side-effect clause is a complete (byte-code ...):
>
> (byte-code "\b\203%d \204%d\303\304\305\"%12\306\307\n!!\310%1!\204%%0\211\306\311%3!!\211\262%3\232\203%12\312%1!\2044%0\313\314\n\"\266%2\202D%0\315\316\317\"\210\315\316\320\"\210\315\316\321\"\266%2\315\322\323\"\210\324\325!\207" [org-persist--disable-when-emacs-Q user-init-file org-persist-directory make-temp-file "org-persist-" dir directory-file-name file-name-as-directory file-exists-p file-name-directory file-writable-p message "Missing write access rights to org-persist-directory: %S" add-hook kill-emacs-hook org-persist-clear-storage-maybe org-persist-write-all org-persist-gc after-init-hook org-persist-load-all provide org-persist] 5)
You lost me here.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 12:06 ` Eli Zaretskii
@ 2023-10-26 12:44 ` Ihor Radchenko
2023-10-26 13:10 ` Eli Zaretskii
0 siblings, 1 reply; 15+ messages in thread
From: Ihor Radchenko @ 2023-10-26 12:44 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: gerd.moellmann, 66742
Eli Zaretskii <eliz@gnu.org> writes:
>> Actually, I think that I will not be wrong to say that (defvar foo
>> <value>. ..), (defcustom foo <value> ...), and similar expressions are
>> often assumed to evaluated in the same Emacs session that will use the
>> library.
>
> There should be no such assumption, and so you will be wrong saying
> that. We actually try paying attention to this aspect when reviewing
> patches where a defcustom has a default value that is not a constant,
> precisely for this reason.
This is a surprise to me!
Is it documented anywhere? I thought that we should expect the value to
be evaluated unless explicitly wrapped into (eval-when-compile ...).
Also, I just looked up defvar instances across Emacs and I am seeing
multiple cases when the value is calculated dynamically, assuming
loading time:
cvs-diff-program, diff-use-changed-face, url-mime-encoding-string,
url-dav-lock-identifier, type-break-time-last-command,
reftex-section-numbers, ispell-library-directory, artist-pointer-shape,
so-long-version, shadow-system-name, bdf-cache-file,
vhdl-mode-menu-list, sh-shell, js-js-tmpdir, gud-sdb-needs-tags,
tetris-next-x, tetris-score-y, <a number of Org mode variables>,
vip-startup-file, vi-scroll-amount, tramp-cache-read-persistent-data,
tramp-archive-enabled, socks-username, newsticker--latest-update-time,
dictionary-color-support, mh-uncompface-executable, mh-swish++-binary,
mh-swish-binary, mh-mairix-binary, mh-namazu-binary, mh-grep-binary,
mh-spamassassin-executable, mh-sa-learn-executable,
mh-bogofilter-executable, mh-spamprobe-executable, mh-pgp-support-flag,
kkc-init-file-name, image-dired-queue-active-limit,
mm-temp-files-cache-file, erc-autoaway-last-sent-time,
viper-custom-file-name, viper-current-frame-saved,
copyright-current-year, cl--random-state (!!! that can easily cause
subtle issues), dframe-have-timer-flag, todo-files, todo-archives,
todo-done-separator, diary-font-lock-keywords, math-expr-opers,
calc-gnuplot-display, archive-7z-program.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 12:44 ` Ihor Radchenko
@ 2023-10-26 13:10 ` Eli Zaretskii
2023-10-26 13:15 ` Eli Zaretskii
2023-10-26 13:25 ` Ihor Radchenko
0 siblings, 2 replies; 15+ messages in thread
From: Eli Zaretskii @ 2023-10-26 13:10 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: gerd.moellmann, 66742
> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: gerd.moellmann@gmail.com, 66742@debbugs.gnu.org
> Date: Thu, 26 Oct 2023 12:44:37 +0000
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> >> Actually, I think that I will not be wrong to say that (defvar foo
> >> <value>. ..), (defcustom foo <value> ...), and similar expressions are
> >> often assumed to evaluated in the same Emacs session that will use the
> >> library.
> >
> > There should be no such assumption, and so you will be wrong saying
> > that. We actually try paying attention to this aspect when reviewing
> > patches where a defcustom has a default value that is not a constant,
> > precisely for this reason.
>
> This is a surprise to me!
> Is it documented anywhere?
What do you want to document?
> I thought that we should expect the value to
> be evaluated unless explicitly wrapped into (eval-when-compile ...).
At what time do you think defcustom's value is evaluated?
> Also, I just looked up defvar instances across Emacs and I am seeing
> multiple cases when the value is calculated dynamically, assuming
> loading time:
Of course, it's loading time. But AFAIU you were talking about
evaluation during dumping, i.e. when Emacs is built. This is only
relevant for defcustom's in packages that are preloaded, because those
packages are loaded at build time, not at run time. So for those
packages, and only for those packages, any defcustom whose default
value is not a constant, should be re-evaluated at startup, to make
sure the value is suitable for the system on which Emacs runs.
> cvs-diff-program, diff-use-changed-face, url-mime-encoding-string,
> url-dav-lock-identifier, type-break-time-last-command,
> reftex-section-numbers, ispell-library-directory, artist-pointer-shape,
> so-long-version, shadow-system-name, bdf-cache-file,
> vhdl-mode-menu-list, sh-shell, js-js-tmpdir, gud-sdb-needs-tags,
> tetris-next-x, tetris-score-y, <a number of Org mode variables>,
> vip-startup-file, vi-scroll-amount, tramp-cache-read-persistent-data,
> tramp-archive-enabled, socks-username, newsticker--latest-update-time,
> dictionary-color-support, mh-uncompface-executable, mh-swish++-binary,
> mh-swish-binary, mh-mairix-binary, mh-namazu-binary, mh-grep-binary,
> mh-spamassassin-executable, mh-sa-learn-executable,
> mh-bogofilter-executable, mh-spamprobe-executable, mh-pgp-support-flag,
> kkc-init-file-name, image-dired-queue-active-limit,
> mm-temp-files-cache-file, erc-autoaway-last-sent-time,
> viper-custom-file-name, viper-current-frame-saved,
> copyright-current-year, cl--random-state (!!! that can easily cause
> subtle issues), dframe-have-timer-flag, todo-files, todo-archives,
> todo-done-separator, diary-font-lock-keywords, math-expr-opers,
> calc-gnuplot-display, archive-7z-program.
This is not relevant, since packages that aren't preloaded will be
loaded at run time, and therefore the values will be evaluated in the
correct context. If you are talking about these, then I don't
understand what prompted you to raise this issue to begin with, and in
a thread that discusses dumping.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 13:10 ` Eli Zaretskii
@ 2023-10-26 13:15 ` Eli Zaretskii
2023-10-27 9:04 ` Ihor Radchenko
2023-10-26 13:25 ` Ihor Radchenko
1 sibling, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2023-10-26 13:15 UTC (permalink / raw)
To: yantar92; +Cc: gerd.moellmann, 66742
> Cc: gerd.moellmann@gmail.com, 66742@debbugs.gnu.org
> Date: Thu, 26 Oct 2023 16:10:53 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> > I thought that we should expect the value to
> > be evaluated unless explicitly wrapped into (eval-when-compile ...).
>
> At what time do you think defcustom's value is evaluated?
>
> > Also, I just looked up defvar instances across Emacs and I am seeing
> > multiple cases when the value is calculated dynamically, assuming
> > loading time:
>
> Of course, it's loading time. But AFAIU you were talking about
> evaluation during dumping, i.e. when Emacs is built. This is only
> relevant for defcustom's in packages that are preloaded, because those
> packages are loaded at build time, not at run time. So for those
> packages, and only for those packages, any defcustom whose default
> value is not a constant, should be re-evaluated at startup, to make
> sure the value is suitable for the system on which Emacs runs.
>
> > cvs-diff-program, diff-use-changed-face, url-mime-encoding-string,
> > url-dav-lock-identifier, type-break-time-last-command,
> > reftex-section-numbers, ispell-library-directory, artist-pointer-shape,
> > so-long-version, shadow-system-name, bdf-cache-file,
> > vhdl-mode-menu-list, sh-shell, js-js-tmpdir, gud-sdb-needs-tags,
> > tetris-next-x, tetris-score-y, <a number of Org mode variables>,
> > vip-startup-file, vi-scroll-amount, tramp-cache-read-persistent-data,
> > tramp-archive-enabled, socks-username, newsticker--latest-update-time,
> > dictionary-color-support, mh-uncompface-executable, mh-swish++-binary,
> > mh-swish-binary, mh-mairix-binary, mh-namazu-binary, mh-grep-binary,
> > mh-spamassassin-executable, mh-sa-learn-executable,
> > mh-bogofilter-executable, mh-spamprobe-executable, mh-pgp-support-flag,
> > kkc-init-file-name, image-dired-queue-active-limit,
> > mm-temp-files-cache-file, erc-autoaway-last-sent-time,
> > viper-custom-file-name, viper-current-frame-saved,
> > copyright-current-year, cl--random-state (!!! that can easily cause
> > subtle issues), dframe-have-timer-flag, todo-files, todo-archives,
> > todo-done-separator, diary-font-lock-keywords, math-expr-opers,
> > calc-gnuplot-display, archive-7z-program.
>
> This is not relevant, since packages that aren't preloaded will be
> loaded at run time, and therefore the values will be evaluated in the
> correct context. If you are talking about these, then I don't
> understand what prompted you to raise this issue to begin with, and in
> a thread that discusses dumping.
To clarify: a defcustom whose default value is not a constant needs to
be re-evaluated during startup, if we want the dumped Emacs to be able
to run on another system or with different environment than at dump
time.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 13:10 ` Eli Zaretskii
2023-10-26 13:15 ` Eli Zaretskii
@ 2023-10-26 13:25 ` Ihor Radchenko
2023-10-26 13:31 ` Eli Zaretskii
1 sibling, 1 reply; 15+ messages in thread
From: Ihor Radchenko @ 2023-10-26 13:25 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: gerd.moellmann, 66742
Eli Zaretskii <eliz@gnu.org> writes:
>> This is a surprise to me!
>> Is it documented anywhere?
>
> What do you want to document?
I think we misunderstand each other.
>> I thought that we should expect the value to
>> be evaluated unless explicitly wrapped into (eval-when-compile ...).
>
> At what time do you think defcustom's value is evaluated?
Load time, even for pdumped libraries.
>> Also, I just looked up defvar instances across Emacs and I am seeing
>> multiple cases when the value is calculated dynamically, assuming
>> loading time:
>
> Of course, it's loading time. But AFAIU you were talking about
> evaluation during dumping, i.e. when Emacs is built.
No. It is not what I am talking about.
In this bug report, I am talking about re-dumping the already built
Emacs with the aim of adding extra arbitrary libraries. According to
manual page for dump-emacs-portable,
If you want to use this function in an Emacs that was already
dumped, you must run Emacs with the ‘-batch’ option.
This implies that re-dumping is one of the intended use-cases.
> ... This is only
> relevant for defcustom's in packages that are preloaded, because those
> packages are loaded at build time, not at run time. So for those
> packages, and only for those packages, any defcustom whose default
> value is not a constant, should be re-evaluated at startup, to make
> sure the value is suitable for the system on which Emacs runs.
I can see your point, although I wish it were not so tricky.
In any case, even within a scope of this bug report, the reproducer I
provided does not load any extra packages. So, at least, there is some
bug with preloaded packages.
Maybe, the caveats with runtime/re-dump time evaluation should be
documented.
> ...
> This is not relevant, since packages that aren't preloaded will be
> loaded at run time, and therefore the values will be evaluated in the
> correct context. If you are talking about these, then I don't
> understand what prompted you to raise this issue to begin with, and in
> a thread that discusses dumping.
... but ideally, I wish that we would not have to patch the existing
libraries in order to preload them. Otherwise, `dump-emacs-portable'
function is not very useful in practice (except for building Emacs) and
will most likely lead to subtle bugs if attempted by users.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 13:25 ` Ihor Radchenko
@ 2023-10-26 13:31 ` Eli Zaretskii
0 siblings, 0 replies; 15+ messages in thread
From: Eli Zaretskii @ 2023-10-26 13:31 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: gerd.moellmann, 66742
> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: gerd.moellmann@gmail.com, 66742@debbugs.gnu.org
> Date: Thu, 26 Oct 2023 13:25:50 +0000
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > This is not relevant, since packages that aren't preloaded will be
> > loaded at run time, and therefore the values will be evaluated in the
> > correct context. If you are talking about these, then I don't
> > understand what prompted you to raise this issue to begin with, and in
> > a thread that discusses dumping.
>
> ... but ideally, I wish that we would not have to patch the existing
> libraries in order to preload them.
You don't need to patch any libraries, you need to arrange for the
defcustom's to be re-evaluated at startup time.
But if we want to be able to re-dump any library, and let it run on a
different system after that, we should indeed stay away of
non-constant default values of user options as much as we can.
However, getting there will not be easy and will take a long time, if
ever.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-26 13:15 ` Eli Zaretskii
@ 2023-10-27 9:04 ` Ihor Radchenko
2023-10-27 10:37 ` Eli Zaretskii
0 siblings, 1 reply; 15+ messages in thread
From: Ihor Radchenko @ 2023-10-27 9:04 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: gerd.moellmann, 66742
Eli Zaretskii <eliz@gnu.org> writes:
> To clarify: a defcustom whose default value is not a constant needs to
> be re-evaluated during startup, if we want the dumped Emacs to be able
> to run on another system or with different environment than at dump
> time.
Is there a facility in place to do such re-evaluation?
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-27 9:04 ` Ihor Radchenko
@ 2023-10-27 10:37 ` Eli Zaretskii
2023-10-27 10:53 ` Ihor Radchenko
0 siblings, 1 reply; 15+ messages in thread
From: Eli Zaretskii @ 2023-10-27 10:37 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: gerd.moellmann, 66742
> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: gerd.moellmann@gmail.com, 66742@debbugs.gnu.org
> Date: Fri, 27 Oct 2023 09:04:23 +0000
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> > To clarify: a defcustom whose default value is not a constant needs to
> > be re-evaluated during startup, if we want the dumped Emacs to be able
> > to run on another system or with different environment than at dump
> > time.
>
> Is there a facility in place to do such re-evaluation?
Yes, see custom-initialize-delay, and the code in startup.el that
supports it.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-27 10:37 ` Eli Zaretskii
@ 2023-10-27 10:53 ` Ihor Radchenko
2023-10-27 10:56 ` Eli Zaretskii
2023-10-27 10:59 ` Mauro Aranda
0 siblings, 2 replies; 15+ messages in thread
From: Ihor Radchenko @ 2023-10-27 10:53 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: gerd.moellmann, 66742
Eli Zaretskii <eliz@gnu.org> writes:
>> Is there a facility in place to do such re-evaluation?
>
> Yes, see custom-initialize-delay, and the code in startup.el that
> supports it.
According to Gerd Möllmann, `custom-initialize-delay' does not work
here. AFAIU, `transient-mark-mode' is already supposed to use it (see
cus-start.el).
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-27 10:53 ` Ihor Radchenko
@ 2023-10-27 10:56 ` Eli Zaretskii
2023-10-27 10:59 ` Mauro Aranda
1 sibling, 0 replies; 15+ messages in thread
From: Eli Zaretskii @ 2023-10-27 10:56 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: gerd.moellmann, 66742
> From: Ihor Radchenko <yantar92@posteo.net>
> Cc: gerd.moellmann@gmail.com, 66742@debbugs.gnu.org
> Date: Fri, 27 Oct 2023 10:53:00 +0000
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> >> Is there a facility in place to do such re-evaluation?
> >
> > Yes, see custom-initialize-delay, and the code in startup.el that
> > supports it.
>
> According to Gerd Möllmann, `custom-initialize-delay' does not work
> here. AFAIU, `transient-mark-mode' is already supposed to use it (see
> cus-start.el).
It could be that re-dumping somehow defeats this mechanism, in which
case we need to debug why it does. I didn't mean to say that
custom-initialize-delay is a magic wand for this particular case, I
just pointed to a feature that we already have which is supposed to
handle these situations. If it doesn't work after re-dumping, it
needs to be fixed or generalized to do so, or maybe we should come up
with a similar but different feature.
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-27 10:53 ` Ihor Radchenko
2023-10-27 10:56 ` Eli Zaretskii
@ 2023-10-27 10:59 ` Mauro Aranda
2023-10-27 11:08 ` Ihor Radchenko
1 sibling, 1 reply; 15+ messages in thread
From: Mauro Aranda @ 2023-10-27 10:59 UTC (permalink / raw)
To: Ihor Radchenko, Eli Zaretskii; +Cc: gerd.moellmann, 66742
On 27/10/23 07:53, Ihor Radchenko wrote:
> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> Is there a facility in place to do such re-evaluation?
>>
>> Yes, see custom-initialize-delay, and the code in startup.el that
>> supports it.
>
> According to Gerd Möllmann, `custom-initialize-delay' does not work
> here. AFAIU, `transient-mark-mode' is already supposed to use it (see
> cus-start.el).
Have you tried making custom-delayed-init-variables nil before the
redumping thing?
^ permalink raw reply [flat|nested] 15+ messages in thread
* bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs
2023-10-27 10:59 ` Mauro Aranda
@ 2023-10-27 11:08 ` Ihor Radchenko
0 siblings, 0 replies; 15+ messages in thread
From: Ihor Radchenko @ 2023-10-27 11:08 UTC (permalink / raw)
To: Mauro Aranda; +Cc: gerd.moellmann, Eli Zaretskii, 66742
Mauro Aranda <maurooaranda@gmail.com> writes:
> > According to Gerd Möllmann, `custom-initialize-delay' does not work
> > here. AFAIU, `transient-mark-mode' is already supposed to use it (see
> > cus-start.el).
>
> Have you tried making custom-delayed-init-variables nil before the
> redumping thing?
I tried
(message ":: %S" custom-delayed-init-variables)
(setq custom-delayed-init-variables nil)
(dump-emacs-portable "/tmp/emacs-dumped-2.dmp")
But
(message ":: %S" custom-delayed-init-variables)
outputs
:: t
, which means that ./src/emacs -Q --batch -l ~/Downloads/dump2.el
already processed all the `custom-delayed-init-variables' prior to
dumping.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2023-10-27 11:08 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-25 9:26 bug#66742: 30.0.50; transient-mark-mode is not enabled after re-dumping Emacs Ihor Radchenko
2023-10-26 9:11 ` Gerd Möllmann
2023-10-26 11:42 ` Ihor Radchenko
2023-10-26 12:06 ` Eli Zaretskii
2023-10-26 12:44 ` Ihor Radchenko
2023-10-26 13:10 ` Eli Zaretskii
2023-10-26 13:15 ` Eli Zaretskii
2023-10-27 9:04 ` Ihor Radchenko
2023-10-27 10:37 ` Eli Zaretskii
2023-10-27 10:53 ` Ihor Radchenko
2023-10-27 10:56 ` Eli Zaretskii
2023-10-27 10:59 ` Mauro Aranda
2023-10-27 11:08 ` Ihor Radchenko
2023-10-26 13:25 ` Ihor Radchenko
2023-10-26 13:31 ` Eli Zaretskii
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.