GNU bug report logs - #76745
31.0.50; ?d action in save-some-buffers-action-alist to view diff does not work

Previous Next

Package: emacs;

Reported by: StrawberryTea <look <at> strawberrytea.xyz>

Date: Tue, 4 Mar 2025 18:49:03 UTC

Severity: normal

Fixed in version 31.0.50

Done: Juri Linkov <juri <at> linkov.net>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 76745 in the body.
You can then email your comments to 76745 AT debbugs.gnu.org in the normal way.

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#76745; Package emacs. (Tue, 04 Mar 2025 18:49:03 GMT) Full text and rfc822 format available.

Acknowledgement sent to StrawberryTea <look <at> strawberrytea.xyz>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Tue, 04 Mar 2025 18:49:03 GMT) Full text and rfc822 format available.

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

From: StrawberryTea <look <at> strawberrytea.xyz>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; ?d action in save-some-buffers-action-alist to view diff
 does not work
Date: Tue, 04 Mar 2025 13:47:39 -0500
Hello. I have found that the fix from #75993 breaks the ?d action in
save-some-buffers-action-alist. The reason is that since we are not
entering view-mode after #75993, when we type ?q to quit the diff
window, we are not calling exit-recursive-edit to return to the
save-some-buffers queries.

So on one hand, we want to scroll through the diff easily to decide
whether to save the buffer or not. But on the other hand, we want to
navigate by the diff sections and copy hunks. To me, this is a model
editing situation. The user should exit view mode to perform diff
commands instead of disabling view-mode for diffs altogether like in
#75993.

But anyway, I propose that we revert #75993.

Sincerely,
StrawberryTea/LemonBreezes


In GNU Emacs 31.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo
 version 1.18.2) of 2025-03-03 built on localhost
Repository revision: 9a657e1dabc196e60dcf48435d48fb51aef3c60d
Repository branch: feature/igc
Windowing system distributor 'The X.Org Foundation', version 11.0.12101016
System Description: Gentoo Linux

Configured using:
 'configure --prefix=/usr --build=x86_64-pc-linux-gnu
 --host=x86_64-pc-linux-gnu --mandir=/usr/share/man
 --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc
 --localstatedir=/var/lib --datarootdir=/usr/share
 --disable-silent-rules --docdir=/usr/share/doc/emacs-31.0.9999
 --htmldir=/usr/share/doc/emacs-31.0.9999/html --libdir=/usr/lib64
 --program-suffix=-emacs-31-vcs --includedir=/usr/include/emacs-31-vcs
 --infodir=/usr/share/info/emacs-31-vcs --localstatedir=/var
 --enable-locallisppath=/etc/emacs:/usr/share/emacs/site-lisp
 --without-compress-install --without-hesiod --without-pop
 --with-file-notification=inotify --with-pdumper --with-mps=yes
 --disable-gc-mark-trace --enable-acl --enable-xattr --with-dbus
 --with-modules --with-gameuser=:gamestat --with-libgmp --with-gpm
 --with-native-compilation=aot --without-kerberos --without-kerberos5
 --with-lcms2 --with-xml2 --with-mailutils --without-selinux
 --with-sqlite3 --with-gnutls --with-libsystemd --with-threads
 --with-tree-sitter --without-wide-int --with-sound=no --with-zlib
 --with-x --without-pgtk --without-ns --without-gconf
 --without-gsettings --without-toolkit-scroll-bars --with-xpm --with-xft
 --with-cairo --with-harfbuzz --with-libotf --with-m17n-flt
 --with-x-toolkit=lucid --with-xaw3d --with-gif --with-jpeg --with-png
 --with-rsvg --with-tiff --with-webp --with-imagemagick
 --with-dumping=pdumper 'CFLAGS=-DFD_SETSIZE=10000
 -DDARWIN_UNLIMITED_SELECT -march=native -Ofast -fno-finite-math-only
 -pipe -fno-lto -Wno-error=odr -Wno-error=lto-type-mismatch
 -Wno-error=strict-aliasing -fgraphite-identity -floop-nest-optimize
 -fdevirtualize-at-ltrans -fipa-pta -fno-semantic-interposition '
 'LDFLAGS=-Wl,--as-needed -Wl,-Ofast -Wl,--sort-common''

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM HARFBUZZ IMAGEMAGICK
JPEG LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES MPS NATIVE_COMP
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SQLITE3 THREADS TIFF TREE_SITTER
WEBP X11 XAW3D XDBE XIM XINERAMA XINPUT2 XPM XRANDR LUCID ZLIB

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

Major mode: ELisp/l

Minor modes in effect:
  citar-org-roam-mode: t
  citar-embark-mode: t
  global-display-fill-column-indicator-mode: t
  display-fill-column-indicator-mode: t
  pomm-mode-line-mode: t
  pdf-occur-global-minor-mode: t
  emms-mode-line-cycle: t
  emms-playing-time-display-mode: t
  emms-playing-time-mode: t
  emms-mode-line-mode: t
  mu4e-modeline-mode: t
  eshell-atuin-mode: t
  eat-eshell-visual-command-mode: t
  eat-eshell-mode: t
  global-ts-fold-mode: t
  eglot-booster-mode: t
  yas-global-mode: t
  yas-minor-mode: t
  parrot-mode: t
  magit-gptcommit-mode: t
  isearch-mb-mode: t
  global-anzu-mode: t
  anzu-mode: t
  auto-sudoedit-mode: t
  diff-hl-flydiff-mode: t
  dirvish-override-dired-mode: t
  projectile-mode: t
  whitespace-mode: t
  lispyville-mode: t
  lispy-mode: t
  delete-selection-mode: t
  org-roam-db-autosync-mode: t
  eros-mode: t
  highlight-quoted-mode: t
  rainbow-delimiters-mode: t
  outline-minor-mode: t
  vi-tilde-fringe-mode: t
  highlight-numbers-mode: t
  display-line-numbers-mode: t
  hl-todo-mode: t
  minuet-auto-suggestion-mode: t
  breadcrumb-mode: t
  breadcrumb-local-mode: t
  recentf-mode: t
  save-place-mode: t
  global-so-long-mode: t
  global-diff-hl-mode: t
  diff-hl-mode: t
  envrc-global-mode: t
  global-git-commit-mode: t
  vimish-fold-global-mode: t
  vimish-fold-mode: t
  which-key-mode: t
  savehist-mode: t
  better-jumper-mode: t
  better-jumper-local-mode: t
  vertico-multiform-mode: t
  vertico-mouse-mode: t
  vertico-mode: t
  nerd-icons-completion-mode: t
  marginalia-mode: t
  corfu-history-mode: t
  corfu-popupinfo-mode: t
  global-corfu-mode: t
  corfu-mode: t
  evil-goggles-mode: t
  key-chord-mode: t
  evil-snipe-override-mode: t
  evil-snipe-mode: t
  evil-snipe-override-local-mode: t
  evil-snipe-local-mode: t
  restore-point-mode: t
  beginend-global-mode: t
  beginend-prog-mode: t
  evil-owl-mode: t
  beacon-mode: t
  comint-histories-mode: t
  repeat-mode: t
  gcmh-mode: t
  winner-mode: t
  smartparens-global-mode: t
  ws-butler-global-mode: t
  ws-butler-mode: t
  undo-fu-session-global-mode: t
  undo-fu-session-mode: t
  undo-fu-mode: t
  global-flycheck-mode: t
  global-yank-indent-mode: t
  yank-indent-mode: t
  exwm-mff-mode: t
  persp-mode: t
  minions-mode: t
  winum-mode: t
  global-kkp-mode: t
  persistent-scratch-autosave-mode: t
  exwm-xsettings-mode: t
  exwm-systemtray-mode: t
  exwm-randr-mode: t
  server-mode: t
  evil-mode: t
  evil-local-mode: t
  +popup-mode: t
  general-override-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
  window-divider-mode: t
  undelete-frame-mode: t
  minibuffer-regexp-mode: 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
  abbrev-mode: t

