GNU bug report logs - #73593
29.4; desktop-save-mode does not store window configurations

Previous Next

Package: emacs;

Reported by: Bob Hepple <bob.hepple <at> gmail.com>

Date: Wed, 2 Oct 2024 00:42:02 UTC

Severity: wishlist

Found in version 29.4

To reply to this bug, email your comments to 73593 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#73593; Package emacs. (Wed, 02 Oct 2024 00:42:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Bob Hepple <bob.hepple <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 02 Oct 2024 00:42:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Bob Hepple <bob.hepple <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 29.4; desktop-save-mode does not store window configurations
Date: Wed, 2 Oct 2024 10:41:41 +1000
--text follows this line--

From emacs -Q:
M-x desktop-save-mode
C-x r w 0
C-x C-c
restart emacs -Q
C-u M-x desktop-read
C-x r j 0
Error: "Register doesn't contain a buffer position or configuration"

The .emacs.desktop file contains:
(setq register-alist (list (list 48 "Unprintable entity" (let ((mk
(make-marker))) (add-hook 'desktop-delay-hook (lambda nil (set-marker
mk 146 (get-buffer "*scratch*")))) mk))))

... which is useless

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=54140 is similar but
drifted off into a discussion of terminal mode.

Note that
In GNU Emacs 29.4 (build 2, x86_64-unknown-linux-gnu, GTK+ Version
 3.24.42, cairo version 1.18.0) of 2024-06-25 built on a-fsn-de
System Description: Void Linux

Configured using:
 'configure --with-pgtk --prefix=/usr --sysconfdir=/etc
 --sbindir=/usr/bin --bindir=/usr/bin --mandir=/usr/share/man
 --infodir=/usr/share/info --localstatedir=/var
 --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu
 '--libdir=${exec_prefix}/lib64' --with-file-notification=inotify
 --with-modules --with-jpeg --with-tiff --with-gif --with-png
 --with-webp --with-xpm --with-rsvg --without-imagemagick --with-xml2
 --with-gnutls --with-sound --with-m17n-flt --with-json --with-harfbuzz
 --with-cairo --with-libgmp --with-sqlite3 --with-tree-sitter
 --with-native-compilation=aot 'CFLAGS=-fno-PIE -mtune=generic -O2 -pipe
 -g -ffile-prefix-map=/builddir/emacs-29.4=.' 'CPPFLAGS= '
 'LDFLAGS=-no-pie -Wl,--as-needed ''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBOTF LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK PNG
RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
WEBP XIM GTK3 ZLIB

Important settings:
  value of $LC_ALL: en_AU.utf8
  value of $LANG: C
  locale-coding-system: utf-8-unix

Major mode: Messages

Minor modes in effect:
  recentf-mode: t
  which-function-mode: t
  doom-modeline-mode: t
  global-goto-address-mode: t
  goto-address-mode: t
  pixel-scroll-precision-mode: t
  delete-selection-mode: t
  server-mode: t
  global-auto-revert-mode: t
  corfu-history-mode: t
  corfu-popupinfo-mode: t
  global-corfu-mode: t
  corfu-mode: t
  marginalia-mode: t
  savehist-mode: t
  vertico-buffer-mode: t
  vertico-mode: t
  popper-echo-mode: t
  popper-mode: t
  global-git-gutter-mode: t
  key-chord-mode: t
  which-key-mode: t
  override-global-mode: t
  desktop-save-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/home/bhepple/.emacs.d/elpa/transient-20240902.1048/transient hides
/usr/share/emacs/29.4/lisp/transient
/home/bhepple/.emacs.d/elpa/hierarchy-20190425.842/hierarchy hides
/usr/share/emacs/29.4/lisp/emacs-lisp/hierarchy

