Subject: Re: bug#26298: 26.0.50; Gnus fails to sign mail with PGP

From: Noam Postavsky <[email-masked]>
Date: Sun, 29 Apr 2018 10:38:32 -0400

Toon Claes <[email-masked]> writes:
> If I add the following line to `mml-secure-epg-sign', I can successfully
> sign my email:
>
> #+begin_src emacs-lisp :tangle yes
>     (setf (epg-context-pinentry-mode context) 'loopback)
> #+end_src
>
> Now I also understand why `epa-sign-file' works, I have set
> `(setq epa-pinentry-mode 'loopback)' in my init.el.
>
> But, I could use some advice on building a proper fix that would work
> for everyone. We could do something similar like as epa.el does, and add
> yet another defcustom, but doesn't feel very DRY.
> So I hope someone can chime in to give some advice.

So perhaps the best solution is simply rename epa-pinentry-mode to
epg-pinentry-mode, and use it is as the default
epg-context-pinentry-mode value (see attached).

>From 937c2cf8a751bbc7581a0ca187f4cac023e607b3 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <[email-masked]>
Date: Sun, 29 Apr 2018 10:32:03 -0400
Subject: [PATCH v1] Move epa-pinentry-mode to epg-config (Bug#26298)

* lisp/epa.el (epa-pinentry-mode): Make into obsolete alias for...
* lisp/epg-config.el (epg-pinentry-mode): ...this new user option.
* lisp/epg.el (epg-context): Use it as the default value for
pinentry-mode.
---
 lisp/epa.el        | 23 ++---------------------
 lisp/epg-config.el | 22 ++++++++++++++++++++++
 lisp/epg.el        |  2 +-
 3 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/lisp/epa.el b/lisp/epa.el
index 5c237bca9b..e03933af30 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -56,27 +56,8 @@ epa-info-window-height
   :type 'integer
   :group 'epa)
 
-;; In the doc string below, we say "symbol `error'" to avoid producing
-;; a hyperlink for `error' the function.
-(defcustom epa-pinentry-mode nil
-  "The pinentry mode.
-
-GnuPG 2.1 or later has an option to control the behavior of
-Pinentry invocation.  The value should be the symbol `error',
-`ask', `cancel', or `loopback'.  See the GnuPG manual for the
-meanings.
-
-In epa commands, a particularly useful mode is `loopback', which
-redirects all Pinentry queries to the caller, so Emacs can query
-passphrase through the minibuffer, instead of external Pinentry
-program."
-  :type '(choice (const nil)
-		 (const ask)
-		 (const cancel)
-		 (const error)
-		 (const loopback))
-  :group 'epa
-  :version "25.1")
+(define-obsolete-variable-alias
+  'epa-entry-mode 'epg-entry-mode "27.1")
 
 (defgroup epa-faces nil
   "Faces for epa-mode."
diff --git a/lisp/epg-config.el b/lisp/epg-config.el
index d30ebea2d6..ea57adc12f 100644
--- a/lisp/epg-config.el
+++ b/lisp/epg-config.el
@@ -74,6 +74,28 @@ epg-passphrase-coding-system
   :group 'epg
   :type 'symbol)
 
+
+;; In the doc string below, we say "symbol `error'" to avoid producing
+;; a hyperlink for `error' the function.
+(defcustom epg-pinentry-mode nil
+  "The pinentry mode.
+
+GnuPG 2.1 or later has an option to control the behavior of
+Pinentry invocation.  The value should be the symbol `error',
+`ask', `cancel', or `loopback'.  See the GnuPG manual for the
+meanings.
+
+A particularly useful mode is `loopback', which redirects all
+Pinentry queries to the caller, so Emacs can query passphrase
+through the minibuffer, instead of external Pinentry program."
+  :type '(choice (const nil)
+		 (const ask)
+		 (const cancel)
+		 (const error)
+		 (const loopback))
+  :group 'epa
+  :version "27.1")
+
 (defcustom epg-debug nil
   "If non-nil, debug output goes to the \" *epg-debug*\" buffer.
 Note that the buffer name starts with a space."
diff --git a/lisp/epg.el b/lisp/epg.el
index dc0e2df583..c42520e3db 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -211,7 +211,7 @@ epg--gv-nreverse
   output-file
   result
   operation
-  pinentry-mode
+  (pinentry-mode epg-pinentry-mode)
   (error-output "")
   error-buffer)
 
-- 
2.11.0