Load-path shadows:
/home/st/.config/emacs/.local/straight/build-31.0.50/ef-themes/theme-loaddefs hides /home/st/.config/emacs/.local/straight/build-31.0.50/standard-themes/theme-loaddefs
/home/st/.config/emacs/.local/straight/build-31.0.50/ef-themes/theme-loaddefs hides /home/st/.config/emacs/.local/straight/build-31.0.50/modus-themes/theme-loaddefs
/home/st/.config/emacs/.local/straight/build-31.0.50/ivy/elpa hides /home/st/.config/emacs/.local/straight/build-31.0.50/lispy/elpa
/home/st/.config/emacs/.local/straight/build-31.0.50/straight/straight hides /home/st/.config/emacs/.local/straight/repos/straight.el/straight
/home/st/.config/emacs/.local/straight/build-31.0.50/straight/straight-x hides /home/st/.config/emacs/.local/straight/repos/straight.el/straight-x
/home/st/.config/emacs/.local/straight/build-31.0.50/straight/straight-ert-print-hack hides /home/st/.config/emacs/.local/straight/repos/straight.el/straight-ert-print-hack
/home/st/.config/emacs/.local/straight/build-31.0.50/cmake-mode/cmake-mode hides /usr/share/emacs/site-lisp/cmake-mode
/usr/share/emacs/site-lisp/ratpoison hides /usr/share/emacs/site-lisp/ratpoison/ratpoison
/home/st/.config/emacs/.local/straight/build-31.0.50/bind-key/bind-key hides /usr/share/emacs/31.0.50/lisp/bind-key
/home/st/.config/emacs/.local/straight/build-31.0.50/external-completion/external-completion hides /usr/share/emacs/31.0.50/lisp/external-completion
/home/st/.config/emacs/.local/straight/build-31.0.50/jsonrpc/jsonrpc hides /usr/share/emacs/31.0.50/lisp/jsonrpc
/home/st/.config/emacs/.local/straight/repos/straight.el/indent hides /usr/share/emacs/31.0.50/lisp/indent
/home/st/.config/emacs/.local/straight/build-31.0.50/ef-themes/theme-loaddefs hides /usr/share/emacs/31.0.50/lisp/theme-loaddefs
/home/st/.config/emacs/.local/straight/build-31.0.50/transient/transient hides /usr/share/emacs/31.0.50/lisp/transient
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-bind-key hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-bind-key
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-core hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-core
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-delight hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-delight
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-diminish hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-diminish
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-ensure-system-package hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-ensure-system-package
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-ensure hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-ensure
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-jump hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-jump
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package-lint hides /usr/share/emacs/31.0.50/lisp/use-package/use-package-lint
/home/st/.config/emacs/.local/straight/build-31.0.50/use-package/use-package hides /usr/share/emacs/31.0.50/lisp/use-package/use-package
/home/st/.config/emacs/.local/straight/build-31.0.50/eglot/eglot hides /usr/share/emacs/31.0.50/lisp/progmodes/eglot
/home/st/.config/emacs/.local/straight/build-31.0.50/flymake/flymake hides /usr/share/emacs/31.0.50/lisp/progmodes/flymake
/home/st/.config/emacs/.local/straight/build-31.0.50/project/project hides /usr/share/emacs/31.0.50/lisp/progmodes/project
/home/st/.config/emacs/.local/straight/build-31.0.50/xref/xref hides /usr/share/emacs/31.0.50/lisp/progmodes/xref
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-C hides /usr/share/emacs/31.0.50/lisp/org/ob-C
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-awk hides /usr/share/emacs/31.0.50/lisp/org/ob-awk
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-calc hides /usr/share/emacs/31.0.50/lisp/org/ob-calc
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-clojure hides /usr/share/emacs/31.0.50/lisp/org/ob-clojure
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-core hides /usr/share/emacs/31.0.50/lisp/org/ob-core
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-ditaa hides /usr/share/emacs/31.0.50/lisp/org/ob-ditaa
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-dot hides /usr/share/emacs/31.0.50/lisp/org/ob-dot
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-emacs-lisp hides /usr/share/emacs/31.0.50/lisp/org/ob-emacs-lisp
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-eshell hides /usr/share/emacs/31.0.50/lisp/org/ob-eshell
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-exp hides /usr/share/emacs/31.0.50/lisp/org/ob-exp
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-forth hides /usr/share/emacs/31.0.50/lisp/org/ob-forth
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-gnuplot hides /usr/share/emacs/31.0.50/lisp/org/ob-gnuplot
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-haskell hides /usr/share/emacs/31.0.50/lisp/org/ob-haskell
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-julia hides /usr/share/emacs/31.0.50/lisp/org/ob-julia
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-lilypond hides /usr/share/emacs/31.0.50/lisp/org/ob-lilypond
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-lisp hides /usr/share/emacs/31.0.50/lisp/org/ob-lisp
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-lob hides /usr/share/emacs/31.0.50/lisp/org/ob-lob
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-makefile hides /usr/share/emacs/31.0.50/lisp/org/ob-makefile
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-octave hides /usr/share/emacs/31.0.50/lisp/org/ob-octave
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-perl hides /usr/share/emacs/31.0.50/lisp/org/ob-perl
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-plantuml hides /usr/share/emacs/31.0.50/lisp/org/ob-plantuml
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-processing hides /usr/share/emacs/31.0.50/lisp/org/ob-processing
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-python hides /usr/share/emacs/31.0.50/lisp/org/ob-python
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-ref hides /usr/share/emacs/31.0.50/lisp/org/ob-ref
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-ruby hides /usr/share/emacs/31.0.50/lisp/org/ob-ruby
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-sass hides /usr/share/emacs/31.0.50/lisp/org/ob-sass
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-R hides /usr/share/emacs/31.0.50/lisp/org/ob-R
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-comint hides /usr/share/emacs/31.0.50/lisp/org/ob-comint
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-css hides /usr/share/emacs/31.0.50/lisp/org/ob-css
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-eval hides /usr/share/emacs/31.0.50/lisp/org/ob-eval
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-fortran hides /usr/share/emacs/31.0.50/lisp/org/ob-fortran
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-groovy hides /usr/share/emacs/31.0.50/lisp/org/ob-groovy
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-java hides /usr/share/emacs/31.0.50/lisp/org/ob-java
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-latex hides /usr/share/emacs/31.0.50/lisp/org/ob-latex
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-lua hides /usr/share/emacs/31.0.50/lisp/org/ob-lua
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-matlab hides /usr/share/emacs/31.0.50/lisp/org/ob-matlab
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-maxima hides /usr/share/emacs/31.0.50/lisp/org/ob-maxima
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-ocaml hides /usr/share/emacs/31.0.50/lisp/org/ob-ocaml
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-org hides /usr/share/emacs/31.0.50/lisp/org/ob-org
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-scheme hides /usr/share/emacs/31.0.50/lisp/org/ob-scheme
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-screen hides /usr/share/emacs/31.0.50/lisp/org/ob-screen
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-js hides /usr/share/emacs/31.0.50/lisp/org/ob-js
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-sed hides /usr/share/emacs/31.0.50/lisp/org/ob-sed
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-shell hides /usr/share/emacs/31.0.50/lisp/org/ob-shell
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-sql hides /usr/share/emacs/31.0.50/lisp/org/ob-sql
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-sqlite hides /usr/share/emacs/31.0.50/lisp/org/ob-sqlite
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-table hides /usr/share/emacs/31.0.50/lisp/org/ob-table
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob-tangle hides /usr/share/emacs/31.0.50/lisp/org/ob-tangle
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ob hides /usr/share/emacs/31.0.50/lisp/org/ob
/home/st/.config/emacs/.local/straight/build-31.0.50/org/oc-basic hides /usr/share/emacs/31.0.50/lisp/org/oc-basic
/home/st/.config/emacs/.local/straight/build-31.0.50/org/oc-biblatex hides /usr/share/emacs/31.0.50/lisp/org/oc-biblatex
/home/st/.config/emacs/.local/straight/build-31.0.50/org/oc-bibtex hides /usr/share/emacs/31.0.50/lisp/org/oc-bibtex
/home/st/.config/emacs/.local/straight/build-31.0.50/org/oc-csl hides /usr/share/emacs/31.0.50/lisp/org/oc-csl
/home/st/.config/emacs/.local/straight/build-31.0.50/org/oc-natbib hides /usr/share/emacs/31.0.50/lisp/org/oc-natbib
/home/st/.config/emacs/.local/straight/build-31.0.50/org/oc hides /usr/share/emacs/31.0.50/lisp/org/oc
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-bbdb hides /usr/share/emacs/31.0.50/lisp/org/ol-bbdb
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-bibtex hides /usr/share/emacs/31.0.50/lisp/org/ol-bibtex
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-docview hides /usr/share/emacs/31.0.50/lisp/org/ol-docview
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-doi hides /usr/share/emacs/31.0.50/lisp/org/ol-doi
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-eshell hides /usr/share/emacs/31.0.50/lisp/org/ol-eshell
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-eww hides /usr/share/emacs/31.0.50/lisp/org/ol-eww
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-gnus hides /usr/share/emacs/31.0.50/lisp/org/ol-gnus
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-info hides /usr/share/emacs/31.0.50/lisp/org/ol-info
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-irc hides /usr/share/emacs/31.0.50/lisp/org/ol-irc
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-man hides /usr/share/emacs/31.0.50/lisp/org/ol-man
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-mhe hides /usr/share/emacs/31.0.50/lisp/org/ol-mhe
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-rmail hides /usr/share/emacs/31.0.50/lisp/org/ol-rmail
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol-w3m hides /usr/share/emacs/31.0.50/lisp/org/ol-w3m
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ol hides /usr/share/emacs/31.0.50/lisp/org/ol
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-agenda hides /usr/share/emacs/31.0.50/lisp/org/org-agenda
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-archive hides /usr/share/emacs/31.0.50/lisp/org/org-archive
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-attach-git hides /usr/share/emacs/31.0.50/lisp/org/org-attach-git
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-attach hides /usr/share/emacs/31.0.50/lisp/org/org-attach
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-capture hides /usr/share/emacs/31.0.50/lisp/org/org-capture
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-clock hides /usr/share/emacs/31.0.50/lisp/org/org-clock
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-colview hides /usr/share/emacs/31.0.50/lisp/org/org-colview
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-compat hides /usr/share/emacs/31.0.50/lisp/org/org-compat
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-crypt hides /usr/share/emacs/31.0.50/lisp/org/org-crypt
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-ctags hides /usr/share/emacs/31.0.50/lisp/org/org-ctags
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-cycle hides /usr/share/emacs/31.0.50/lisp/org/org-cycle
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-datetree hides /usr/share/emacs/31.0.50/lisp/org/org-datetree
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-duration hides /usr/share/emacs/31.0.50/lisp/org/org-duration
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-element-ast hides /usr/share/emacs/31.0.50/lisp/org/org-element-ast
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-element hides /usr/share/emacs/31.0.50/lisp/org/org-element
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-entities hides /usr/share/emacs/31.0.50/lisp/org/org-entities
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-faces hides /usr/share/emacs/31.0.50/lisp/org/org-faces
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-feed hides /usr/share/emacs/31.0.50/lisp/org/org-feed
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-fold-core hides /usr/share/emacs/31.0.50/lisp/org/org-fold-core
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-fold hides /usr/share/emacs/31.0.50/lisp/org/org-fold
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-footnote hides /usr/share/emacs/31.0.50/lisp/org/org-footnote
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-goto hides /usr/share/emacs/31.0.50/lisp/org/org-goto
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-habit hides /usr/share/emacs/31.0.50/lisp/org/org-habit
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-id hides /usr/share/emacs/31.0.50/lisp/org/org-id
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-indent hides /usr/share/emacs/31.0.50/lisp/org/org-indent
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-inlinetask hides /usr/share/emacs/31.0.50/lisp/org/org-inlinetask
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-keys hides /usr/share/emacs/31.0.50/lisp/org/org-keys
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-lint hides /usr/share/emacs/31.0.50/lisp/org/org-lint
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-list hides /usr/share/emacs/31.0.50/lisp/org/org-list
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-macro hides /usr/share/emacs/31.0.50/lisp/org/org-macro
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-macs hides /usr/share/emacs/31.0.50/lisp/org/org-macs
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-mobile hides /usr/share/emacs/31.0.50/lisp/org/org-mobile
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-mouse hides /usr/share/emacs/31.0.50/lisp/org/org-mouse
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-num hides /usr/share/emacs/31.0.50/lisp/org/org-num
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-pcomplete hides /usr/share/emacs/31.0.50/lisp/org/org-pcomplete
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-persist hides /usr/share/emacs/31.0.50/lisp/org/org-persist
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-plot hides /usr/share/emacs/31.0.50/lisp/org/org-plot
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org hides /usr/share/emacs/31.0.50/lisp/org/org
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-protocol hides /usr/share/emacs/31.0.50/lisp/org/org-protocol
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-refile hides /usr/share/emacs/31.0.50/lisp/org/org-refile
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-src hides /usr/share/emacs/31.0.50/lisp/org/org-src
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-table hides /usr/share/emacs/31.0.50/lisp/org/org-table
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-tempo hides /usr/share/emacs/31.0.50/lisp/org/org-tempo
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-timer hides /usr/share/emacs/31.0.50/lisp/org/org-timer
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-version hides /usr/share/emacs/31.0.50/lisp/org/org-version
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-ascii hides /usr/share/emacs/31.0.50/lisp/org/ox-ascii
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-beamer hides /usr/share/emacs/31.0.50/lisp/org/ox-beamer
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-html hides /usr/share/emacs/31.0.50/lisp/org/ox-html
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-icalendar hides /usr/share/emacs/31.0.50/lisp/org/ox-icalendar
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-koma-letter hides /usr/share/emacs/31.0.50/lisp/org/ox-koma-letter
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-latex hides /usr/share/emacs/31.0.50/lisp/org/ox-latex
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-man hides /usr/share/emacs/31.0.50/lisp/org/ox-man
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-md hides /usr/share/emacs/31.0.50/lisp/org/ox-md
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-odt hides /usr/share/emacs/31.0.50/lisp/org/ox-odt
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-org hides /usr/share/emacs/31.0.50/lisp/org/ox-org
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-publish hides /usr/share/emacs/31.0.50/lisp/org/ox-publish
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox-texinfo hides /usr/share/emacs/31.0.50/lisp/org/ox-texinfo
/home/st/.config/emacs/.local/straight/build-31.0.50/org/ox hides /usr/share/emacs/31.0.50/lisp/org/ox
/home/st/.config/emacs/.local/straight/build-31.0.50/org/org-loaddefs hides /usr/share/emacs/31.0.50/lisp/org/org-loaddefs
/home/st/.config/emacs/.local/straight/build-31.0.50/soap-client/soap-client hides /usr/share/emacs/31.0.50/lisp/net/soap-client
/home/st/.config/emacs/.local/straight/build-31.0.50/soap-client/soap-inspect hides /usr/share/emacs/31.0.50/lisp/net/soap-inspect
/home/st/.config/emacs/.local/straight/build-31.0.50/compat/compat hides /usr/share/emacs/31.0.50/lisp/emacs-lisp/compat
/home/st/.config/emacs/.local/straight/build-31.0.50/seq/seq hides /usr/share/emacs/31.0.50/lisp/emacs-lisp/seq

