bug#81614: 30.2; quit-window unexpectedly changes the width of window

Rahguzar via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <[email protected]>
Newsgroups gmane.emacs.bugs
Message-ID <[email protected]>
I am attaching a patch that fixes the issue for me.

Rahguzar <[email protected]> writes:

> Dear Emacs maintainers,
>
> To reproduce starting with emacs -Q, evaluate the following code in
> scratch buffer:
>
> (progn
>   (display-buffer (messages-buffer) '(display-buffer-in-direction
>                                       (direction . right)))
>   (display-buffer (get-buffer-create "*buffer-2*")
>                   '(display-buffer-below-selected))
>   (display-buffer (get-buffer-create "*buffer-1*")
>                   '(display-buffer-same-window))
>   (select-window (window-next-sibling)))
>
> and then do C-x w q twice. The second quit-window changes the width of
> the two windows.
>
> I think the responsible code is this snippet from 'quit-restore-window'
>
> (when (and (integerp (nth 3 quad))
> 		 (if (window-combined-p window)
>                      (/= (nth 3 quad) (window-total-height window))
>                    (/= (nth 3 quad) (window-total-width window))))
> 	;; Try to resize WINDOW to its old height but don't signal an
> 	;; error.
> 	(condition-case nil
> 	    (window-resize
>              window
>              (- (nth 3 quad) (if (window-combined-p window)
>                                  (window-total-height window)
>                                (window-total-width window)))
>              (window-combined-p window t))
> 	  (error nil)))
>
> As far as I can tell by searching around in 'window.el' the
> 'quit-restore' parameter only ever stores the height of the window. This
> matches the description of 'quit-restore' in Info node (elisp) Quitting
> Windows. But the code above instead changes the width of the window if
> the window is not vertically combined.
>
> Best,
> Rahguzar
>
>
> In GNU Emacs 30.2 (build 1, aarch64-redhat-linux-gnu, GTK+ Version
>  3.24.52, cairo version 1.18.4) of 2026-05-14 built on
>  3aa749ead9044621a9c0d9b695f453cd
> System Description: Fedora Linux Asahi Remix 44 (Forty Four)
>
> Configured using:
>  'configure --build=aarch64-redhat-linux-gnu
>  --host=aarch64-redhat-linux-gnu --program-prefix=
>  --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr
>  --bindir=/usr/bin --sbindir=/usr/bin --sysconfdir=/etc
>  --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64
>  --libexecdir=/usr/libexec --localstatedir=/var --runstatedir=/run
>  --sharedstatedir=/var/lib --mandir=/usr/share/man
>  --infodir=/usr/share/info --disable-gc-mark-trace --with-cairo
>  --with-dbus --with-gif --with-gpm=no --with-harfbuzz --with-jpeg
>  --with-modules --with-native-compilation=aot --with-pgtk --with-png
>  --with-rsvg --with-sqlite3 --with-tiff --with-tree-sitter --with-webp
>  --with-xpm build_alias=aarch64-redhat-linux-gnu
>  host_alias=aarch64-redhat-linux-gnu CC=gcc 'CFLAGS=-DMAIL_USE_LOCKF -O2
>  -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches
>  -pipe -Wall -Werror=format-security
>  -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS
>  -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
>  -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
>  -mbranch-protection=standard -fasynchronous-unwind-tables
>  -fstack-clash-protection -fno-omit-frame-pointer
>  -mno-omit-leaf-frame-pointer ' 'LDFLAGS=-Wl,-z,relro -Wl,--as-needed
>  -Wl,-z,pack-relative-relocs -Wl,-z,now
>  -specs=/usr/lib/rpm/redhat/redhat-hardened-ld
>  -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors
>  -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1
>  -specs=/usr/lib/rpm/redhat/redhat-package-notes ' CXX=g++ 'CXXFLAGS=-O2
>  -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches
>  -pipe -Wall -Werror=format-security
>  -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS
>  -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong
>  -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1
>  -mbranch-protection=standard -fasynchronous-unwind-tables
>  -fstack-clash-protection -fno-omit-frame-pointer
>  -mno-omit-leaf-frame-pointer '
>  PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
>
> Configured features:
> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG
> LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD 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 $LANG: en_US.utf8
>   locale-coding-system: utf-8-unix
>
> Major mode: mu4e:main
>
> Minor modes in effect:
>   corfu-history-mode: t
>   corfu-popupinfo-mode: t
>   server-mode: t
>   mu4e-search-minor-mode: t
>   mu4e-update-minor-mode: t
>   mu4e-context-minor-mode: t
>   satchel-mode: t
>   nerd-icons-completion-mode: t
>   marginalia-mode: t
>   vertico-multiform-mode: t
>   vertico-mode: t
>   evil-goggles-mode: t
>   anzu-mode: t
>   evil-mode: t
>   evil-local-mode: t
>   recentf-mode: t
>   savehist-mode: t
>   save-place-mode: t
>   electric-pair-mode: t
>   override-global-mode: t
>   pixel-scroll-precision-mode: t
>   repeat-mode: t
>   midnight-mode: t
>   global-eldoc-mode: t
>   eldoc-mode: t
>   show-paren-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   minibuffer-regexp-mode: t
>   buffer-read-only: t
>   size-indication-mode: t
>   line-number-mode: t
>   transient-mark-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>   abbrev-mode: t
>
> Load-path shadows:
> /home/azeem/.local/state/emacs/elpaca/builds/transient/transient hides /usr/share/emacs/30.2/lisp/transient
> /home/azeem/.local/state/emacs/elpaca/builds/ef-themes/theme-loaddefs hides /usr/share/emacs/30.2/lisp/theme-loaddefs
> /home/azeem/.local/state/emacs/elpaca/builds/compat/compat hides /usr/share/emacs/30.2/lisp/emacs-lisp/compat
>
> Features:
> (shadow emacsbug help-fns radix-tree tex-mode shell embark-org
> embark-consult embark timezone link-hint ffap goto-addr avy fabs consult
> undo-fu-session cus-start vertico-sort woman man nerd-icons-corfu
> dabbrev cape-char delsel corfu-history corfu-popupinfo corfu-auto corfu
> evil-embrace embrace expand-region text-mode-expansions
> the-org-mode-expansions org-element org-persist xdg org-id org-refile
> org-element-ast inline avl-tree generator er-basic-expansions
> expand-region-core expand-region-custom evil-surround jit-spell ispell
> face-remap pdf-roll pdf-annot tablist tablist-filter
> semantic/wisent/comp semantic/wisent semantic/wisent/wisent
> semantic/util-modes semantic/util semantic semantic/tag semantic/lex
> semantic/fw mode-local cedet facemenu pdf-outline inspirehep-pdf
> companion-mode inspirehep reftex reftex-loaddefs reftex-vars bibtex
> pdf-links pdf-isearch let-alist pdf-misc imenu pdf-tools package
> url-handlers pdf-view pdf-cache pdf-info tq pdf-util pdf-macs image-mode
> exif gnus-fun smerge-mode diff diff-mode track-changes jka-compr
> shr-color qp mm-archive sort smiley gnus-cite mail-extr textsec
> uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check
> gnus-async gnus-bcklg visual-wrap gnus-ml disp-table nndraft nnmh
> vertico-repeat epa-file network-stream nsm gnus-agent gnus-srvr
> gnus-score score-mode nnvirtual nntp gnus-cache help-at-pt server cape
> mu4e mu4e-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
> org-src sh-script smie treesit executable ob-comint org-pcomplete
> pcomplete org-list org-footnote org-faces org-entities noutline outline
> org-version ob-emacs-lisp ob-core ob-eval org-cycle org-table ol
> org-fold org-fold-core org-keys oc org-loaddefs find-func org-compat
> org-macs format-spec mu4e-notification notifications mu4e-main smtpmail
> mu4e-view mu4e-mime-parts crm cal-menu calendar cal-loaddefs
> mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft gnus-msg
> 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-search mu4e-lists mu4e-bookmarks
> mu4e-mark mu4e-message shr pixel-fill kinsoku url-file svg xml dom
> browse-url 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 message sendmail
> yank-media puny rfc822 mml mml-sec epa derived epg rfc6068 epg-config
> gnus-util time-date mm-decode mm-bodies mm-encode mail-parse rfc2231
> rfc2047 rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils
> gmm-utils mailheader mu4e-obsolete usher satchel ibuf-ext ibuffer
> ibuffer-loaddefs bookmark nerd-icons-completion 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 marginalia
> vertico-multiform vertico evil-goggles pulse ef-reverie-theme ef-themes
> modus-themes color pdf-loader anzu advice evil evil-integration
> evil-maps evil-commands reveal evil-jumps evil-command-window evil-types
> evil-search evil-ex evil-macros evil-repeat evil-states evil-core comp
> comp-cstr cl-extra help-mode comp-run comp-common evil-common rect
> evil-vars edmacro kmacro orderless compat compat-31 yeetube-autoloads
> keymap-popup-autoloads filechooser-autoloads wile-autoloads
> usher-autoloads undo-fu-session-autoloads magit-autoloads
> transient-autoloads ef-themes-autoloads modus-themes-autoloads
> jit-spell-autoloads satchel-autoloads rmk-usb-autoloads
> pdf-tools-autoloads tablist-autoloads xr-autoloads link-hint-autoloads
> avy-autoloads yaml-mode-autoloads markdown-mode-autoloads
> password-store-autoloads with-editor-autoloads magit-section-autoloads
> llama-autoloads cape-autoloads embark-consult-autoloads fabs-autoloads
> consult-hoogle-autoloads consult-autoloads corfu-autoloads
> embark-autoloads marginalia-autoloads nerd-icons-completion-autoloads
> orderless-autoloads vertico-autoloads helpful-autoloads
> macrostep-autoloads eat-autoloads compat-autoloads inspirehep-autoloads
> nerd-icons-corfu-autoloads nerd-icons-autoloads
> haskell-ng-mode-autoloads companion-mode-autoloads eww-hacks-autoloads
> evil-embrace-autoloads embrace-autoloads expand-region-autoloads
> evil-surround-autoloads evil-nerd-commenter-autoloads
> evil-goggles-autoloads anzu-autoloads evil-autoloads goto-chg-autoloads
> eshell-syntax-highlighting-autoloads package-lint-flymake-autoloads
> package-lint-autoloads dash-autoloads highlight-quoted-autoloads
> dirt-autoloads diredfl-autoloads trashed-autoloads cond-let-autoloads
> recentf tree-widget savehist saveplace elec-pair bind-key easy-mmode
> ibuf-macs flymake project compile text-property-search comint ansi-osc
> ansi-color warnings thingatpt elpaca-menu-elpa dired-x dired
> dired-loaddefs pcase pixel-scroll cua-base ring repeat rx midnight
> cus-edit pp cus-load wid-edit elpaca-menu-melpa url url-proxy
> url-privacy url-expand url-methods url-history url-cookie
> generate-lisp-file url-domsuf url-util url-parse auth-source cl-seq
> eieio eieio-core icons password-cache json subr-x map url-vars mailcap
> elpaca-menu-org elpaca-git elpaca byte-opt cl-macs gv bytecomp
> byte-compile elpaca-process cl-loaddefs cl-lib elpaca-autoloads 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 touch-screen 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 move-toolbar make-network-process native-compile emacs)
>
> Memory information:
> ((conses 16 1471415 290527) (symbols 48 50723 4)
>  (strings 32 411050 15448) (string-bytes 1 9870195)
>  (vectors 16 111719) (vector-slots 8 1670896 171029)
>  (floats 8 934 14628) (intervals 56 101106 2393) (buffers 992 41))
0001-Don-t-change-width-in-quit-restore-bug-81614.patch (text/x-patch, 1.6 KB)
From 024c7947ecd45b8686b3c7edaa546ec32c7e1551 Mon Sep 17 00:00:00 2001
From: Rahguzar <[email protected]>
Date: Sat, 15 Aug 2026 13:28:36 +0500
Subject: [PATCH] Don't change width in quit restore (bug#81614)

* lisp/window.el (quit-restore-window): only resize
vertically combined windows
---
 lisp/window.el | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/lisp/window.el b/lisp/window.el
index fef2f3d4666..f3b33023f79 100644
--- a/lisp/window.el
+++ b/lisp/window.el
@@ -5481,19 +5481,14 @@ quit-restore-window
 	       (eq (nth 3 quit-restore) buffer)))
       ;; Show another buffer stored in quit-restore(-prev) parameter.
       (when (and (integerp (nth 3 quad))
-		 (if (window-combined-p window)
-                     (/= (nth 3 quad) (window-total-height window))
-                   (/= (nth 3 quad) (window-total-width window))))
+                 (window-combined-p window)
+                 (/= (nth 3 quad) (window-total-height window)))
 	;; Try to resize WINDOW to its old height but don't signal an
 	;; error.
-	(condition-case nil
-	    (window-resize
-             window
-             (- (nth 3 quad) (if (window-combined-p window)
-                                 (window-total-height window)
-                               (window-total-width window)))
-             (window-combined-p window t))
-	  (error nil)))
+	(ignore-errors
+	  (window-resize
+           window
+           (- (nth 3 quad) (window-total-height window)))))
       (set-window-dedicated-p window nil)
       ;; Restore WINDOW's previous buffer, start and point position.
       (set-window-buffer-start-and-point
-- 
2.55.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.