GNU bug report logs - #79158
31.0.50; epa-dired is not tramp-aware

Previous Next

Package: emacs;

Reported by: Ankit Gadiya <ankit <at> argp.in>

Date: Sat, 2 Aug 2025 16:34:02 UTC

Severity: normal

Found in version 31.0.50

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

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

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


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#79158; Package emacs. (Sat, 02 Aug 2025 16:34:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ankit Gadiya <ankit <at> argp.in>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Sat, 02 Aug 2025 16:34:03 GMT) Full text and rfc822 format available.

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

From: Ankit Gadiya <ankit <at> argp.in>
To: bug-gnu-emacs <at> gnu.org
Subject: 31.0.50; epa-dired is not tramp-aware
Date: Sat, 2 Aug 2025 22:02:38 +0530
The epa-dired commands like epa-dired-do-decrypt do not work in the
dired buffer under tramp.

Steps to reproduce:

1. Open the dired buffer over tramp using
   /ssh:user <at> hostname:/path/to/directory
2. Mark the file with the .gpg extension in the dired buffer using
   dired-mark.
3. Call the M-x epa-dired-do-decrypt command.

Behavior:

It appears like epa-dired is passing the tramp-path verbatim to the gpg.
I've updated the tramp-path to remove identifiers.

Error while decrypting with "/opt/homebrew/bin/gpg":

gpg: can't open '/ssh:user <at> hostname:/path/to/file.gpg': No such file
or directory
gpg: decrypt_message failed: No such file or directory

Expected Behavior:

I expected the command to be aware of Tramp paths. In case of Tramp
files:
1. Write the file to a temporary local file
2. Decrypt it using local GPG keys.
3. Write the decrypted file back to the remote location with the file name
   accepted as the input.


In GNU Emacs 31.0.50 (build 1, aarch64-apple-darwin24.5.0, NS
appkit-2575.60 Version 15.5 (Build 24F74)) of 2025-06-14 built on
Ankits-Macbook-Air.local
Windowing system distributor 'Apple', version 10.3.2575
System Description:  macOS 15.5

Configured using:
'configure --disable-dependency-tracking --disable-silent-rules
--enable-locallisppath=/opt/homebrew/share/emacs/site-lisp
--infodir=/opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50/share/info/emacs
--prefix=/opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50
--with-native-compilation=aot --with-xml2 --with-gnutls
--without-compress-install --without-dbus --with-imagemagick
--with-modules --with-rsvg --with-webp --without-pop --with-ns
--disable-ns-self-contained 'CFLAGS=-O2 -DFD_SETSIZE=10000
-DDARWIN_UNLIMITED_SELECT -I/opt/homebrew/opt/sqlite/include
-I/opt/homebrew/opt/gcc/include -I/opt/homebrew/opt/libgccjit/include'
'LDFLAGS=-L/opt/homebrew/opt/sqlite/lib -L/opt/homebrew/lib/gcc/15
-I/opt/homebrew/opt/gcc/include -I/opt/homebrew/opt/libgccjit/include''

Configured features:
ACL GIF GLIB GMP GNUTLS IMAGEMAGICK JPEG LCMS2 LIBXML2 MODULES
NATIVE_COMP NOTIFY KQUEUE NS PDUMPER PNG RSVG SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP XIM ZLIB

Important settings:
  value of $LANG: en_IN.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Fundamental

Minor modes in effect:
  popper-tab-line-mode: t
  popper-mode: t
  windmove-mode: t
  global-git-commit-mode: t
  magit-auto-revert-mode: t
  server-mode: t
  electric-pair-mode: t
  gcmh-mode: t
  savehist-mode: t
  marginalia-mode: t
  vertico-mode: t
  which-key-mode: t
  corfu-popupinfo-mode: t
  global-corfu-mode: t
  corfu-mode: t
  global-auto-revert-mode: t
  evil-commentary-mode: t
  global-evil-collection-unimpaired-mode: t
  evil-collection-unimpaired-mode: t
  evil-mode: t
  evil-local-mode: t
  pixel-scroll-precision-mode: t
  zoom-mode: t
  override-global-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tab-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  context-menu-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  minibuffer-regexp-mode: t
  column-number-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t

Load-path shadows:
/Users/ankit/.config/emacs/elpa/transient-20250605.1546/transient
hides /opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50/share/emacs/31.0.50/lisp/transient
/Users/ankit/.config/emacs/elpa/modus-themes-4.7.0/theme-loaddefs
hides /opt/homebrew/Cellar/emacs-plus <at> 31/31.0.50/share/emacs/31.0.50/lisp/theme-loaddefs