Features:
(shadow mail-extr org-num conf-mode shortdoc tabify emacsbug
citar-org-roam citar-embark citar citar-file citar-cache citar-format
gptel-curl gptel-rewrite gptel-context gptel-transient
display-fill-column-indicator char-fold evil-multiedit iedit iedit-lib
evil-collection-leetcode leetcode evil-collection-hackernews hackernews
noaa dotassoc kv evil-collection-debbugs debbugs soap-client rng-xsd
xsd-regexp debbugs-compat pomm alert log4e gntp password-generator
lorem-ipsum zone-pgm-spoopy zone-nyan esxml zone-rainbow zone-matrix
snow flames-of-freedom fireplace klondike chess chess-engine chess-pgn
chess-database chess-display chess-var chess-random chess-module
chess-input chess-algebraic chess-fen chess-game chess-ply chess-pos
chess-message dunnet bubbles evil-collection-tetris tetris speed-type
evil-collection-snake snake gamegrid journalctl-mode array
neato-graph-bar evil-collection-daemons daemons
evil-collection-disk-usage disk-usage pulseaudio-control
evil-collection-trashed trashed helm-rage helm-utils helm-linux-disks
linux-disk helm-system-packages consult-mu-contacts-embark
consult-mu-contacts consult-mu-compose-embark consult-mu-compose
consult-mu-embark consult-mu pdf-occur evil-collection-tablist tablist
tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw cedet pdf-isearch pdf-misc
evil-collection-pdf pdf-history pdf-tools saveplace-pdf-view pdf-view
pdf-cache pdf-info pdf-util pdf-macs image-mode exif gnus-srvr
evil-collection-eww eww mm-url dall-e-shell elysium
evil-collection-gptel gptel gptel-org gptel-openai chatgpt-shell
chatgpt-shell-prompt-compose chatgpt-shell-perplexity
chatgpt-shell-openrouter chatgpt-shell-openai chatgpt-shell-ollama
chatgpt-shell-kagi chatgpt-shell-google chatgpt-shell-deepseek
chatgpt-shell-anthropic shell-maker goto-addr ielm evil-collection-mpc
mpc vtable helm-emms helm-adaptive somafm empv emms-mode-line-cycle
emms-playing-time emms-mode-line lyrics-fetcher emms-lyrics emms-browser
sort emms-playlist-sort emms-volume emms-volume-sndioctl
emms-volume-mixerctl emms-volume-pulse emms-volume-amixer
lyrics-fetcher-neteasecloud lyrics-fetcher-genius request network-stream
emms-player-mpd emms-url emms-playlist-mode emms-source-playlist
emms-source-file locate emms-player-simple emms-info-exiftool
emms-info-native emms-info-native-spc emms-info-native-mp3
emms-info-native-ogg emms-info-native-opus emms-info-native-flac
emms-info-native-vorbis bindat emms-last-played emms-score emms-cache
emms-info emms-later-do evil-collection-emms emms emms-compat
elfeed-tube-mpv mpv tq org-timer org-clock elfeed-tube elfeed-tube-utils
aio elfeed-org evil-collection-elfeed elfeed-show elfeed-search
elfeed-csv elfeed elfeed-curl elfeed-log elfeed-db elfeed-lib url-queue
xml-query mu4e-compat evil-collection-mu4e mu4e mu4e-org
mu4e-notification mu4e-main smtpmail mu4e-view mu4e-mime-parts
mu4e-headers mu4e-thread mu4e-actions mu4e-compose mu4e-draft spam
spam-stat gnus-uu yenc gnus-msg gnus-async nntp gnus-registry registry
gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group
gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7
nnoo gnus-spec gnus-win gnus-int gnus-range evil-collection-gnus gnus
nnheader range mu4e-search mu4e-lists mu4e-bookmarks mu4e-mark
mu4e-message flow-fill mu4e-contacts mu4e-update mu4e-folders
mu4e-context mu4e-query-items mu4e-server mu4e-modeline mu4e-vars
mu4e-helpers mu4e-window ido mu4e-obsolete em-rebind em-elecslash
em-alias em-term em-script em-ls em-hist em-glob em-extpipe em-cmpl
em-basic em-banner em-smart em-tramp eshell-did-you-mean eshell-atuin
esh-help evil-collection-man man em-unix eshell-z em-dirs
evil-collection-eshell em-prompt eshell esh-mode esh-var
evil-collection-eat eat esh-cmd esh-ext theme-magic esh-proc esh-opt
esh-io esh-arg ewal esh-module esh-module-loaddefs image-file
image-converter circadian solar cal-dst esh-util zone evil-visualstar
evil-textobj-tree-sitter evil-textobj-tree-sitter-thing-at-point
evil-textobj-tree-sitter-core tree-sitter-langs tree-sitter-langs-build
tree-sitter-hl ts-fold ts-fold-summary ts-fold-parsers ts-fold-util
tree-sitter tree-sitter-load tree-sitter-cli tsc tsc-dyn tsc-dyn-get
tsc-obsolete eglot-booster evil-collection-eglot eglot
external-completion jsonrpc seq-25 macrostep-c cmacexp
evil-collection-macrostep macrostep subword-mode-expansions cap-words
superword subword cc-mode-expansions smartparens-c cc-mode cc-fonts
cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine consult-gh-embark
embark-vc evil-collection-embark embark-org embark-consult embark ffap
evil-collection-git-timemachine git-timemachine emacsql-sqlite-builtin
sqlite hippie-exp detached-vterm aidermacs aidermacs-models
aidermacs-backends aidermacs-backend-vterm evil-collection-vterm vterm
evil-collection-term term ehelp vterm-module aidermacs-backend-comint
elisp-def ert yasnippet-capf doom-snippets doom-snippets-lib yasnippet
exwm-firefox-evil exwm-firefox-core exwm-evil exwm-evil-core
tramp-archive tramp-gvfs zeroconf helm-external helm-net helm-help
helm-posframe helm helm-global-bindings helm-easymenu helm-core
helm-source helm-multi-match helm-lib async parrot parrot-progress
parrot-rotate evil-collection-magit-repos magit-gptcommit llm-claude
llm-provider-utils llm-models llm-request-plz plz-event-source
plz-media-type llm code-review code-review-actions code-review-comment
code-review-section code-review-bitbucket code-review-faces shr
pixel-fill kinsoku url-file svg emojify evil-collection-apropos apropos
evil-collection-tar-mode tar-mode evil-collection-arc-mode arc-mode
archive-mode ht code-review-gitlab code-review-utils
evil-collection-forge forge-repos forge-tablist hl-line forge-topics
forge-commands forge-semi forge-bitbucket buck forge-gogs gogs
forge-gitea gtea forge-gitlab glab forge-github forge-forgejo
forge-notify forge-revnote forge-pullreq forge-issue forge-topic yaml
eieio-custom bug-reference forge-post forge-repo forge forge-core
forge-db code-review-parse-hunk code-review-github code-review-db
uuidgen calc-misc calc-ext calc calc-loaddefs calc-macs a
code-review-interfaces deferred ghub-graphql treepy gsexp ghub url-http
url-gw nsm url-auth gnutls closql eieio-base magit-bookmark
magit-autoloads evil-collection-magit magit-submodule magit-blame
magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch
magit-clone magit-remote magit-commit magit-sequence magit-notes
magit-worktree magit-tag magit-merge magit-branch magit-reset
magit-files magit-refs magit-status magit magit-repos magit-apply
magit-wip magit-log which-func magit-diff evil-collection-smerge-mode
smerge-mode magit-core magit-autorevert magit-margin magit-transient
cus-start cape-char evil-collection-evil-mc evil-mc
evil-mc-command-execute evil-mc-command-record evil-mc-cursor-make
evil-mc-region evil-mc-cursor-state evil-mc-undo evil-mc-vars
evil-mc-known-commands evil-mc-common dabbrev misearch multi-isearch
isearch-mb evil-anzu anzu toc-org org-eldoc evil-org iscroll cdlatex
evil-collection-reftex reftex-toc reftex-cite reftex-ref reftex-parse
reftex reftex-loaddefs reftex-vars texmathp org-indent hi-lock
consult-gh ox-gfm ox-md ox-odt rng-loc rng-uri rng-parse rng-match
rng-dt rng-util rng-pttrn nxml-parse nxml-ns nxml-enc xmltok nxml-util
ox-latex ox-icalendar org-agenda ox-html table ox-ascii ox-publish ox
evil-collection-markdown-mode markdown-mode edit-indirect hide-mode-line
elisp-demos evil-collection-indent info-colors evil-collection-helpful
helpful cc-langs cc-vars cc-defs trace cl-print info-look
evil-collection-elisp-refs elisp-refs evil-nerd-commenter
evil-nerd-commenter-operator evil-nerd-commenter-sdk
html-mode-expansions smartparens-html sgml-mode facemenu dom
evil-collection-help midnight hercules nerd-icons-corfu
evil-collection-view view tramp-cmds auto-sudoedit diff-hl-flydiff diff
face-remap consult-flycheck evil-collection-consult consult
evil-collection-bookmark bookmark vc-hg vc-svn diff-hl-dired diredfl
gnus-dired dirvish-yank dired-aux dirvish-subtree dired-x
dirvish-collapse dirvish-icons dirvish-widgets dirvish projectile
evil-collection-grep grep ibuffer-vc ibuf-ext evil-collection-ibuffer
ibuffer ibuffer-loaddefs mule-util evil-collection-vc-git vc-git
ebuild-mode skeleton jka-compr auto-minor-mode disp-table whitespace
flycheck-posframe tramp-cache time-stamp tramp-sh flycheck-cask
git-auto-commit-mode apheleia apheleia-rcs apheleia-dp
apheleia-formatters apheleia-utils apheleia-log
apheleia-formatter-context embrace expand-region text-mode-expansions
the-org-mode-expansions er-basic-expansions expand-region-core
expand-region-custom lispyville lispy delsel lispy-inline etags fileloop
evil-collection-xref xref evil-collection-edebug edebug
evil-collection-debug debug backtrace help-fns radix-tree lispy-tags
mode-local zoutline oc-csl citeproc citeproc-itemgetters parsebib
citeproc-cite citeproc-biblatex citeproc-bibtex ol-bibtex
citeproc-subbibs citeproc-sort citeproc-name citeproc-formatters
citeproc-proc citeproc-disamb citeproc-itemdata
citeproc-generic-elements citeproc-macro citeproc-choose citeproc-date
citeproc-number smartparens-rst smartparens-markdown rst
citeproc-context citeproc-prange citeproc-style citeproc-locale
citeproc-term citeproc-rt citeproc-lib citeproc-s queue bibtex
evil-collection-org evil-collection-org-roam org-roam-migrate
org-roam-log org-roam-mode org-roam-capture org-roam-id org-roam-node
org-roam-db org-roam-utils org-roam-compat org-roam org-capture
org-element org-persist avl-tree generator org-attach org-id org-refile
org-element-ast inline emacsql-sqlite emacsql emacsql-compiler
smartparens-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro
org-src evil-collection-sh-script sh-script smie treesit executable
ob-comint org-pcomplete org-list org-footnote org-faces org-entities
ob-emacs-lisp ob-core ob-eval org-cycle org-table ol org-fold
org-fold-core org-keys oc-biblatex oc org-loaddefs
evil-collection-calendar cal-menu calendar cal-loaddefs org-version
org-compat org-macs eros evil-collection-flymake flymake
evil-collection-compile compile highlight-quoted rainbow-delimiters
noutline outline vi-tilde-fringe highlight-numbers parent-mode
display-line-numbers hl-todo minuet plz breadcrumb project cape
evil-collection-elisp-mode elisp-mode recentf tree-widget saveplace
evil-collection-so-long so-long evil-collection-diff-hl diff-hl
evil-collection-log-view log-view evil-collection-vc-dir vc-dir ewoc vc
vc-dispatcher envrc inheritenv evil-collection-diff-mode diff-mode
track-changes git-commit evil-collection-log-edit log-edit message
sendmail yank-media puny evil-collection-dired dired dired-loaddefs
rfc822 mml mml-sec evil-collection-epa epa derived epg rfc6068
epg-config gnus-util text-property-search mm-decode mm-bodies mm-encode
mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr
mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log
magit-process evil-collection-with-editor with-editor magit-mode
transient benchmark magit-git magit-base evil-collection-magit-section
magit-section crm llama vimish-fold vertico-directory cursor-sensor
mb-depth vertico-repeat vertico-posframe posframe
evil-collection-which-key which-key savehist better-jumper
vertico-multiform vertico-mouse evil-collection-vertico vertico
orderless 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 corfu-history corfu-popupinfo evil-collection-corfu corfu
evil-goggles pulse color evil-easymotion avy key-chord evil-escape
evil-snipe restore-point evil-collection-beginend beginend evil-owl
beacon detached-init detached tramp trampver tramp-integration files-x
tramp-message tramp-compat shell pcomplete parse-time iso8601
format-spec tramp-loaddefs notifications comint-histories f s
evil-collection-comint comint ansi-osc repeat gcmh winner
smartparens-config smartparens-text smartparens loadhist ws-butler
undo-fu-session undo-fu flycheck-package package-lint
evil-collection-imenu imenu evil-collection-finder finder finder-inf
lisp-mnt evil-collection-package-menu package browse-url xdg 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 password-cache url-vars evil-collection-flycheck flycheck
ansi-color json map find-func yank-indent exwm-mff hydra lv autorevert
filenotify time-date cae-exwm-auto-persp persp-mode minions winum dash
dtrt-indent advice kkp term/xterm xterm modus-operandi-tinted-theme
modus-themes define-repeat-map persistent-scratch dbus xml
exwm-xsettings xcb-xsettings exwm-systemtray xcb-systemtray xcb-xembed
exwm-randr xcb-randr exwm exwm-input xcb-keysyms xcb-xkb exwm-manage
exwm-floating xcb-cursor xcb-render exwm-layout exwm-workspace exwm-core
xcb-ewmh xcb-icccm xcb xcb-xproto xcb-types xcb-debug eieio eieio-core
compat server cae-lib mu4e-config html2text smartparens-lua let-alist
ibuf-macs evil-collection-info evil-collection-custom cus-edit cus-load
wid-edit evil-collection annalist evil evil-integration evil-maps
evil-commands reveal evil-jumps evil-command-window evil-types
evil-search evil-macros evil-repeat evil-states evil-core evil-common
thingatpt rect evil-vars ring edmacro kmacro byte-opt doom-editor
doom-projects doom-ui doom-keybinds pp use-package-core general info
tex-site site-gentoo :system easy-mmode comp comp-cstr cl-extra
help-mode warnings icons comp-run bytecomp byte-compile comp-common rx
doom-start doom doom-lib cl-seq cl-macs cl-loaddefs cl-lib gv harfbuzz
jansson dynamic-modules pcase subr-x rmc iso-transl tooltip cconv eldoc
paren electric uniquify ediff-hook vc-hooks lisp-float-type mwheel
term/x-win x-win term/common-win x-dnd touch-screen 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 lcms2
dynamic-setting font-render-setting cairo x-toolkit xinput2 x multi-tty
move-toolbar make-network-process tty-child-frames native-compile mps
emacs)