Features:
(shadow sort mail-extr emacsbug vertico-directory cursor-sensor pulse
face-remap consult-register consult display-line-numbers add-log python
sh-script smie treesit executable conf-mode dired-aux disp-table
org-indent oc-basic ol-eww eww mm-url ol-rmail ol-mhe ol-irc ol-info
ol-gnus nnselect ol-docview doc-view ol-bibtex bibtex ol-bbdb ol-w3m
ol-doi org-link-doi vc-git diff-mode vc-dispatcher vc-src rainbow-mode
recentf tree-widget which-func doom-modeline doom-modeline-segments
doom-modeline-env doom-modeline-core shrink-path f nerd-icons
nerd-icons-faces nerd-icons-data nerd-icons-data-mdicon
nerd-icons-data-flicon nerd-icons-data-codicon nerd-icons-data-devicon
nerd-icons-data-sucicon nerd-icons-data-wicon nerd-icons-data-faicon
nerd-icons-data-powerline nerd-icons-data-octicon
nerd-icons-data-pomicon nerd-icons-data-ipsicon modus-operandi-theme
modus-themes goto-addr pixel-scroll cua-base delsel server autorevert
mu4e mu4e-org mu4e-notification notifications mu4e-main mu4e-view
gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig gnus-sum
gnus-group gnus-undo gnus-start gnus-dbus dbus gnus-cloud nnimap nnmail
mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range
gnus-win gnus nnheader range mu4e-headers mu4e-compose mu4e-draft
mu4e-actions smtpmail mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
mu4e-message flow-fill mule-util hl-line mu4e-contacts mu4e-update
mu4e-folders mu4e-context mu4e-query-items mu4e-server mu4e-modeline
mu4e-vars mu4e-helpers mu4e-config mu4e-window ido mu4e-obsolete cape
corfu-history corfu-popupinfo corfu orderless marginalia savehist
vertico-buffer vertico compat compat-30 compat-macs dumb-jump popup dash
s polymode poly-lock polymode-base polymode-weave polymode-export
polymode-compat polymode-methods polymode-core polymode-classes
eieio-custom eieio-base color org-beautify-theme popper-echo popper
pdf-tools cus-edit cus-load pdf-view jka-compr pdf-cache pdf-info tq
pdf-util pdf-macs image-mode exif git-gutter key-chord comp comp-cstr
speedbar ezimage dframe json-navigator hierarchy eglot
external-completion array filenotify jsonrpc ert ewoc debug backtrace
xref flymake-proc flymake warnings project imenu advice elfeed-dashboard
org-element org-persist xdg org-id org-refile org ob ob-tangle ob-ref
ob-lob ob-table ob-exp org-macro org-src ob-comint org-pcomplete
pcomplete org-list org-footnote org-faces org-entities noutline outline
icons ob-emacs-lisp ob-core ob-eval org-cycle org-table org-keys oc
org-loaddefs find-func cal-menu calendar cal-loaddefs ol rx org-fold
org-fold-core org-compat org-version org-macs format-spec elfeed-show
elfeed-search message sendmail yank-media dired dired-loaddefs rfc822
mml mml-sec epa epg rfc6068 epg-config gnus-util mm-decode mm-bodies
mm-encode mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums
mail-prsvr mailabbrev mail-utils gmm-utils mailheader shr pixel-fill
kinsoku puny svg dom elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db
elfeed-lib time-date avl-tree generator url-queue url-file xml-query xml
bookmark pp wid-edit use-package-ensure rpm-spec-mode gk-ibuffer
ibuf-macs ibuffer-vc ibuf-ext ibuffer ibuffer-loaddefs which-key
use-package-diminish edmacro kmacro use-package-bind-key bind-key
easy-mmode desktop frameset whitespace ripgrep derived thingatpt grep
compile text-property-search comint ansi-osc ansi-color ring
use-package-core cl-extra help-mode finder-inf cl
all-the-icons-autoloads browse-kill-ring-autoloads cape-autoloads
casual-re-builder-autoloads casual-lib-autoloads
cc-isearch-menu-autoloads company-autoloads consult-dir-autoloads
corfu-autoloads csv-mode-autoloads discover-my-major-autoloads
doom-modeline-autoloads dumb-jump-autoloads elfeed-dashboard-autoloads
elfeed-autoloads embark-consult-autoloads consult-autoloads
embark-autoloads esup-autoloads expand-region-autoloads
git-gutter-autoloads helpful-autoloads elisp-refs-autoloads
ibuffer-vc-autoloads iflipb-autoloads json-navigator-autoloads
hierarchy-autoloads key-chord-autoloads magit-autoloads pcase
magit-section-autoloads makey-autoloads marginalia-autoloads
markdown-mode-autoloads neotree-autoloads nerd-icons-autoloads
orderless-autoloads org-beautify-theme-autoloads pdf-tools-autoloads
polymode-autoloads popper-autoloads popup-autoloads
rainbow-mode-autoloads ripgrep-autoloads shrink-path-autoloads
f-autoloads dash-autoloads s-autoloads tablist-autoloads
transient-autoloads transpose-frame-autoloads vertico-autoloads
vterm-autoloads which-key-autoloads with-editor-autoloads info
compat-autoloads package browse-url url url-proxy url-privacy url-expand
url-methods url-history url-cookie generate-lisp-file url-domsuf
url-util mailcap url-handlers url-parse auth-source cl-seq eieio
eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp
byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv
eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type
elisp-mode mwheel term/pgtk-win pgtk-win term/common-win pgtk-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list replace
newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock
font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq
simple cl-generic indonesian philippine cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button
loaddefs theme-loaddefs faces cus-face macroexp files window
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget keymap hashtable-print-readable backquote threads dbusbind
inotify dynamic-setting system-font-setting font-render-setting cairo
gtk pgtk lcms2 multi-tty make-network-process native-compile emacs)