Features:
(ffap two-column net-utils find-cmd evil-collection-grep grep etags
fileloop evil-collection-shortdoc shortdoc consult-org tab-line
popper-echo popper ielm flow-fill shadow emacsbug lisp-mnt sort smiley
gnus-cite mail-extr qp gnus-async gnus-bcklg gnus-agent gnus-srvr
gnus-score score-mode nnvirtual nntp gnus-ml gnus-msg nndoc gnus-cache
gnus-dup mm-archive debbugs-gnu evil-collection-debbugs debbugs
soap-client rng-xsd xsd-regexp debbugs-compat epa-dired yaml-ts-mode
dired-aux tramp-cmds windmove pcmpl-unix em-unix em-term
evil-collection-term term ehelp em-script em-pred em-ls em-hist em-glob
em-extpipe em-cmpl em-dirs em-basic em-banner em-alias em-tramp
evil-collection-eshell em-prompt esh-mode esh-var eshell esh-cmd esh-ext
esh-proc esh-opt esh-io esh-arg esh-module esh-module-loaddefs esh-util
ispell vertico-directory org-indent oc-basic disp-table ol-eww ol-rmail
ol-mhe ol-irc ol-info ol-gnus nnselect gnus-art mm-uu mml2015 mm-view
mml-smime smime dig gnus-sum gnus-group gnus-undo gnus-start gnus-dbus
dbus gnus-cloud nnimap nnmail mail-source utf7 nnoo gnus-spec gnus-int
gnus-range gnus-win ol-docview evil-collection-doc-view doc-view
jka-compr evil-collection-image image-mode exif ol-bibtex bibtex ol-bbdb
ol-w3m ol-doi org-link-doi org-clock gptel-org org-protocol 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 org-attach org-element org-persist
org-id org-refile org-element-ast inline avl-tree generator org-crypt
evil-collection-org arg-ol-azuredevops arg-ol-gitea arg-ol-github
orgit-forge orgit ob-shell ob-lisp ob-hurl org ob ob-tangle ob-ref
ob-lob ob-table ob-exp org-macro org-src evil-collection-sh-script
sh-script smie executable ob-comint org-pcomplete org-list org-footnote
org-faces org-entities org-version ob-emacs-lisp ob-core ob-eval
org-cycle org-table ol org-fold org-fold-core org-keys oc org-loaddefs
evil-collection-ibuffer ibuffer ibuffer-loaddefs conf-mode
emacsql-sqlite-builtin evil-collection-forge forge-repos forge-tablist
forge-topics forge-commands forge-semi forge-bitbucket buck forge-gogs
gogs forge-gitea gtea forge-gitlab glab forge-github ghub-graphql treepy
gsexp ghub let-alist forge-forgejo forge-notify forge-revnote
forge-pullreq forge-issue forge-discussion forge-topic yaml eieio-custom
bug-reference forge-post evil-collection-markdown-mode markdown-mode
evil-collection-outline noutline outline forge-repo forge forge-core
forge-db closql emacsql-sqlite emacsql emacsql-compiler eieio-base
magit-bookmark 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 evil-collection-magit-repos
magit-repos magit-apply magit-wip magit-log which-func magit-diff
evil-collection-smerge-mode smerge-mode diff git-commit
evil-collection-log-edit log-edit message sendmail yank-media
evil-collection-dired dired dired-loaddefs rfc822 mml mml-sec mm-decode
mm-bodies mm-encode mailabbrev gmm-utils mailheader pcvs-util add-log
magit-core magit-autorevert magit-margin magit-transient magit-process
evil-collection-with-editor with-editor server magit-mode benchmark
magit-git magit-base evil-collection-magit-section magit-section
cursor-sensor crm llama misearch multi-isearch tramp-cache time-stamp
tramp-sh evil-collection-compile compile evil-collection-calendar
cal-menu calendar cal-loaddefs org-compat org-macs
evil-collection-consult consult-xref evil-collection-xref xref project
consult evil-collection-bookmark bookmark textsec uni-scripts
idna-mapping uni-confusable textsec-check gnutls network-stream url-http
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums url-gw nsm url-cache
url-auth evil-collection-eww eww vtable url-queue shr pixel-fill kinsoku
url-file puny mm-url evil-collection-vc-git vc-git
evil-collection-diff-mode diff-mode track-changes vc-dispatcher
display-line-numbers hl-line hideshow elec-pair yasnippet pulse
face-remap gptel-curl vertico-sort gptel-transient gptel-integrations
mcp-hub mcp jsonrpc gptel-openai-extras cus-start gptel-gh epa-file
evil-collection-epa epa epg rfc6068 epg-config evil-collection-gptel
gptel gptel-openai gcmh savehist evil-collection-vertico marginalia
vertico evil-collection-which-key which-key corfu-popupinfo
evil-collection-corfu kind-icon svg-lib color svg dom xml corfu
autorevert filenotify evil-commentary evil-commentary-integration
tramp-rio rio kubed-tramp tramp trampver tramp-integration files-x
tramp-message tramp-compat shell parse-time iso8601 tramp-loaddefs
kubed-transient transient format-spec derived kubed kubed-common
evil-collection-gnus gnus nnheader gnus-util text-property-search
time-date mail-utils range mm-util mail-prsvr evil-collection-custom
cus-edit pp cus-load wid-edit just-mode c++-ts-mode c-ts-mode
c-ts-common treesit pcomplete evil-collection-comint comint ansi-osc
ansi-color evil-collection-unimpaired evil-collection-tabulated-list
evil-collection-tab-bar evil-collection-simple evil-collection-replace
evil-collection-process-menu evil-collection-package-menu
evil-collection-kmacro evil-collection-info evil-collection-indent
evil-collection-imenu evil-collection-helpful evil-collection-help
evil-collection-elisp-refs evil-collection-elisp-mode
evil-collection-eldoc evil-collection-edebug evil-collection-debug
evil-collection-buff-menu evil-collection annalist evil evil-integration
evil-maps evil-commands evil-digraphs reveal evil-jumps
evil-command-window evil-types evil-search evil-ex evil-macros
evil-repeat evil-states evil-core comp comp-cstr comp-run comp-common rx
evil-common thingatpt rect evil-vars helpful cc-langs cc-vars cc-defs
imenu trace cl-print edebug debug backtrace info-look find-func f
help-fns radix-tree elisp-refs s dash modus-vivendi-theme modus-themes
fontaine pixel-scroll cua-base ring orderless zoom no-littering compat
exec-path-from-shell finder-inf use-package-ensure edmacro kmacro
use-package-bind-key bind-key easy-mmode cl-extra help-mode
use-package-core caddyfile-mode-autoloads chess-autoloads
consult-cscope-autoloads corfu-autoloads dape-autoloads
debbugs-autoloads eat-autoloads embark-consult-autoloads
consult-autoloads embark-autoloads empv-autoloads
evil-collection-autoloads annalist-autoloads evil-commentary-autoloads
evil-autoloads exec-path-from-shell-autoloads fish-mode-autoloads
fontaine-autoloads gcmh-autoloads geiser-guile-autoloads
geiser-autoloads goto-chg-autoloads gptel-autoloads hcl-mode-autoloads
helpful-autoloads elisp-refs-autoloads f-autoloads dash-autoloads
hurl-mode-autoloads just-mode-autoloads kind-icon-autoloads
kubed-autoloads logos-autoloads loop-autoloads marginalia-autoloads
mcp-autoloads modus-themes-autoloads no-littering-autoloads
olivetti-autoloads orderless-autoloads org-pomodoro-autoloads
alert-autoloads log4e-autoloads gntp-autoloads orgit-forge-autoloads
orgit-autoloads forge-autoloads markdown-mode-autoloads magit-autoloads
pcase magit-section-autoloads ghub-autoloads llama-autoloads
closql-autoloads emacsql-autoloads pikchr-mode-autoloads
popper-autoloads rfc-mode-autoloads s-autoloads sly-autoloads warnings
svg-lib-autoloads transient-autoloads treepy-autoloads vertico-autoloads
vundo-autoloads info with-editor-autoloads yaml-autoloads
yasnippet-autoloads zoom-autoloads 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 cl-seq eieio eieio-core cl-macs icons password-cache json
subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib
rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/ns-win ns-win
ucs-normalize mule-util term/common-win 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 kqueue cocoa ns lcms2
multi-tty make-network-process tty-child-frames native-compile emacs)