Memory information:
((conses 24 0 0) (symbols 56 0 0) (strings 40 0 0) (string-bytes 1 0)
 (vectors 24 0) (vector-slots 8 0 0) (floats 24 0 0) (intervals 64 0 0)
 (buffers 1000 0))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76745; Package emacs. (Tue, 04 Mar 2025 19:38:01 GMT) Full text and rfc822 format available.

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: StrawberryTea <look <at> strawberrytea.xyz>, Juri Linkov <juri <at> linkov.net>
Cc: 76745 <at> debbugs.gnu.org
Subject: Re: bug#76745: 31.0.50;
 ?d action in save-some-buffers-action-alist to view diff does not work
Date: Tue, 04 Mar 2025 21:36:48 +0200
> From: StrawberryTea <look <at> strawberrytea.xyz>
> Date: Tue, 04 Mar 2025 13:47:39 -0500
> 
> 
> Hello. I have found that the fix from #75993 breaks the ?d action in
> save-some-buffers-action-alist. The reason is that since we are not
> entering view-mode after #75993, when we type ?q to quit the diff
> window, we are not calling exit-recursive-edit to return to the
> save-some-buffers queries.
> 
> So on one hand, we want to scroll through the diff easily to decide
> whether to save the buffer or not. But on the other hand, we want to
> navigate by the diff sections and copy hunks. To me, this is a model
> editing situation. The user should exit view mode to perform diff
> commands instead of disabling view-mode for diffs altogether like in
> #75993.
> 
> But anyway, I propose that we revert #75993.

