Package: emacs;
Reported by: Stefan Monnier <monnier <at> iro.umontreal.ca>
Date: Mon, 20 May 2024 15:44:02 UTC
Severity: normal
Found in version 30.0.50
Done: Stefan Monnier <monnier <at> iro.umontreal.ca>
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 71080 in the body.
You can then email your comments to 71080 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
monnier <at> iro.umontreal.ca, bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Mon, 20 May 2024 15:44:02 GMT) Full text and rfc822 format available.Stefan Monnier <monnier <at> iro.umontreal.ca>
:monnier <at> iro.umontreal.ca, bug-gnu-emacs <at> gnu.org
.
(Mon, 20 May 2024 15:44:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: bug-gnu-emacs <at> gnu.org Subject: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Mon, 20 May 2024 11:43:31 -0400
Package: Emacs Version: 30.0.50 Create a file `~/tmp/foo.txt` with the following content: λ # Local Variables: # coding: iso-2022-7bit # End: Then emacs -Q ~/tmp/foo.txt C-x C-w foo.gpg RET # To save the file into an encrypted `foo.gpg`. TAB TAB RET # To select symmetric encryption. .. type the password you'd like to use ... M-x revert-buffer RET and then you should see that he `λ` turned into its UTF-8 sequence `\316\273`. The same happens if you encrypt with public keys and if you use any other encoding that's different from UTF-8. AFAICT, the problem is partly due to (find-coding-systems-region (point-min) (point-max)) returning a list which includes `no-conversion` because in the end the buffer is saved with "no conversion" (i.e. it uses Emacs's internal encoding). Another part of the problem is that `find-auto-coding` returns `no-conversion` for `.gpg` files because those files are binary. IOW it can be considered as the result of "no conversion" being ambiguous, meaning either "binary" or "Emacs's internal encoding" depending on the circumstances. But it's also due to the confusion between the encoding to use before encryption (resp. after decryption) and the encoding to use after encryption (resp. before decryption). I don't understand enough of how the "no conversion" ambiguity is expected to be resolved, nor how the different layers of encoding are supposed to be handled in file-name-handlers to dig much deeper. Stefan In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.16.0) of 2024-04-23 built on pastel Repository revision: c736206045227123fd2dec4c8028f013f78090c5 Repository branch: work Windowing system distributor 'The X.Org Foundation', version 11.0.12101007 System Description: Debian GNU/Linux 12 (bookworm) Configured using: 'configure -C --enable-checking --enable-check-lisp-object-type --with-modules --with-cairo --with-tiff=ifavailable 'CFLAGS=-Wall -g3 -Og -Wno-pointer-sign' --without-native-compilation PKG_CONFIG_PATH=/home/monnier/lib/pkgconfig' Configured features: CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG LIBSELINUX LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: fr_CH.UTF-8 locale-coding-system: utf-8-unix Major mode: Group Minor modes in effect: csv-field-index-mode: t gnus-undo-mode: t server-mode: t electric-pair-mode: t global-reveal-mode: t reveal-mode: t auto-insert-mode: t savehist-mode: t minibuffer-electric-default-mode: t type-break-mode: t global-compact-docstrings-mode: t global-corfu-mode: t corfu-mode: t url-handler-mode: t global-eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t global-prettify-symbols-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t minibuffer-regexp-mode: t global-sanity-check-change-functions-mode: t buffer-read-only: 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/monnier/src/emacs/nongnu/packages/jade-mode/jade-mode hides /home/monnier/src/emacs/nongnu/packages/stylus-mode/jade-mode /home/monnier/src/emacs/nongnu/packages/jade-mode/sws-mode hides /home/monnier/src/emacs/nongnu/packages/stylus-mode/sws-mode /home/monnier/src/emacs/nongnu/packages/jade-mode/stylus-mode hides /home/monnier/src/emacs/nongnu/packages/stylus-mode/stylus-mode /home/monnier/src/emacs/nongnu/packages/paredit/test hides /home/monnier/src/emacs/elpa/packages/easy-kill/test /home/monnier/src/emacs/elpa/packages/embark-consult/embark-consult hides /home/monnier/src/emacs/elpa/packages/embark/embark-consult /home/monnier/src/emacs/elpa/packages/embark-consult/embark-org hides /home/monnier/src/emacs/elpa/packages/embark/embark-org /home/monnier/src/emacs/elpa/packages/embark-consult/embark hides /home/monnier/src/emacs/elpa/packages/embark/embark /home/monnier/src/emacs/elpa/packages/embark-consult/avy-embark-collect hides /home/monnier/src/emacs/elpa/packages/embark/avy-embark-collect /home/monnier/src/emacs/elpa/packages/ada-mode/prj hides /home/monnier/src/emacs/elpa/packages/gpr-query/prj /home/monnier/src/emacs/nongnu/packages/forth-mode/build hides /home/monnier/src/emacs/elpa/packages/lentic/build /home/monnier/src/emacs/elpa/packages/ef-themes/theme-loaddefs hides /home/monnier/src/emacs/elpa/packages/modus-themes/theme-loaddefs /home/monnier/src/emacs/nongnu/packages/paredit/test hides /home/monnier/src/emacs/elpa/packages/num3-mode/test /home/monnier/src/emacs/nongnu/packages/org-contrib/lisp/ob-asymptote hides /home/monnier/src/emacs/elpa/packages/ob-asymptote/ob-asymptote /home/monnier/src/emacs/elpa/packages/realgud-lldb/cask-install hides /home/monnier/src/emacs/elpa/packages/realgud-trepan-ni/cask-install /home/monnier/src/emacs/elpa/packages/realgud-lldb/cask-install hides /home/monnier/src/emacs/elpa/packages/realgud/cask-install /home/monnier/src/emacs/elpa/packages/realgud-lldb/cask-install hides /home/monnier/src/emacs/elpa/packages/loc-changes/cask-install /home/monnier/src/emacs/elpa/packages/ef-themes/theme-loaddefs hides /home/monnier/src/emacs/elpa/packages/standard-themes/theme-loaddefs /home/monnier/src/emacs/elpa/packages/elsa/Elsafile hides /home/monnier/src/emacs/elpa/packages/trinary/Elsafile /home/monnier/src/emacs/elpa/packages/url-http-oauth-demo/url-http-oauth-demo hides /home/monnier/src/emacs/elpa/packages/url-http-oauth/url-http-oauth-demo /home/monnier/src/emacs/nongnu/packages/vm/lisp/vcard hides /home/monnier/src/emacs/elpa/packages/vcard/vcard /home/monnier/src/emacs/elpa/packages/hydra/hydra-test hides /home/monnier/src/emacs/elpa/packages/lv/hydra-test /home/monnier/src/emacs/elpa/packages/hydra/hydra hides /home/monnier/src/emacs/elpa/packages/lv/hydra /home/monnier/src/emacs/elpa/packages/hydra/lv hides /home/monnier/src/emacs/elpa/packages/lv/lv /home/monnier/src/emacs/elpa/packages/hydra/hydra-ox hides /home/monnier/src/emacs/elpa/packages/lv/hydra-ox /home/monnier/src/emacs/elpa/packages/hydra/hydra-examples hides /home/monnier/src/emacs/elpa/packages/lv/hydra-examples /home/monnier/src/emacs/elpa/packages/ef-themes/theme-loaddefs hides /home/monnier/src/emacs/work/lisp/theme-loaddefs /home/monnier/src/emacs/elpa/packages/idlwave/idlw-help hides /home/monnier/src/emacs/work/lisp/progmodes/idlw-help /home/monnier/src/emacs/elpa/packages/idlwave/idlw-complete-structtag hides /home/monnier/src/emacs/work/lisp/progmodes/idlw-complete-structtag /home/monnier/src/emacs/elpa/packages/idlwave/idlw-toolbar hides /home/monnier/src/emacs/work/lisp/progmodes/idlw-toolbar /home/monnier/src/emacs/elpa/packages/idlwave/idlwave hides /home/monnier/src/emacs/work/lisp/progmodes/idlwave /home/monnier/src/emacs/elpa/packages/csharp-mode/csharp-mode hides /home/monnier/src/emacs/work/lisp/progmodes/csharp-mode /home/monnier/src/emacs/nongnu/packages/lua-mode/lua-mode hides /home/monnier/src/emacs/work/lisp/progmodes/lua-mode /home/monnier/src/emacs/elpa/packages/idlwave/idlw-shell hides /home/monnier/src/emacs/work/lisp/progmodes/idlw-shell /home/monnier/src/emacs/elpa/packages/org/lisp/org-src hides /home/monnier/src/emacs/work/lisp/org/org-src /home/monnier/src/emacs/elpa/packages/org/lisp/oc hides /home/monnier/src/emacs/work/lisp/org/oc /home/monnier/src/emacs/elpa/packages/org/lisp/ob-screen hides /home/monnier/src/emacs/work/lisp/org/ob-screen /home/monnier/src/emacs/elpa/packages/org/lisp/org-loaddefs hides /home/monnier/src/emacs/work/lisp/org/org-loaddefs /home/monnier/src/emacs/elpa/packages/org/lisp/org-agenda hides /home/monnier/src/emacs/work/lisp/org/org-agenda /home/monnier/src/emacs/elpa/packages/org/lisp/ob-dot hides /home/monnier/src/emacs/work/lisp/org/ob-dot /home/monnier/src/emacs/elpa/packages/org/lisp/ob-plantuml hides /home/monnier/src/emacs/work/lisp/org/ob-plantuml /home/monnier/src/emacs/elpa/packages/org/lisp/org-inlinetask hides /home/monnier/src/emacs/work/lisp/org/org-inlinetask /home/monnier/src/emacs/elpa/packages/org/lisp/oc-natbib hides /home/monnier/src/emacs/work/lisp/org/oc-natbib /home/monnier/src/emacs/elpa/packages/org/lisp/org-attach-git hides /home/monnier/src/emacs/work/lisp/org/org-attach-git /home/monnier/src/emacs/elpa/packages/org/lisp/ol-docview hides /home/monnier/src/emacs/work/lisp/org/ol-docview /home/monnier/src/emacs/elpa/packages/org/lisp/ob-exp hides /home/monnier/src/emacs/work/lisp/org/ob-exp /home/monnier/src/emacs/elpa/packages/org/lisp/ol-mhe hides /home/monnier/src/emacs/work/lisp/org/ol-mhe /home/monnier/src/emacs/elpa/packages/org/lisp/ob-awk hides /home/monnier/src/emacs/work/lisp/org/ob-awk /home/monnier/src/emacs/elpa/packages/org/lisp/org-fold-core hides /home/monnier/src/emacs/work/lisp/org/org-fold-core /home/monnier/src/emacs/elpa/packages/org/lisp/ol-doi hides /home/monnier/src/emacs/work/lisp/org/ol-doi /home/monnier/src/emacs/elpa/packages/org/lisp/ob-ref hides /home/monnier/src/emacs/work/lisp/org/ob-ref /home/monnier/src/emacs/elpa/packages/org/lisp/ob-calc hides /home/monnier/src/emacs/work/lisp/org/ob-calc /home/monnier/src/emacs/elpa/packages/org/lisp/ob-js hides /home/monnier/src/emacs/work/lisp/org/ob-js /home/monnier/src/emacs/elpa/packages/org/lisp/org-colview hides /home/monnier/src/emacs/work/lisp/org/org-colview /home/monnier/src/emacs/elpa/packages/org/lisp/ob-julia hides /home/monnier/src/emacs/work/lisp/org/ob-julia /home/monnier/src/emacs/elpa/packages/org/lisp/ob-ruby hides /home/monnier/src/emacs/work/lisp/org/ob-ruby /home/monnier/src/emacs/elpa/packages/org/lisp/ob-forth hides /home/monnier/src/emacs/work/lisp/org/ob-forth /home/monnier/src/emacs/elpa/packages/org/lisp/ob-lua hides /home/monnier/src/emacs/work/lisp/org/ob-lua /home/monnier/src/emacs/elpa/packages/org/lisp/ob-lob hides /home/monnier/src/emacs/work/lisp/org/ob-lob /home/monnier/src/emacs/elpa/packages/org/lisp/org-compat hides /home/monnier/src/emacs/work/lisp/org/org-compat /home/monnier/src/emacs/elpa/packages/org/lisp/ob-matlab hides /home/monnier/src/emacs/work/lisp/org/ob-matlab /home/monnier/src/emacs/elpa/packages/org/lisp/ob-scheme hides /home/monnier/src/emacs/work/lisp/org/ob-scheme /home/monnier/src/emacs/elpa/packages/org/lisp/org-table hides /home/monnier/src/emacs/work/lisp/org/org-table /home/monnier/src/emacs/elpa/packages/org/lisp/ob-haskell hides /home/monnier/src/emacs/work/lisp/org/ob-haskell /home/monnier/src/emacs/elpa/packages/org/lisp/ob-octave hides /home/monnier/src/emacs/work/lisp/org/ob-octave /home/monnier/src/emacs/elpa/packages/org/lisp/ob-processing hides /home/monnier/src/emacs/work/lisp/org/ob-processing /home/monnier/src/emacs/elpa/packages/org/lisp/ol-bibtex hides /home/monnier/src/emacs/work/lisp/org/ol-bibtex /home/monnier/src/emacs/elpa/packages/org/lisp/ob-ocaml hides /home/monnier/src/emacs/work/lisp/org/ob-ocaml /home/monnier/src/emacs/elpa/packages/org/lisp/ol-bbdb hides /home/monnier/src/emacs/work/lisp/org/ol-bbdb /home/monnier/src/emacs/elpa/packages/org/lisp/org-plot hides /home/monnier/src/emacs/work/lisp/org/org-plot /home/monnier/src/emacs/elpa/packages/org/lisp/ob-core hides /home/monnier/src/emacs/work/lisp/org/ob-core /home/monnier/src/emacs/elpa/packages/org/lisp/org-refile hides /home/monnier/src/emacs/work/lisp/org/org-refile /home/monnier/src/emacs/elpa/packages/org/lisp/org-lint hides /home/monnier/src/emacs/work/lisp/org/org-lint /home/monnier/src/emacs/elpa/packages/org/lisp/org-footnote hides /home/monnier/src/emacs/work/lisp/org/org-footnote /home/monnier/src/emacs/elpa/packages/org/lisp/org hides /home/monnier/src/emacs/work/lisp/org/org /home/monnier/src/emacs/elpa/packages/org/lisp/ol-w3m hides /home/monnier/src/emacs/work/lisp/org/ol-w3m /home/monnier/src/emacs/elpa/packages/org/lisp/ol-info hides /home/monnier/src/emacs/work/lisp/org/ol-info /home/monnier/src/emacs/elpa/packages/org/lisp/org-num hides /home/monnier/src/emacs/work/lisp/org/org-num /home/monnier/src/emacs/elpa/packages/org/lisp/org-cycle hides /home/monnier/src/emacs/work/lisp/org/org-cycle /home/monnier/src/emacs/elpa/packages/org/lisp/ob-tangle hides /home/monnier/src/emacs/work/lisp/org/ob-tangle /home/monnier/src/emacs/elpa/packages/org/lisp/ob-clojure hides /home/monnier/src/emacs/work/lisp/org/ob-clojure /home/monnier/src/emacs/elpa/packages/org/lisp/org-attach hides /home/monnier/src/emacs/work/lisp/org/org-attach /home/monnier/src/emacs/elpa/packages/org/lisp/org-element hides /home/monnier/src/emacs/work/lisp/org/org-element /home/monnier/src/emacs/elpa/packages/org/lisp/ob-comint hides /home/monnier/src/emacs/work/lisp/org/ob-comint /home/monnier/src/emacs/elpa/packages/org/lisp/ox-latex hides /home/monnier/src/emacs/work/lisp/org/ox-latex /home/monnier/src/emacs/elpa/packages/org/lisp/org-faces hides /home/monnier/src/emacs/work/lisp/org/org-faces /home/monnier/src/emacs/elpa/packages/org/lisp/ox-html hides /home/monnier/src/emacs/work/lisp/org/ox-html /home/monnier/src/emacs/elpa/packages/org/lisp/ob-lisp hides /home/monnier/src/emacs/work/lisp/org/ob-lisp /home/monnier/src/emacs/elpa/packages/org/lisp/org-persist hides /home/monnier/src/emacs/work/lisp/org/org-persist /home/monnier/src/emacs/elpa/packages/org/lisp/oc-basic hides /home/monnier/src/emacs/work/lisp/org/oc-basic /home/monnier/src/emacs/elpa/packages/org/lisp/ob-maxima hides /home/monnier/src/emacs/work/lisp/org/ob-maxima /home/monnier/src/emacs/elpa/packages/org/lisp/ob-gnuplot hides /home/monnier/src/emacs/work/lisp/org/ob-gnuplot /home/monnier/src/emacs/elpa/packages/org/lisp/org-archive hides /home/monnier/src/emacs/work/lisp/org/org-archive /home/monnier/src/emacs/elpa/packages/org/lisp/org-protocol hides /home/monnier/src/emacs/work/lisp/org/org-protocol /home/monnier/src/emacs/elpa/packages/org/lisp/ol-gnus hides /home/monnier/src/emacs/work/lisp/org/ol-gnus /home/monnier/src/emacs/elpa/packages/org/lisp/org-indent hides /home/monnier/src/emacs/work/lisp/org/org-indent /home/monnier/src/emacs/elpa/packages/org/lisp/ob-java hides /home/monnier/src/emacs/work/lisp/org/ob-java /home/monnier/src/emacs/elpa/packages/org/lisp/ob-shell hides /home/monnier/src/emacs/work/lisp/org/ob-shell /home/monnier/src/emacs/elpa/packages/org/lisp/org-tempo hides /home/monnier/src/emacs/work/lisp/org/org-tempo /home/monnier/src/emacs/elpa/packages/org/lisp/oc-bibtex hides /home/monnier/src/emacs/work/lisp/org/oc-bibtex /home/monnier/src/emacs/elpa/packages/org/lisp/ob hides /home/monnier/src/emacs/work/lisp/org/ob /home/monnier/src/emacs/elpa/packages/org/lisp/ox-texinfo hides /home/monnier/src/emacs/work/lisp/org/ox-texinfo /home/monnier/src/emacs/elpa/packages/org/lisp/org-ctags hides /home/monnier/src/emacs/work/lisp/org/org-ctags /home/monnier/src/emacs/elpa/packages/org/lisp/ox-beamer hides /home/monnier/src/emacs/work/lisp/org/ox-beamer /home/monnier/src/emacs/elpa/packages/org/lisp/ob-perl hides /home/monnier/src/emacs/work/lisp/org/ob-perl /home/monnier/src/emacs/elpa/packages/org/lisp/ox-man hides /home/monnier/src/emacs/work/lisp/org/ox-man /home/monnier/src/emacs/elpa/packages/org/lisp/org-version hides /home/monnier/src/emacs/work/lisp/org/org-version /home/monnier/src/emacs/elpa/packages/org/lisp/ob-R hides /home/monnier/src/emacs/work/lisp/org/ob-R /home/monnier/src/emacs/elpa/packages/org/lisp/ox-icalendar hides /home/monnier/src/emacs/work/lisp/org/ox-icalendar /home/monnier/src/emacs/elpa/packages/org/lisp/ob-python hides /home/monnier/src/emacs/work/lisp/org/ob-python /home/monnier/src/emacs/elpa/packages/org/lisp/ob-sass hides /home/monnier/src/emacs/work/lisp/org/ob-sass /home/monnier/src/emacs/elpa/packages/org/lisp/oc-csl hides /home/monnier/src/emacs/work/lisp/org/oc-csl /home/monnier/src/emacs/elpa/packages/org/lisp/org-feed hides /home/monnier/src/emacs/work/lisp/org/org-feed /home/monnier/src/emacs/elpa/packages/org/lisp/ox-ascii hides /home/monnier/src/emacs/work/lisp/org/ox-ascii /home/monnier/src/emacs/elpa/packages/org/lisp/ob-eshell hides /home/monnier/src/emacs/work/lisp/org/ob-eshell /home/monnier/src/emacs/elpa/packages/org/lisp/org-id hides /home/monnier/src/emacs/work/lisp/org/org-id /home/monnier/src/emacs/elpa/packages/org/lisp/ol-man hides /home/monnier/src/emacs/work/lisp/org/ol-man /home/monnier/src/emacs/elpa/packages/org/lisp/ox-org hides /home/monnier/src/emacs/work/lisp/org/ox-org /home/monnier/src/emacs/elpa/packages/org/lisp/ob-ditaa hides /home/monnier/src/emacs/work/lisp/org/ob-ditaa /home/monnier/src/emacs/elpa/packages/org/lisp/ol-rmail hides /home/monnier/src/emacs/work/lisp/org/ol-rmail /home/monnier/src/emacs/elpa/packages/org/lisp/ob-C hides /home/monnier/src/emacs/work/lisp/org/ob-C /home/monnier/src/emacs/elpa/packages/org/lisp/ob-emacs-lisp hides /home/monnier/src/emacs/work/lisp/org/ob-emacs-lisp /home/monnier/src/emacs/elpa/packages/org/lisp/ob-makefile hides /home/monnier/src/emacs/work/lisp/org/ob-makefile /home/monnier/src/emacs/elpa/packages/org/lisp/org-keys hides /home/monnier/src/emacs/work/lisp/org/org-keys /home/monnier/src/emacs/elpa/packages/org/lisp/org-duration hides /home/monnier/src/emacs/work/lisp/org/org-duration /home/monnier/src/emacs/elpa/packages/org/lisp/org-macro hides /home/monnier/src/emacs/work/lisp/org/org-macro /home/monnier/src/emacs/elpa/packages/org/lisp/org-timer hides /home/monnier/src/emacs/work/lisp/org/org-timer /home/monnier/src/emacs/elpa/packages/org/lisp/org-datetree hides /home/monnier/src/emacs/work/lisp/org/org-datetree /home/monnier/src/emacs/elpa/packages/org/lisp/ob-sed hides /home/monnier/src/emacs/work/lisp/org/ob-sed /home/monnier/src/emacs/elpa/packages/org/lisp/ol hides /home/monnier/src/emacs/work/lisp/org/ol /home/monnier/src/emacs/elpa/packages/org/lisp/org-list hides /home/monnier/src/emacs/work/lisp/org/org-list /home/monnier/src/emacs/elpa/packages/org/lisp/ol-eshell hides /home/monnier/src/emacs/work/lisp/org/ol-eshell /home/monnier/src/emacs/elpa/packages/org/lisp/ob-eval hides /home/monnier/src/emacs/work/lisp/org/ob-eval /home/monnier/src/emacs/elpa/packages/org/lisp/ob-css hides /home/monnier/src/emacs/work/lisp/org/ob-css /home/monnier/src/emacs/elpa/packages/org/lisp/ob-table hides /home/monnier/src/emacs/work/lisp/org/ob-table /home/monnier/src/emacs/elpa/packages/org/lisp/ol-eww hides /home/monnier/src/emacs/work/lisp/org/ol-eww /home/monnier/src/emacs/elpa/packages/org/lisp/ox hides /home/monnier/src/emacs/work/lisp/org/ox /home/monnier/src/emacs/elpa/packages/org/lisp/oc-biblatex hides /home/monnier/src/emacs/work/lisp/org/oc-biblatex /home/monnier/src/emacs/elpa/packages/org/lisp/ob-fortran hides /home/monnier/src/emacs/work/lisp/org/ob-fortran /home/monnier/src/emacs/elpa/packages/org/lisp/org-habit hides /home/monnier/src/emacs/work/lisp/org/org-habit /home/monnier/src/emacs/elpa/packages/org/lisp/ol-irc hides /home/monnier/src/emacs/work/lisp/org/ol-irc /home/monnier/src/emacs/elpa/packages/org/lisp/org-mouse hides /home/monnier/src/emacs/work/lisp/org/org-mouse /home/monnier/src/emacs/elpa/packages/org/lisp/ox-koma-letter hides /home/monnier/src/emacs/work/lisp/org/ox-koma-letter /home/monnier/src/emacs/elpa/packages/org/lisp/org-mobile hides /home/monnier/src/emacs/work/lisp/org/org-mobile /home/monnier/src/emacs/elpa/packages/org/lisp/ox-publish hides /home/monnier/src/emacs/work/lisp/org/ox-publish /home/monnier/src/emacs/elpa/packages/org/lisp/org-clock hides /home/monnier/src/emacs/work/lisp/org/org-clock /home/monnier/src/emacs/elpa/packages/org/lisp/ob-lilypond hides /home/monnier/src/emacs/work/lisp/org/ob-lilypond /home/monnier/src/emacs/elpa/packages/org/lisp/ob-sqlite hides /home/monnier/src/emacs/work/lisp/org/ob-sqlite /home/monnier/src/emacs/elpa/packages/org/lisp/org-macs hides /home/monnier/src/emacs/work/lisp/org/org-macs /home/monnier/src/emacs/elpa/packages/org/lisp/ox-odt hides /home/monnier/src/emacs/work/lisp/org/ox-odt /home/monnier/src/emacs/elpa/packages/org/lisp/org-fold hides /home/monnier/src/emacs/work/lisp/org/org-fold /home/monnier/src/emacs/elpa/packages/org/lisp/org-crypt hides /home/monnier/src/emacs/work/lisp/org/org-crypt /home/monnier/src/emacs/elpa/packages/org/lisp/ob-org hides /home/monnier/src/emacs/work/lisp/org/ob-org /home/monnier/src/emacs/elpa/packages/org/lisp/ob-latex hides /home/monnier/src/emacs/work/lisp/org/ob-latex /home/monnier/src/emacs/elpa/packages/org/lisp/ob-groovy hides /home/monnier/src/emacs/work/lisp/org/ob-groovy /home/monnier/src/emacs/elpa/packages/org/lisp/ob-sql hides /home/monnier/src/emacs/work/lisp/org/ob-sql /home/monnier/src/emacs/elpa/packages/org/lisp/org-pcomplete hides /home/monnier/src/emacs/work/lisp/org/org-pcomplete /home/monnier/src/emacs/elpa/packages/org/lisp/ox-md hides /home/monnier/src/emacs/work/lisp/org/ox-md /home/monnier/src/emacs/elpa/packages/org/lisp/org-capture hides /home/monnier/src/emacs/work/lisp/org/org-capture /home/monnier/src/emacs/elpa/packages/org/lisp/org-entities hides /home/monnier/src/emacs/work/lisp/org/org-entities /home/monnier/src/emacs/elpa/packages/org/lisp/org-goto hides /home/monnier/src/emacs/work/lisp/org/org-goto /home/monnier/src/emacs/elpa/packages/hyperbole/set hides /home/monnier/src/emacs/work/lisp/emacs-lisp/set /home/monnier/src/emacs/work/lisp/keymap hides /home/monnier/src/emacs/work/lisp/emacs-lisp/keymap /home/monnier/src/emacs/elpa/packages/landmark/landmark hides /home/monnier/src/emacs/work/lisp/obsolete/landmark /home/monnier/src/emacs/elpa/packages/crisp/crisp hides /home/monnier/src/emacs/work/lisp/obsolete/crisp Features: (shadow emacsbug find-cmd grep whitespace edebug display-line-numbers debbugs-browse prefixed-core nnagent nnml vc gnus-topic shortdoc comp-common mouse-copy mouse-drag csv-mode dabbrev sm-es skeleton gnus-draft view cal-china lunar solar cal-dst cal-bahai cal-islam cal-hebrew holidays holiday-loaddefs cal-french org-journal org-crypt cal-iso cal-move bbdb-com org-eldoc oc-basic org-element org-persist org-id org-element-ast avl-tree generator ol-eww eww ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect ol-docview ol-bibtex bibtex ol-bbdb ol-w3m ol-doi org-link-doi autorevert doc-view filenotify image-mode exif gnus-fun gnus-icalendar org-capture org-refile org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-src sh-script smie treesit make-mode 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 org-loaddefs org-version org-compat org-macs icalendar diary-lib diary-loaddefs cal-menu calendar cal-loaddefs quail misearch multi-isearch epa-file emoji-labels emoji multisession sqlite transient edmacro kmacro smerge-mode jka-compr filecache bbdb bbdb-site timezone nnfolder canlock flow-fill gnus-html url-queue mm-url utf-7 raku-detect shr-color color ecomplete mailalias smtpmail tramp trampver tramp-integration files-x tramp-message tramp-compat xdg shell drupal/pcomplete pcomplete tramp-loaddefs tramp-core gited-tests gited vc-git diff-mode track-changes easy-mmode vc-dispatcher gited-ci ert ewoc cl-print debug backtrace find-func el-mock help-fns radix-tree rect format-spec mule-util sort smiley gnus-cite mail-extr textsec uni-scripts idna-mapping ucs-normalize uni-confusable textsec-check qp gnus-async gnus-bcklg debbugs-gnu add-log debbugs-compat debbugs soap-client rng-xsd rng-dt rng-util xsd-regexp gnus-ml nndoc mm-archive url-http-oauth url-http-ntlm ntlm hmac-md5 hex-util md4 url-http url-gw url-cache crm bug-reference nndraft nnmh rfc2104 network-stream nsm executable diff copyright nnnil gnus-agent gnus-srvr gnus-score score-mode nnvirtual gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime smime gnutls dig nntp gnus-cache gnus-sum shr pixel-fill kinsoku url-file svg dom gnus-group gnus-undo server gnus-start gnus-dbus dbus xml gnus-cloud nnimap nnmail mail-source utf7 nnoo parse-time iso8601 gnus-spec gnus-int gnus-range message sendmail yank-media puny dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068 epg-config mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045 ietf-drums mailabbrev gmm-utils mailheader gnus-win gnus nnheader gnus-util mail-utils range mm-util mail-prsvr time-date flymake project compile text-property-search comint ansi-osc ansi-color ring warnings noutline outline flyspell ispell checkdoc lisp-mnt thingatpt elec-pair reveal autoinsert savehist minibuf-eldef disp-table type-break compact-docstrings corfu compat adoc-mode-autoloads afternoon-theme-autoloads alect-themes-autoloads ample-theme-autoloads annotate-autoloads anti-zenburn-theme-autoloads apache-mode-autoloads apropospriate-theme-autoloads arduino-mode-autoloads ede/auto eieio-base auto-dim-other-buffers-autoloads bash-completion-autoloads better-jumper-autoloads bison-mode-autoloads blow-autoloads blueprint-ts-mode-autoloads boxquote-autoloads buttercup-autoloads camera-autoloads cdlatex-autoloads cider-autoloads clojure-ts-mode-autoloads coffee-mode-autoloads consult-flycheck-autoloads corfu-terminal-autoloads crux-autoloads cyberpunk-theme-autoloads cycle-at-point-autoloads d-mode-autoloads dart-mode-autoloads dcs-mode-autoloads denote-refs-autoloads devhelp-autoloads devil-autoloads diff-ansi-autoloads dirvish-autoloads doc-show-inline-autoloads dockerfile-mode-autoloads dracula-theme-autoloads drupal-mode-autoloads eat-autoloads edit-indirect-autoloads editorconfig-autoloads el-mock-autoloads elixir-mode-autoloads elpher-autoloads emacsql-autoloads engine-mode-autoloads evil-anzu-autoloads anzu-autoloads evil-args-autoloads evil-escape-autoloads evil-exchange-autoloads evil-goggles-autoloads evil-iedit-state-autoloads evil-indent-plus-autoloads evil-lisp-state-autoloads bind-map-autoloads evil-matchit-autoloads evil-nerd-commenter-autoloads evil-numbers-autoloads evil-surround-autoloads evil-visual-mark-mode-autoloads evil-visualstar-autoloads evil-autoloads exec-path-from-shell-autoloads flx-ido-autoloads flx-autoloads flycheck-autoloads flymake-guile-autoloads flymake-kondor-autoloads flymake-popon-autoloads focus-autoloads forth-mode-autoloads free-keys-autoloads gc-buffers-autoloads geiser-chez-autoloads geiser-chibi-autoloads geiser-chicken-autoloads geiser-gambit-autoloads geiser-gauche-autoloads geiser-guile-autoloads geiser-kawa-autoloads geiser-mit-autoloads geiser-racket-autoloads geiser-stklos-autoloads geiser-autoloads git-modes-autoloads gnu-apl-mode-autoloads gnu-indent-autoloads gnuplot-autoloads go-mode-autoloads golden-ratio-autoloads gotham-theme-autoloads goto-chg-autoloads graphql-mode-autoloads gruber-darker-theme-autoloads gruvbox-theme-autoloads autothemer-autoloads guru-mode-autoloads haskell-tng-mode-autoloads helm-autoloads helm-core-autoloads highlight-parentheses-autoloads hl-block-mode-autoloads hl-column-autoloads htmlize-autoloads hyperdrive-autoloads idle-highlight-mode-autoloads idris-mode-autoloads iedit-autoloads inf-clojure-autoloads clojure-mode-autoloads inf-ruby-autoloads inkpot-theme-autoloads iwindow-autoloads j-mode-autoloads jabber-autoloads jade-mode-autoloads jinja2-mode-autoloads julia-mode-autoloads keycast-autoloads kotlin-mode-autoloads lorem-ipsum-autoloads lua-mode-autoloads markdown-mode-autoloads mastodon-autoloads material-theme-autoloads mentor-autoloads meow-autoloads minibar-autoloads moe-theme-autoloads monokai-theme-autoloads mpv-autoloads multiple-cursors-autoloads nasm-mode-autoloads nginx-mode-autoloads nix-mode-autoloads oblivion-theme-autoloads opam-switch-mode-autoloads org-auto-tangle-autoloads org-drill-autoloads org-journal-autoloads org-mime-autoloads org-present-autoloads org-superstar-autoloads org-tree-slide-autoloads orgit-autoloads package-lint-autoloads pacmacs-autoloads page-break-lines-autoloads paredit-autoloads parseedn-autoloads parseclj-autoloads pcmpl-args-autoloads pcre2el-autoloads popon-autoloads popup-autoloads prescient-autoloads projectile-autoloads proof-general-autoloads proof-site proof-autoloads prop-menu-autoloads racket-mode-autoloads rainbow-delimiters-autoloads raku-mode-autoloads recomplete-autoloads rfc-mode-autoloads rubocop-autoloads rust-mode-autoloads sass-mode-autoloads haml-mode-autoloads scad-mode-autoloads scala-mode-autoloads scroll-on-drag-autoloads scroll-on-jump-autoloads sesman-autoloads shellcop-autoloads slime-autoloads macrostep-autoloads sly-autoloads smartparens-autoloads solarized-theme-autoloads spacemacs-theme-autoloads spell-fu-autoloads sqlite3-autoloads stylus-mode-autoloads subatomic-theme-autoloads subed-autoloads sweeprolog-autoloads swift-mode-autoloads swsw-autoloads symbol-overlay-autoloads systemd-autoloads tablist-autoloads tangotango-theme-autoloads telephone-line-autoloads testcover-mark-line-autoloads textile-mode-autoloads toc-org-autoloads totp-auth-autoloads base32-autoloads tuareg-autoloads rx caml-autoloads typescript-mode-autoloads ujelly-theme-autoloads undo-fu-autoloads undo-fu-session-autoloads vc-fossil-autoloads vcomplete-autoloads visual-fill-column-autoloads vm-autoloads web-mode-autoloads webpaste-autoloads wfnames-autoloads wgrep-autoloads why-this-autoloads with-simulated-input-autoloads workroom-autoloads writegood-mode-autoloads ws-butler-autoloads xah-fly-keys-autoloads xkcd-autoloads xml-rpc-autoloads yaml-mode-autoloads yasnippet-snippets-autoloads zenburn-theme-autoloads zig-mode-autoloads reformatter-autoloads ace-window-autoloads ack-autoloads activities-autoloads ada-mode-autoloads ada-ref-man-autoloads adaptive-wrap-autoloads adjust-parens-autoloads advice-patch-autoloads aggressive-completion-autoloads aggressive-indent-autoloads agitate-autoloads ahungry-theme-autoloads aircon-theme-autoloads all-autoloads altcaps-autoloads ampc-autoloads arbitools-autoloads assess-autoloads aumix-mode-autoloads auto-correct-autoloads auto-header-autoloads auto-overlays-autoloads autocrypt-autoloads bbdb-autoloads beacon-autoloads beardbolt-autoloads beframe-autoloads bicep-ts-mode-autoloads blist-autoloads bluetooth-autoloads bnf-mode-autoloads boxy-headings-autoloads boxy-headlines-autoloads breadcrumb-autoloads brief-autoloads buffer-env-autoloads buffer-expose-autoloads bufferlo-autoloads bug-hunter-autoloads buildbot-autoloads calibre-autoloads cape-autoloads capf-autosuggest-autoloads caps-lock-autoloads captain-autoloads chess-autoloads clipboard-collector-autoloads cobol-mode-autoloads code-cells-autoloads compact-docstrings-autoloads company-ebdb-autoloads company-math-autoloads company-statistics-autoloads company-autoloads consult-hoogle-autoloads haskell-mode-autoloads consult-recoll-autoloads context-coloring-autoloads corfu-autoloads coterm-autoloads counsel-autoloads cpio-mode-autoloads cpupower-autoloads crdt-autoloads crisp-autoloads csharp-mode-autoloads csv-mode-autoloads cursory-autoloads cycle-quotes-autoloads dape-autoloads darkroom-autoloads dbus-codegen-autoloads debbugs-autoloads delight-autoloads denote-menu-autoloads denote-autoloads detached-autoloads devdocs-autoloads devicetree-ts-mode-autoloads dict-tree-autoloads diff-hl-autoloads diffview-autoloads diminish-autoloads dired-du-autoloads dired-duplicates-autoloads dired-git-info-autoloads dired-preview-autoloads disk-usage-autoloads dismal-autoloads djvu-autoloads do-at-point-autoloads doc-toc-autoloads docbook-autoloads drepl-autoloads comint-mime-autoloads dts-mode-autoloads easy-escape-autoloads easy-kill-autoloads ebdb-gnorb-autoloads cl-seq inline ebdb-i18n-chn-autoloads ebdb-autoloads cl-extra help-mode ediprolog-autoloads eev-autoloads ef-themes-autoloads el-search-autoloads electric-spacing-autoloads elisp-benchmarks-autoloads ellama-autoloads elsa-autoloads emacs-gc-stats-autoloads emacspeak-autoloads embark-consult-autoloads consult-autoloads embark-autoloads ement-autoloads emms-autoloads engrave-faces-autoloads enwc-autoloads epoch-view-autoloads ergoemacs-mode-autoloads ess-autoloads excorporate-autoloads expand-region-autoloads expreg-autoloads exwm-autoloads f90-interface-browser-autoloads face-shift-autoloads filechooser-autoloads filladapt-autoloads firefox-javascript-repl-autoloads flylisp-autoloads flymake-codespell-autoloads flymake-proselint-autoloads fontaine-autoloads frame-tabs-autoloads frog-menu-autoloads fsm-autoloads ftable-autoloads gcmh-autoloads ggtags-autoloads gited-autoloads gle-mode-autoloads gnome-c-style-autoloads gnorb-autoloads gnu-elpa-autoloads gnu-elpa-features gnu-elpa-keyring-update-autoloads gnugo-autoloads ascii-art-to-unicode-autoloads gnus-mock-autoloads gpastel-autoloads gpr-mode-autoloads gpr-query-autoloads gnat-compiler-autoloads graphql-autoloads greader-autoloads greenbar-autoloads gtags-mode-autoloads guess-language-autoloads hcel-autoloads hiddenquote-autoloads highlight-escape-sequences-autoloads hook-helpers-autoloads html5-schema-autoloads hyperbole-autoloads kotl-autoloads hact set hhist idlwave-autoloads ilist-autoloads inspector-autoloads ioccur-autoloads isearch-mb-autoloads iterators-autoloads ivy-avy-autoloads avy-autoloads ivy-explorer-autoloads ivy-hydra-autoloads ivy-posframe-autoloads jarchive-autoloads javaimp-autoloads jgraph-mode-autoloads jinx-autoloads jit-spell-autoloads js2-mode-autoloads json-mode-autoloads jumpc-autoloads kind-icon-autoloads kiwix-autoloads request-autoloads kmb-autoloads landmark-autoloads latex-table-wizard-autoloads auctex-autoloads tex-site leaf-autoloads lentic-server-autoloads lentic-autoloads lex-autoloads lin-autoloads listen-autoloads llm-autoloads lmc-autoloads load-dir-autoloads loccur-autoloads logos-autoloads luwak-autoloads m-buffer-autoloads marginalia-autoloads markchars-autoloads math-symbol-lists-autoloads mct-autoloads memory-usage-autoloads metar-autoloads midi-kbd-autoloads mines-autoloads minibuffer-header-autoloads minibuffer-line-autoloads minimap-autoloads modus-themes-autoloads mpdired-autoloads multi-mode-autoloads multishell-autoloads muse-autoloads myers-autoloads nameless-autoloads names-autoloads nano-agenda-autoloads nano-modeline-autoloads nano-theme-autoloads nftables-mode-autoloads nhexl-mode-autoloads nlinum-autoloads notes-mode-autoloads notmuch-indicator-autoloads num3-mode-autoloads oauth2-autoloads ob-asymptote-autoloads ob-haxe-autoloads objed-autoloads omn-mode-autoloads on-screen-autoloads openpgp-autoloads orderless-autoloads org-contacts-autoloads org-edna-autoloads org-jami-bot-autoloads jami-bot-autoloads org-modern-autoloads org-notify-autoloads org-real-autoloads boxy-autoloads org-remark-autoloads org-transclusion-autoloads org-translate-autoloads org-autoloads orgalist-autoloads osc-autoloads osm-autoloads other-frame-window-autoloads pabbrev-autoloads paced-autoloads parsec-autoloads parser-generator-autoloads path-iterator-autoloads perl-doc-autoloads persist-autoloads phpinspect-autoloads phps-mode-autoloads pinentry-autoloads plz-see-autoloads poke-autoloads poke-mode-autoloads poker-autoloads polymode-autoloads popper-autoloads pq-autoloads prefixed-core-autoloads psgml-autoloads pspp-mode-autoloads pulsar-autoloads pyim-autoloads async-autoloads pyim-basedict-autoloads quarter-plane-autoloads rainbow-mode-autoloads rbit-autoloads rcirc-color-autoloads rcirc-menu-autoloads rcirc-sqlite-autoloads realgud-ipdb-autoloads realgud-jdb-autoloads realgud-lldb-autoloads realgud-node-debug-autoloads realgud-node-inspect-autoloads realgud-pdbpp-autoloads realgud-trepan-ni-autoloads realgud-trepan-xpy-autoloads realgud-autoloads loc-changes-autoloads load-relative-autoloads rec-mode-autoloads register-list-autoloads relint-autoloads repology-autoloads rich-minority-autoloads rmsbolt-autoloads rnc-mode-autoloads info rt-liberation-autoloads ruby-end-autoloads rudel-autoloads satchel-autoloads scanner-autoloads scroll-restore-autoloads sed-mode-autoloads setup-autoloads shelisp-autoloads shell-command+-autoloads shell-quasiquote-autoloads shen-mode-autoloads sisu-mode-autoloads site-lisp-autoloads sketch-mode-autoloads slime-volleyball-autoloads sm-c-mode-autoloads smalltalk-mode-autoloads smart-yank-autoloads sml-mode-autoloads sokoban-autoloads sotlisp-autoloads spacious-padding-autoloads spinner-autoloads sql-beeline-autoloads sql-cassandra-autoloads sql-indent-autoloads sql-smie-autoloads finder-inf plz-autoloads ssh-deploy-autoloads standard-themes-autoloads stream-autoloads substitute-autoloads svg-clock-autoloads svg-tag-mode-autoloads svg-lib-autoloads swiper-autoloads ivy-autoloads switchy-window-autoloads sxhkdrc-mode-autoloads system-packages-autoloads tam-autoloads taxy-magit-section-autoloads taxy-autoloads dash-autoloads temp-buffer-browse-autoloads tempel-autoloads test-simple-autoloads theme-buffet-autoloads timerfunctions-autoloads tiny-autoloads tmr-autoloads tomelr-autoloads topspace-autoloads tramp-nspawn-autoloads tramp-theme-autoloads transcribe-autoloads transient-cycles-autoloads tree-inspector-autoloads treeview-autoloads trie-autoloads heap-autoloads tNFA-autoloads trinary-autoloads triples-autoloads typo-autoloads ulisp-repl-autoloads undo-tree-autoloads uni-confusables-autoloads uniquify-files-autoloads urgrep-autoloads url-http-ntlm-autoloads url-http-oauth-demo-autoloads url-http-oauth-autoloads url-auth url-scgi-autoloads validate-autoloads valign-autoloads vc-backup-autoloads vc-got-autoloads vc-hgcmd-autoloads vcard-autoloads vcl-mode-autoloads vdiff-autoloads hydra-autoloads lv-autoloads vertico-posframe-autoloads vertico-autoloads posframe-autoloads vigenere-autoloads visual-filename-abbrev-autoloads visual-fill-autoloads vlf-autoloads vundo-autoloads wcheck-mode-autoloads wconf-autoloads web-server-autoloads webfeeder-autoloads websocket-autoloads which-key-autoloads window-commander-autoloads windower-autoloads windresize-autoloads wisitoken-grammar-mode-autoloads mmm-mode-autoloads wisi-autoloads wpuzzle-autoloads wrap-search-autoloads xclip-autoloads xeft-autoloads xelb-autoloads xpm-autoloads queue-autoloads xr-autoloads xref-union-autoloads yasnippet-classic-snippets-autoloads yasnippet-autoloads zones-autoloads ztree-autoloads zuul-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 eieio eieio-core cl-macs pcase password-cache json subr-x map byte-opt bytecomp byte-compile url-vars cus-edit pp cus-load icons wid-edit cl-loaddefs cl-lib gv rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode 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 button loaddefs theme-loaddefs oclosure cl-preloaded 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 x-toolkit xinput2 x multi-tty move-toolbar make-network-process emacs) Memory information: ((conses 16 11308797 674903) (symbols 48 57360 1) (strings 32 282389 59572) (string-bytes 1 8152871) (vectors 16 117656) (vector-slots 8 2316624 601787) (floats 8 1185 17163) (intervals 56 11267 1308) (buffers 992 123))
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Mon, 20 May 2024 16:22:02 GMT) Full text and rfc822 format available.Message #8 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Stefan Monnier <monnier <at> iro.umontreal.ca> Cc: 71080 <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Mon, 20 May 2024 19:20:55 +0300
> Cc: monnier <at> iro.umontreal.ca > Date: Mon, 20 May 2024 11:43:31 -0400 > From: Stefan Monnier via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> > > Then > > emacs -Q ~/tmp/foo.txt > C-x C-w foo.gpg RET # To save the file into an encrypted `foo.gpg`. > TAB TAB RET # To select symmetric encryption. > .. type the password you'd like to use ... > M-x revert-buffer RET > > and then you should see that he `λ` turned into its UTF-8 sequence `\316\273`. > The same happens if you encrypt with public keys and if you use any > other encoding that's different from UTF-8. > > AFAICT, the problem is partly due to > > (find-coding-systems-region (point-min) (point-max)) > > returning a list which includes `no-conversion` because in the end the > buffer is saved with "no conversion" (i.e. it uses Emacs's internal > encoding). Another part of the problem is that `find-auto-coding` > returns `no-conversion` for `.gpg` files because those files are binary. > > IOW it can be considered as the result of "no conversion" being > ambiguous, meaning either "binary" or "Emacs's internal encoding" > depending on the circumstances. But it's also due to the confusion > between the encoding to use before encryption (resp. after decryption) > and the encoding to use after encryption (resp. before decryption). > > I don't understand enough of how the "no conversion" ambiguity is > expected to be resolved, nor how the different layers of encoding > are supposed to be handled in file-name-handlers to dig much deeper. How can this work reliably, unless the *.gpg files can have some meta-data that tells Emacs how to decode them? When encoding, we could perhaps use buffer-file-coding-system (AFAICT, we do that indirectly now, via select-safe-coding-system), but what to do when decoding? If _you_ know the correct encoding, you could use "C-x RET c" before the commands (as in "C-x RET c iso-2022-7bit RET C-x C-w"). Did you try that? IOW, I don't think the problem is with 'no-conversion', the problem is that when decoding, we don't really have any useful info for how to decode, and the locale-dependent ad-hoc'ery doesn't help because GPG-encrypted stuff is likely to come from a different locale. You deliberately used iso-2022-7bit, which simulates such an "alien" file. Am I missing something (I know very little about epa, so apologies if what I say makes no sense)?
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Mon, 20 May 2024 16:40:02 GMT) Full text and rfc822 format available.Message #11 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 71080 <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Mon, 20 May 2024 12:38:50 -0400
> How can this work reliably, unless the *.gpg files can have some > meta-data that tells Emacs how to decode them? GPG takes bytes in and split bytes out, so there's no encoding issue there. The contents in my example very much comes with the needed meta-data (in the form of a `coding` file-local var). That meta-data is correctly used when opening the file (which is why the UTF-8 byte sequence is not turned into `λ` but is kept as `eight-bit` chars) but not when saving. > When encoding, we could perhaps use buffer-file-coding-system (AFAICT, > we do that indirectly now, via select-safe-coding-system), but what to > do when decoding? As mentioned, AFAICT we DTRT already when decoding (at least when the coding system is specified via a file-local var). The problem is when saving: `select-safe-coding-system` ends up returning `no-conversion` despite the `coding:` cookie. > If _you_ know the correct encoding, you could use "C-x RET c" before > the commands (as in "C-x RET c iso-2022-7bit RET C-x C-w"). Did you > try that? I tried `C-x RET f`. It makes no difference. And it should not be needed since the file-local var states very explicitly what we should use. Stefan
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Mon, 20 May 2024 18:02:02 GMT) Full text and rfc822 format available.Message #14 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Stefan Monnier <monnier <at> iro.umontreal.ca> Cc: 71080 <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Mon, 20 May 2024 21:00:52 +0300
> From: Stefan Monnier <monnier <at> iro.umontreal.ca> > Cc: 71080 <at> debbugs.gnu.org > Date: Mon, 20 May 2024 12:38:50 -0400 > > > How can this work reliably, unless the *.gpg files can have some > > meta-data that tells Emacs how to decode them? > > GPG takes bytes in and split bytes out, so there's no encoding > issue there. Yes, but what bytes? You can encode a buffer using UTF-8 or you can encode it using ISO 2022, and in each case you will get a different bytestream. GPG doesn't care either way, but the bytes it will get and encode will be different. > The contents in my example very much comes with the needed > meta-data (in the form of a `coding` file-local var). That meta-data is > correctly used when opening the file (which is why the UTF-8 byte sequence > is not turned into `λ` but is kept as `eight-bit` chars) but not when saving. Any evidence for that? Can you take me through the code to show that buffer's encoding is ignored? What I see there is that we choose a reasonable encoding when sending data to GPG, but maybe I'm not looking in the right place. > > When encoding, we could perhaps use buffer-file-coding-system (AFAICT, > > we do that indirectly now, via select-safe-coding-system), but what to > > do when decoding? > > As mentioned, AFAICT we DTRT already when decoding (at least when the > coding system is specified via a file-local var). The problem is when > saving: `select-safe-coding-system` ends up returning `no-conversion` > despite the `coding:` cookie. Please tell where in the code you see that. AFAIK, the coding cookie is supposed to determine buffer-file-coding-system, and select-safe-coding-system tries buffer-file-coding-system as part of the values it attempts to use. > > If _you_ know the correct encoding, you could use "C-x RET c" before > > the commands (as in "C-x RET c iso-2022-7bit RET C-x C-w"). Did you > > try that? > > I tried `C-x RET f`. It makes no difference. Not "C-x RET f", but "C-x RET c". > And it should not be needed since the file-local var states very > explicitly what we should use. Yes, but "C-x RET c" is generally stronger, so if it helps, it's a sign that the code is correct, but uses incorrect defaults. That's why I suggested to try it. However, if you know the code and can tell how and where we determine which encoding to use, that'd be more efficient. Thanks.
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Mon, 20 May 2024 21:09:02 GMT) Full text and rfc822 format available.Message #17 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 71080 <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Mon, 20 May 2024 17:08:25 -0400
>> The contents in my example very much comes with the needed >> meta-data (in the form of a `coding` file-local var). That meta-data is >> correctly used when opening the file (which is why the UTF-8 byte sequence >> is not turned into `λ` but is kept as `eight-bit` chars) but not when saving. > Any evidence for that? Of what exactly? > Can you take me through the code to show that buffer's encoding is > ignored? What I see there is that we choose a reasonable encoding > when sending data to GPG, I think my recipe is pretty clear: we start with λ # Local Variables: # coding: iso-2022-7bit # End: and after save and `revert-buffer` we end up with \316\273 # Local Variables: # coding: iso-2022-7bit # End: \316\273 is the encoding of λ in UTF-8, not in `iso-2022-7bit`, so it seems pretty clear that Emacs encoded the buffer using (some version of) utf-8, thus disregarding the `coding:` cookie. >> As mentioned, AFAICT we DTRT already when decoding (at least when the >> coding system is specified via a file-local var). The problem is when >> saving: `select-safe-coding-system` ends up returning `no-conversion` >> despite the `coding:` cookie. > > Please tell where in the code you see that. Try and reproduce my recipe after doing `M-x trace-function RET select-safe-coding-system`. > AFAIK, the coding cookie is supposed to determine > buffer-file-coding-system, and select-safe-coding-system tries > buffer-file-coding-system as part of the values it attempts to use. AFAICT this gets overridden by the return value of `find-auto-coding` we setup for `.gpg` files. >> > If _you_ know the correct encoding, you could use "C-x RET c" before >> > the commands (as in "C-x RET c iso-2022-7bit RET C-x C-w"). Did you >> > try that? >> I tried `C-x RET f`. It makes no difference. > Not "C-x RET f", but "C-x RET c". I haven't tried that, no. > Yes, but "C-x RET c" is generally stronger, so if it helps, it's a > sign that the code is correct, but uses incorrect defaults. That's > why I suggested to try it. However, if you know the code and can tell > how and where we determine which encoding to use, that'd be more > efficient. I stepped through `select-safe-coding-system`, which is where I got the info I described about `find-auto-coding` and `find-coding-systems-region`. Stefan
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Thu, 23 May 2024 13:02:02 GMT) Full text and rfc822 format available.Message #20 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Stefan Monnier <monnier <at> iro.umontreal.ca> Cc: 71080 <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Thu, 23 May 2024 16:01:21 +0300
> From: Stefan Monnier <monnier <at> iro.umontreal.ca> > Cc: 71080 <at> debbugs.gnu.org > Date: Mon, 20 May 2024 17:08:25 -0400 > > \316\273 is the encoding of λ in UTF-8, not in `iso-2022-7bit`, so it > seems pretty clear that Emacs encoded the buffer using (some version of) > utf-8, thus disregarding the `coding:` cookie. AFAICT, this is due to an (unsolicited? at least the log message is silent about this particular part) change as part of commit e78c15acf679, 4 years ago. Reverting that part makes your recipe work as expected. Please try the patch below: diff --git a/lisp/epa-file.el b/lisp/epa-file.el index a4942e7..90cc91e 100644 --- a/lisp/epa-file.el +++ b/lisp/epa-file.el @@ -267,7 +267,14 @@ epa-file-write-region (setq file (expand-file-name file)) (let* ((coding-system (or coding-system-for-write (if (fboundp 'select-safe-coding-system) - (let ((buffer-file-name file)) + ;; This is needed because + ;; `auto-coding-alist' has + ;; `no-conversion' for *.gpg files, + ;; which would otherwise force + ;; `select-safe-coding-system' return + ;; `no-conversion'. + (let ((buffer-file-name + (file-name-sans-extension file))) (select-safe-coding-system (point-min) (point-max))) buffer-file-coding-system)))
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Thu, 23 May 2024 15:45:02 GMT) Full text and rfc822 format available.Message #23 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Eli Zaretskii <eliz <at> gnu.org> Cc: Jonas Bernoulli <jonas <at> bernoul.li>, 71080 <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Thu, 23 May 2024 11:44:02 -0400
> AFAICT, this is due to an (unsolicited? at least the log message is > silent about this particular part) change as part of commit > e78c15acf679, 4 years ago. Reverting that part makes your recipe work > as expected. Please try the patch below: Ha! Thanks for tracking it down! It does fix the problem for me, and it makes a lot of sense, indeed. Jonas, do you remember what that hunk was about? Stefan > diff --git a/lisp/epa-file.el b/lisp/epa-file.el > index a4942e7..90cc91e 100644 > --- a/lisp/epa-file.el > +++ b/lisp/epa-file.el > @@ -267,7 +267,14 @@ epa-file-write-region > (setq file (expand-file-name file)) > (let* ((coding-system (or coding-system-for-write > (if (fboundp 'select-safe-coding-system) > - (let ((buffer-file-name file)) > + ;; This is needed because > + ;; `auto-coding-alist' has > + ;; `no-conversion' for *.gpg files, > + ;; which would otherwise force > + ;; `select-safe-coding-system' return > + ;; `no-conversion'. > + (let ((buffer-file-name > + (file-name-sans-extension file))) > (select-safe-coding-system > (point-min) (point-max))) > buffer-file-coding-system)))
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Fri, 24 May 2024 20:14:01 GMT) Full text and rfc822 format available.Message #26 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Jonas Bernoulli <jonas <at> bernoul.li> To: Stefan Monnier <monnier <at> iro.umontreal.ca>, Eli Zaretskii <eliz <at> gnu.org> Cc: 71080 <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Fri, 24 May 2024 22:12:59 +0200
Stefan Monnier <monnier <at> iro.umontreal.ca> writes: >> AFAICT, this is due to an (unsolicited? at least the log message is >> silent about this particular part) change as part of commit >> e78c15acf679, 4 years ago. Reverting that part makes your recipe work >> as expected. Please try the patch below: > > Ha! Thanks for tracking it down! > It does fix the problem for me, and it makes a lot of sense, indeed. > Jonas, do you remember what that hunk was about? I don't recall; and since I didn't mention it in the commit message, it seems most likely, that it was included in that commit mistake. Jonas
bug-gnu-emacs <at> gnu.org
:bug#71080
; Package emacs
.
(Sat, 25 May 2024 06:16:02 GMT) Full text and rfc822 format available.Message #29 received at 71080 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Jonas Bernoulli <jonas <at> bernoul.li> Cc: 71080 <at> debbugs.gnu.org, monnier <at> iro.umontreal.ca Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Sat, 25 May 2024 09:14:43 +0300
> From: Jonas Bernoulli <jonas <at> bernoul.li> > Cc: 71080 <at> debbugs.gnu.org > Date: Fri, 24 May 2024 22:12:59 +0200 > > Stefan Monnier <monnier <at> iro.umontreal.ca> writes: > > >> AFAICT, this is due to an (unsolicited? at least the log message is > >> silent about this particular part) change as part of commit > >> e78c15acf679, 4 years ago. Reverting that part makes your recipe work > >> as expected. Please try the patch below: > > > > Ha! Thanks for tracking it down! > > It does fix the problem for me, and it makes a lot of sense, indeed. > > Jonas, do you remember what that hunk was about? > > I don't recall; and since I didn't mention it in the commit message, > it seems most likely, that it was included in that commit mistake. Thanks, so I've now installed the fix on the master branch. Stefan, feel free to close the bug if this solves the problems. If there's anything else left to do here, please tell.
Stefan Monnier <monnier <at> iro.umontreal.ca>
:Stefan Monnier <monnier <at> iro.umontreal.ca>
:Message #34 received at 71080-done <at> debbugs.gnu.org (full text, mbox):
From: Stefan Monnier <monnier <at> iro.umontreal.ca> To: Jonas Bernoulli <jonas <at> bernoul.li> Cc: Eli Zaretskii <eliz <at> gnu.org>, 71080-done <at> debbugs.gnu.org Subject: Re: bug#71080: 30.0.50; UTF-8 used unconditionally when saving GPG file Date: Sat, 25 May 2024 10:01:32 -0400
>>> AFAICT, this is due to an (unsolicited? at least the log message is >>> silent about this particular part) change as part of commit >>> e78c15acf679, 4 years ago. Reverting that part makes your recipe work >>> as expected. Please try the patch below: >> Ha! Thanks for tracking it down! >> It does fix the problem for me, and it makes a lot of sense, indeed. >> Jonas, do you remember what that hunk was about? > I don't recall; and since I didn't mention it in the commit message, > it seems most likely, that it was included in that commit mistake. OK, Thanks Jonas and Eli, closing, Stefan
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sun, 23 Jun 2024 11:24:11 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.