Memory information:
((conses 16 1703241 4063641) (symbols 48 81365 175) (strings 32 380928 186837)
(string-bytes 1 12234737) (vectors 16 179905) (vector-slots 8 2849359 2742466)
(floats 8 1069 29813) (intervals 56 45557 12734) (buffers 1064 51))

-- 
Ankit




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79158; Package emacs. (Sat, 02 Aug 2025 17:09:01 GMT) Full text and rfc822 format available.

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

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Ankit Gadiya via "Bug reports for GNU Emacs, the Swiss army knife of
 text editors" <bug-gnu-emacs <at> gnu.org>
Cc: 79158 <at> debbugs.gnu.org, Ankit Gadiya <ankit <at> argp.in>
Subject: Re: bug#79158: 31.0.50; epa-dired is not tramp-aware
Date: Sat, 02 Aug 2025 19:08:12 +0200
Ankit Gadiya via "Bug reports for GNU Emacs, the Swiss army knife of
text editors" <bug-gnu-emacs <at> gnu.org> writes:

Hi,

> The epa-dired commands like epa-dired-do-decrypt do not work in the
> dired buffer under tramp.
>
> Steps to reproduce:
>
> 1. Open the dired buffer over tramp using
>    /ssh:user <at> hostname:/path/to/directory
> 2. Mark the file with the .gpg extension in the dired buffer using
>    dired-mark.
> 3. Call the M-x epa-dired-do-decrypt command.
>
> Behavior:
>
> It appears like epa-dired is passing the tramp-path verbatim to the gpg.
> I've updated the tramp-path to remove identifiers.
>
> Error while decrypting with "/opt/homebrew/bin/gpg":
>
> gpg: can't open '/ssh:user <at> hostname:/path/to/file.gpg': No such file
> or directory
> gpg: decrypt_message failed: No such file or directory
>
> Expected Behavior:
>
> I expected the command to be aware of Tramp paths. In case of Tramp
> files:
> 1. Write the file to a temporary local file
> 2. Decrypt it using local GPG keys.
> 3. Write the decrypted file back to the remote location with the file name
>    accepted as the input.