Adding Juri to the discussion.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76745; Package emacs. (Wed, 05 Mar 2025 08:00:02 GMT) Full text and rfc822 format available.

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

From: Juri Linkov <juri <at> linkov.net>
To: StrawberryTea <look <at> strawberrytea.xyz>
Cc: 76745 <at> debbugs.gnu.org
Subject: Re: bug#76745: 31.0.50; ?d action in save-some-buffers-action-alist
 to view diff does not work
Date: Wed, 05 Mar 2025 09:58:10 +0200
> Hello. I have found that the fix from #75993 breaks the ?d action in
> save-some-buffers-action-alist. The reason is that since we are not
> entering view-mode after #75993, when we type ?q to quit the diff
> window, we are not calling exit-recursive-edit to return to the
> save-some-buffers queries.
>
> So on one hand, we want to scroll through the diff easily to decide
> whether to save the buffer or not. But on the other hand, we want to
> navigate by the diff sections and copy hunks. To me, this is a model
> editing situation. The user should exit view mode to perform diff
> commands instead of disabling view-mode for diffs altogether like in
> #75993.
>
> But anyway, I propose that we revert #75993.

Reverting will again steal single-letter keys from diff-mode to view-mode.

Why not change only 'save-some-buffers-action-alist' and replace

  (view-buffer diffbuf (lambda (_) (exit-recursive-edit)))

