[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 6477be93bd8 1/2: Make key selection method configurable in EPA.
From: |
Eli Zaretskii |
Subject: |
master 6477be93bd8 1/2: Make key selection method configurable in EPA. |
Date: |
Sat, 17 Feb 2024 04:31:55 -0500 (EST) |
branch: master
commit 6477be93bd8a29cba8ce383f9ea3fba23c45f225
Author: Aleksandr Vityazev <avityazev@disroot.org>
Commit: Eli Zaretskii <eliz@gnu.org>
Make key selection method configurable in EPA.
* lisp/epa.el (epa-keys-select-method): New defcustom.
(epa--select-keys-in-minibuffer): New function.
(epa-select-keys): Use new option and function.
* etc/NEWS: Announce it.
* doc/misc/epa.texi (Key Management): Document it.
(Bug#69133)
---
doc/misc/epa.texi | 7 +++++++
etc/NEWS | 8 ++++++++
lisp/epa.el | 33 ++++++++++++++++++++++++++++++++-
3 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/doc/misc/epa.texi b/doc/misc/epa.texi
index 27a9e2b0ebb..cd6da1dadba 100644
--- a/doc/misc/epa.texi
+++ b/doc/misc/epa.texi
@@ -289,6 +289,13 @@ also ask you whether or not to sign the text before
encryption and if
you answered yes, it will let you select the signing keys.
@end deffn
+You can change the default method that is used to select keys with the
+variable @code{epa-file-select-keys}.
+
+@defvar epa-keys-select-method
+Method used to select keys in @code{epa-select-keys}.
+@end defvar
+
@node Cryptographic operations on files
@section Cryptographic Operations on Files
@cindex cryptographic operations on files
diff --git a/etc/NEWS b/etc/NEWS
index 5220a7fb337..4477116248e 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1365,6 +1365,14 @@ The new user option 'ielm-history-file-name' is the name
of the file
where IELM input history will be saved. Customize it to nil to revert
to the old behavior of not remembering input history between sessions.
+** EasyPG
+
++++
+*** New user option 'epa-keys-select-method'.
+This allows the user to customize the key selection method, which can be
+either by using a pop-up buffer or from the minibuffer. The pop-up
+buffer method is the default, which preserves previous behavior.
+
* New Modes and Packages in Emacs 30.1
diff --git a/lisp/epa.el b/lisp/epa.el
index 53da3bf6cce..b2593bc62ba 100644
--- a/lisp/epa.el
+++ b/lisp/epa.el
@@ -73,6 +73,16 @@ The command `epa-mail-encrypt' uses this."
:group 'epa
:version "24.4")
+(defcustom epa-keys-select-method 'buffer
+ "Method used to select keys in `epa-select-keys'.
+If the value is \\='buffer, the default, keys are selected via a
+pop-up buffer. If the value is \\='minibuffer, keys are selected
+via the minibuffer instead, using `completing-read-multiple'."
+ :type '(choice (const :tag "Read keys from a pop-up buffer" buffer)
+ (const :tag "Read keys from minibuffer" minibuffer))
+ :group 'epa
+ :version "30.1")
+
;;; Faces
(defgroup epa-faces nil
@@ -450,6 +460,25 @@ q trust status questionable. - trust status unspecified.
(epa--marked-keys))
(kill-buffer epa-keys-buffer)))))
+(defun epa--select-keys-in-minibuffer (prompt keys)
+ (let* ((prompt (pcase-let ((`(,first ,second ,third)
+ (string-split prompt "\\."))
+ (hint "(separated by comma)"))
+ (if third
+ (format "%s %s. %s: " first hint second)
+ (format "%s %s: " first hint))))
+ (keys-alist
+ (seq-map
+ (lambda (key)
+ (cons (substring-no-properties
+ (epa--button-key-text key))
+ key))
+ keys))
+ (selected-keys (completing-read-multiple prompt keys-alist)))
+ (seq-map
+ (lambda (key) (cdr (assoc key keys-alist)))
+ selected-keys)))
+
;;;###autoload
(defun epa-select-keys (context prompt &optional names secret)
"Display a user's keyring and ask him to select keys.
@@ -459,7 +488,9 @@ NAMES is a list of strings to be matched with keys. If it
is nil, all
the keys are listed.
If SECRET is non-nil, list secret keys instead of public keys."
(let ((keys (epg-list-keys context names secret)))
- (epa--select-keys prompt keys)))
+ (pcase epa-keys-select-method
+ ('minibuffer (epa--select-keys-in-minibuffer prompt keys))
+ (_ (epa--select-keys prompt keys)))))
;;;; Key Details