Memory information:
((conses 16 1047091 813325)
 (symbols 48 46754 2)
 (strings 32 435593 56036)
 (string-bytes 1 14207078)
 (vectors 16 131693)
 (vector-slots 8 2089700 953079)
 (floats 8 16344 2664)
 (intervals 56 5315 2372)
 (buffers 984 52))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#73593; Package emacs. (Wed, 02 Oct 2024 06:55:01 GMT) Full text and rfc822 format available.

Message #8 received at 73593 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Bob Hepple <bob.hepple <at> gmail.com>,
 martin rudalics <rudalics <at> gmx.at>
Cc: 73593 <at> debbugs.gnu.org
Subject: Re: bug#73593: 29.4;
 desktop-save-mode does not store window configurations
Date: Wed, 02 Oct 2024 09:53:51 +0300
> From: Bob Hepple <bob.hepple <at> gmail.com>
> Date: Wed, 2 Oct 2024 10:41:41 +1000
> 
> >From emacs -Q:
> M-x desktop-save-mode
> C-x r w 0
> C-x C-c
> restart emacs -Q
> C-u M-x desktop-read
> C-x r j 0
> Error: "Register doesn't contain a buffer position or configuration"
> 
> The .emacs.desktop file contains:
> (setq register-alist (list (list 48 "Unprintable entity" (let ((mk
> (make-marker))) (add-hook 'desktop-delay-hook (lambda nil (set-marker
> mk 146 (get-buffer "*scratch*")))) mk))))
> 
> ... which is useless

Martin, is there any practical way of preserving a
window-configuration across Emacs sessions?  The object
current-window-configuration returns is exposed to Lisp as an opaque
object, and I don't think we can meaningfully serialize it, can we?

So perhaps the solution is to filter such registers from
register-alist when we save desktop?

> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=54140 is similar but
> drifted off into a discussion of terminal mode.

No, that's a very different issue, and it has been solved long ago,
AFAIR.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#73593; Package emacs. (Wed, 02 Oct 2024 07:42:02 GMT) Full text and rfc822 format available.

Message #11 received at 73593 <at> debbugs.gnu.org (full text, mbox):

From: martin rudalics <rudalics <at> gmx.at>
To: Eli Zaretskii <eliz <at> gnu.org>, Bob Hepple <bob.hepple <at> gmail.com>
Cc: 73593 <at> debbugs.gnu.org
Subject: Re: bug#73593: 29.4; desktop-save-mode does not store window
 configurations
Date: Wed, 2 Oct 2024 09:41:31 +0200
> Martin, is there any practical way of preserving a
> window-configuration across Emacs sessions?

We added window states for that purpose.

> The object
> current-window-configuration returns is exposed to Lisp as an opaque
> object, and I don't think we can meaningfully serialize it, can we?

It would be very tedious to do that and the result would be something
like a window state anyway.

> So perhaps the solution is to filter such registers from
> register-alist when we save desktop?

This is the most reasonable way IMO.  The other two solutions would be to
optionally proceed as follows:

- Whenever we save a configuration in a register, make a shadow register
  where we save the state and use that when we save the desktop.

- When saving the desktop, temporarily restore the configuration stored
  in the register (if its frame is still live), save the state of that
  frame in a register and restore its configuration again.

For both, register.el would have to be able to handle window states.

martin




Severity set to 'wishlist' from 'normal' Request was from Stefan Kangas <stefankangas <at> gmail.com> to control <at> debbugs.gnu.org. (Sun, 03 Nov 2024 06:00:04 GMT) Full text and rfc822 format available.

This bug report was last modified 223 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.