with

  (with-current-buffer diffbuf (view-mode-enter nil (lambda (_) (exit-recursive-edit))))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76745; Package emacs. (Thu, 13 Mar 2025 01:59:03 GMT) Full text and rfc822 format available.

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

From: StrawberryTea <look <at> strawberrytea.xyz>
To: Juri Linkov <juri <at> linkov.net>
Cc: 76745 <at> debbugs.gnu.org
Subject: Re: bug#76745: 31.0.50; ?d action in save-some-buffers-action-alist
 to view diff does not work
Date: Wed, 12 Mar 2025 21:58:33 -0400
Juri Linkov <juri <at> linkov.net> writes:
Well, I agree that for save-some-buffers we should enter view-mode. But
I don't see why view-mode should be disabled for diff-mode in general.
Diff-mode is a major mode that is used for viewing diffs, it is not
specifically for save-some-buffers.

The key issue here is that diff-mode serves multiple purposes:

1. Sometimes diff buffers are purely for viewing (like in
   save-some-buffers), where the primary user need is quick navigation
   and an easy way to exit

2. Other times, users need to actively work with diff content -
   navigating by sections, copying hunks, applying patches, etc.

Disabling view-mode entirely for diff-mode (as in #75993) prioritizes
the second use case at the expense of the first. But I believe a better
approach is to maintain both capabilities and let users or calling
functions decide which mode is appropriate for their context.

For viewing-only situations like save-some-buffers, view-mode provides
valuable functionality - particularly the quick navigation keys and the
critical ability to exit with 'q' which triggers exit-recursive-edit in
this context.

Rather than disabling view-mode completely for diff-mode, we should
investigate why view-mode is being activated when you do not intend it
to be. If there are specific situations where view-mode interferes with
diff-mode functionality, we should consider either disabling view-mode
in those specific contexts or exiting view-mode in those situations,
rather than making a global change that affects all diff-mode usage.
>> Hello. I have found that the fix from #75993 breaks the ?d action in
>> save-some-buffers-action-alist. The reason is that since we are not
>> entering view-mode after #75993, when we type ?q to quit the diff
>> window, we are not calling exit-recursive-edit to return to the
>> save-some-buffers queries.
>>
>> So on one hand, we want to scroll through the diff easily to decide
>> whether to save the buffer or not. But on the other hand, we want to
>> navigate by the diff sections and copy hunks. To me, this is a model
>> editing situation. The user should exit view mode to perform diff
>> commands instead of disabling view-mode for diffs altogether like in
>> #75993.
>>
>> But anyway, I propose that we revert #75993.
>
> Reverting will again steal single-letter keys from diff-mode to view-mode.
>
> Why not change only 'save-some-buffers-action-alist' and replace
>
>   (view-buffer diffbuf (lambda (_) (exit-recursive-edit)))
>
> with
>
>   (with-current-buffer diffbuf (view-mode-enter nil (lambda (_) (exit-recursive-edit))))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76745; Package emacs. (Thu, 13 Mar 2025 18:08:03 GMT) Full text and rfc822 format available.

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

From: Juri Linkov <juri <at> linkov.net>
To: StrawberryTea <look <at> strawberrytea.xyz>
Cc: 76745 <at> debbugs.gnu.org
Subject: Re: bug#76745: 31.0.50; ?d action in save-some-buffers-action-alist
 to view diff does not work
Date: Thu, 13 Mar 2025 19:53:30 +0200
> Well, I agree that for save-some-buffers we should enter view-mode. But
> I don't see why view-mode should be disabled for diff-mode in general.

Because view-mode overrides diff-mode single letter keybindings:

  "n" #'diff-hunk-next
  "N" #'diff-file-next
  "p" #'diff-hunk-prev
  "P" #'diff-file-prev
  "k" #'diff-hunk-kill
  "K" #'diff-file-kill
  "}" #'diff-file-next
  "{" #'diff-file-prev
  "RET" #'diff-goto-source
  "W" #'widen
  "w" #'diff-kill-ring-save
  "o" #'diff-goto-source
  "A" #'diff-ediff-patch
  "r" #'diff-restrict-view
  "R" #'diff-reverse-direction

> The key issue here is that diff-mode serves multiple purposes:
>
> 1. Sometimes diff buffers are purely for viewing (like in
>    save-some-buffers), where the primary user need is quick navigation
>    and an easy way to exit

I think save-some-buffers is a special case that can be handled specially
in save-some-buffers to enable view-mode explicitly.

> 2. Other times, users need to actively work with diff content -
>    navigating by sections, copying hunks, applying patches, etc.

Such actions as navigating by sections and copying hunks
often needed also while viewing diffs.

> Disabling view-mode entirely for diff-mode (as in #75993) prioritizes
> the second use case at the expense of the first. But I believe a better
> approach is to maintain both capabilities and let users or calling
> functions decide which mode is appropriate for their context.

Users can decide whether to enable view-mode by e.g.

  (add-hook 'diff-mode 'view-mode-enter)

And the caller in 'save-some-buffers' can enable it too.

> For viewing-only situations like save-some-buffers, view-mode provides
> valuable functionality - particularly the quick navigation keys and the
> critical ability to exit with 'q' which triggers exit-recursive-edit in
> this context.

The required functionality from view-mode in this case is only 'q'
to trigger exit-recursive-edit.

> Rather than disabling view-mode completely for diff-mode, we should
> investigate why view-mode is being activated when you do not intend it
> to be. If there are specific situations where view-mode interferes with
> diff-mode functionality, we should consider either disabling view-mode
> in those specific contexts or exiting view-mode in those situations,
> rather than making a global change that affects all diff-mode usage.

view-mode does more harm than good to diff-mode.  So I think
it should be opt-in, not opt-out.

Even with 'view-read-only' customized to t, no one asked to enable view-mode
for the most frequent use case of showing diffs from vc-diff where
view-mode was never activated, because it's activated only for files.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76745; Package emacs. (Sun, 16 Mar 2025 00:15:05 GMT) Full text and rfc822 format available.

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

From: StrawberryTea <look <at> strawberrytea.xyz>
To: Juri Linkov <juri <at> linkov.net>
Cc: 76745 <at> debbugs.gnu.org
Subject: Re: bug#76745: 31.0.50; ?d action in save-some-buffers-action-alist
 to view diff does not work
Date: Sat, 15 Mar 2025 20:14:08 -0400
Juri Linkov <juri <at> linkov.net> writes:

Well, let's do this then. Patch something in so that save-some-buffers
"d" key lets us do "q" to exit the diff buffer. I still disagree because
view-mode is supported by Evil etc but if we do like a local-set-key or
something, it will probably break other packages that don't handle this
very special case of save-some-buffers.

>> Well, I agree that for save-some-buffers we should enter view-mode. But
>> I don't see why view-mode should be disabled for diff-mode in general.
>
> Because view-mode overrides diff-mode single letter keybindings:
>
>   "n" #'diff-hunk-next
>   "N" #'diff-file-next
>   "p" #'diff-hunk-prev
>   "P" #'diff-file-prev
>   "k" #'diff-hunk-kill
>   "K" #'diff-file-kill
>   "}" #'diff-file-next
>   "{" #'diff-file-prev
>   "RET" #'diff-goto-source
>   "W" #'widen
>   "w" #'diff-kill-ring-save
>   "o" #'diff-goto-source
>   "A" #'diff-ediff-patch
>   "r" #'diff-restrict-view
>   "R" #'diff-reverse-direction
>
>> The key issue here is that diff-mode serves multiple purposes:
>>
>> 1. Sometimes diff buffers are purely for viewing (like in
>>    save-some-buffers), where the primary user need is quick navigation
>>    and an easy way to exit
>
> I think save-some-buffers is a special case that can be handled specially
> in save-some-buffers to enable view-mode explicitly.
>
>> 2. Other times, users need to actively work with diff content -
>>    navigating by sections, copying hunks, applying patches, etc.
>
> Such actions as navigating by sections and copying hunks
> often needed also while viewing diffs.
>
>> Disabling view-mode entirely for diff-mode (as in #75993) prioritizes
>> the second use case at the expense of the first. But I believe a better
>> approach is to maintain both capabilities and let users or calling
>> functions decide which mode is appropriate for their context.
>
> Users can decide whether to enable view-mode by e.g.
>
>   (add-hook 'diff-mode 'view-mode-enter)
>
> And the caller in 'save-some-buffers' can enable it too.
>
>> For viewing-only situations like save-some-buffers, view-mode provides
>> valuable functionality - particularly the quick navigation keys and the
>> critical ability to exit with 'q' which triggers exit-recursive-edit in
>> this context.
>
> The required functionality from view-mode in this case is only 'q'
> to trigger exit-recursive-edit.
>
>> Rather than disabling view-mode completely for diff-mode, we should
>> investigate why view-mode is being activated when you do not intend it
>> to be. If there are specific situations where view-mode interferes with
>> diff-mode functionality, we should consider either disabling view-mode
>> in those specific contexts or exiting view-mode in those situations,
>> rather than making a global change that affects all diff-mode usage.
>
> view-mode does more harm than good to diff-mode.  So I think
> it should be opt-in, not opt-out.
>
> Even with 'view-read-only' customized to t, no one asked to enable view-mode
> for the most frequent use case of showing diffs from vc-diff where
> view-mode was never activated, because it's activated only for files.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#76745; Package emacs. (Wed, 19 Mar 2025 19:12:02 GMT) Full text and rfc822 format available.

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

From: Juri Linkov <juri <at> linkov.net>
To: StrawberryTea <look <at> strawberrytea.xyz>
Cc: 76745 <at> debbugs.gnu.org
Subject: Re: bug#76745: 31.0.50; ?d action in save-some-buffers-action-alist
 to view diff does not work
Date: Wed, 19 Mar 2025 21:09:24 +0200
close 76745 31.0.50
thanks

> Well, let's do this then. Patch something in so that save-some-buffers
> "d" key lets us do "q" to exit the diff buffer. I still disagree because
> view-mode is supported by Evil etc but if we do like a local-set-key or
> something, it will probably break other packages that don't handle this
> very special case of save-some-buffers.

After more analysis I found that this problem is not specific to diff-mode.
For example, hexl-mode also has

  (put 'hexl-mode 'mode-class 'special)

Then in a file with 'hexl-mode' after typing 'C-x s C-r q' nothing happens,
no exit from recursive-edit.  Because 'C-r' in 'save-some-buffers-action-alist'
relies on the same unreliable trick:

  (view-buffer buf (lambda (_) (exit-recursive-edit)))

So now both cases are fixed in 'save-some-buffers-action-alist'.




bug marked as fixed in version 31.0.50, send any further explanations to 76745 <at> debbugs.gnu.org and StrawberryTea <look <at> strawberrytea.xyz> Request was from Juri Linkov <juri <at> linkov.net> to control <at> debbugs.gnu.org. (Wed, 19 Mar 2025 19:12:03 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Thu, 17 Apr 2025 11:24:10 GMT) Full text and rfc822 format available.

This bug report was last modified 63 days ago.

Previous Next


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