Alternatively, we could let gpg run on the remote host.

Best regards, Michael.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79158; Package emacs. (Sat, 02 Aug 2025 17:09:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79158; Package emacs. (Sat, 02 Aug 2025 17:37:02 GMT) Full text and rfc822 format available.

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

From: Ankit Gadiya <ankit <at> argp.in>
To: Michael Albinus <michael.albinus <at> gmx.de>
Cc: 79158 <at> debbugs.gnu.org
Subject: Re: bug#79158: 31.0.50; epa-dired is not tramp-aware
Date: Sat, 2 Aug 2025 23:05:56 +0530
On Sat, 2 Aug 2025 at 22:38, Michael Albinus <michael.albinus <at> gmx.de> wrote:
>
> Ankit Gadiya via "Bug reports for GNU Emacs, the Swiss army knife of
> text editors" <bug-gnu-emacs <at> gnu.org> writes:
>
> Hi,
>
> > The epa-dired commands like epa-dired-do-decrypt do not work in the
> > dired buffer under tramp.
> >
> > Steps to reproduce:
> >
> > 1. Open the dired buffer over tramp using
> >    /ssh:user <at> hostname:/path/to/directory
> > 2. Mark the file with the .gpg extension in the dired buffer using
> >    dired-mark.
> > 3. Call the M-x epa-dired-do-decrypt command.
> >
> > Behavior:
> >
> > It appears like epa-dired is passing the tramp-path verbatim to the gpg.
> > I've updated the tramp-path to remove identifiers.
> >
> > Error while decrypting with "/opt/homebrew/bin/gpg":
> >
> > gpg: can't open '/ssh:user <at> hostname:/path/to/file.gpg': No such file
> > or directory
> > gpg: decrypt_message failed: No such file or directory
> >
> > Expected Behavior:
> >
> > I expected the command to be aware of Tramp paths. In case of Tramp
> > files:
> > 1. Write the file to a temporary local file
> > 2. Decrypt it using local GPG keys.
> > 3. Write the decrypted file back to the remote location with the file name
> >    accepted as the input.
>
> Alternatively, we could let gpg run on the remote host.
>
> Best regards, Michael.

In my use-case, I don't have the GPG keys configured on the remote host. The
remote host may not even have GPG installed.

Potentially, it can be exposed as a flag in the function to determine which GPG
to use.

-- 
Ankit




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#79158; Package emacs. (Sun, 03 Aug 2025 06:55:02 GMT) Full text and rfc822 format available.

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

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Ankit Gadiya <ankit <at> argp.in>
Cc: 79158 <at> debbugs.gnu.org
Subject: Re: bug#79158: 31.0.50; epa-dired is not tramp-aware
Date: Sun, 03 Aug 2025 08:54:04 +0200
Ankit Gadiya <ankit <at> argp.in> writes:

Hi,

> In my use-case, I don't have the GPG keys configured on the remote host. The
> remote host may not even have GPG installed.

I don't use epa in Emacs; my opinion doesn't count. However, as a naïve
user I would expect the gpg keys to be on the same host as the encrypted
files.

> Potentially, it can be exposed as a flag in the function to determine which GPG
> to use.

Sounds more complicate. Let the epa maintainer decide what's best.

Best regards, Michael.




This bug report was last modified 12 days ago.

Previous Next


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