X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=epa.el;h=fa1f6bf37c55d4d16450f4e6a3daf5b504c6b726;hb=f4a0e4453626050f816bce237441b2c5bd511386;hp=6e96a7b856846446391fddd6d3cfc269db9bef46;hpb=7f1f6fca222a32fc153ffddfc180d3d0855c2650;p=elisp%2Fepg.git diff --git a/epa.el b/epa.el index 6e96a7b..fa1f6bf 100644 --- a/epa.el +++ b/epa.el @@ -36,8 +36,6 @@ "Faces for epa-mode." :group 'epa) -(defvar epa-buffer nil) - (defface epa-validity-high-face '((((class color) (background dark)) (:foreground "PaleTurquoise" :bold t)) @@ -222,30 +220,17 @@ (put-text-property point (point) 'epa-key (car keys)) (setq keys (cdr keys))))) -(defun epa-ask-keys (prompt function &optional names &rest args) +(defun epa-select-keys (prompt &optional names) (unless (and epa-keys-buffer (buffer-live-p epa-keys-buffer)) (setq epa-keys-buffer (generate-new-buffer "*Keys*"))) - (let ((buffer (current-buffer)) - (inhibit-read-only t) + (let ((inhibit-read-only t) buffer-read-only) (set-buffer epa-keys-buffer) (erase-buffer) - (insert prompt) - (widget-create 'push-button - :tag "Done" - :notify (lambda (widget &rest ignore) - (let ((callback (widget-value widget)) - keys key) - (while (re-search-forward "^\\*" nil t) - (if (setq key (get-text-property (point) - 'epa-key)) - (setq keys (cons key keys)))) - (set-buffer (car callback)) - (apply (car (cdr callback)) keys - (cdr (cdr callback))))) - (cons buffer (cons function args))) - (insert "\n\n") + (insert prompt "\n\n" + (substitute-command-keys "\\[exit-recursive-edit] to exit.") + "\n\n") (if names (while names (epa-list-keys-1 (car names)) @@ -253,7 +238,20 @@ (epa-list-keys-1 nil)) (epa-keys-mode) (goto-char (point-min)) - (pop-to-buffer (current-buffer)))) + (pop-to-buffer (current-buffer)) + (unwind-protect + (progn + (recursive-edit) + (save-excursion + (set-buffer epa-keys-buffer) + (goto-char (point-min)) + (let (keys key) + (while (re-search-forward "^\\*" nil t) + (if (setq key (get-text-property (match-beginning 0) 'epa-key)) + (setq keys (cons key keys)))) + (nreverse keys)))) + (if (get-buffer-window epa-keys-buffer) + (delete-window (get-buffer-window epa-keys-buffer)))))) (defun epa-show-key (key) (let* ((primary-sub-key (car (epg-key-sub-key-list key)))