X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=epa.el;h=45f1959868b76fa0eff818c6d91218b94a5aeb12;hb=741cd9e39bc6f55ce7618672ae75b8b0a7654dd7;hp=85421f241456207c2d1a01b8817396b51c2ed34c;hpb=6aca55e1962a3362eface305acc53f644c84b259;p=elisp%2Fepg.git diff --git a/epa.el b/epa.el index 85421f2..45f1959 100644 --- a/epa.el +++ b/epa.el @@ -186,7 +186,6 @@ the separate window." (define-key keymap "r" 'epa-delete-keys) (define-key keymap "i" 'epa-import-keys) (define-key keymap "o" 'epa-export-keys) - (define-key keymap "g" 'epa-list-keys) (define-key keymap "n" 'next-line) (define-key keymap "p" 'previous-line) (define-key keymap " " 'scroll-up) @@ -330,43 +329,6 @@ If ARG is non-nil, mark the current line." (interactive) (funcall epa-exit-buffer-function)) -;;;###autoload -(defun epa-list-keys (&optional name mode) - "List all keys matched with NAME from the keyring. -If MODE is non-nil, it reads the private keyring. Otherwise, it -reads the public keyring." - (interactive - (if current-prefix-arg - (let ((name (read-string "Pattern: " - (if epa-list-keys-arguments - (car epa-list-keys-arguments))))) - (list (if (equal name "") nil name) - (y-or-n-p "Secret keys? "))) - (or epa-list-keys-arguments (list nil nil)))) - (unless (and epa-keys-buffer - (buffer-live-p epa-keys-buffer)) - (setq epa-keys-buffer (generate-new-buffer "*Keys*"))) - (set-buffer epa-keys-buffer) - (epa-key-list-mode) - (let ((inhibit-read-only t) - buffer-read-only - (point (point-min)) - (context (epg-make-context epa-protocol))) - (unless (get-text-property point 'epa-list-keys) - (setq point (next-single-property-change point 'epa-list-keys))) - (when point - (delete-region point - (or (next-single-property-change point 'epa-list-keys) - (point-max))) - (goto-char point)) - (epa--insert-keys context name mode) - (widget-setup) - (set-keymap-parent (current-local-map) widget-keymap)) - (make-local-variable 'epa-list-keys-arguments) - (setq epa-list-keys-arguments (list name mode)) - (goto-char (point-min)) - (pop-to-buffer (current-buffer))) - (defun epa--insert-keys (context name mode) (save-excursion (save-restriction @@ -392,6 +354,55 @@ reads the public keyring." 'start-open t 'end-open t))))) +(defun epa--list-keys (name secret) + (unless (and epa-keys-buffer + (buffer-live-p epa-keys-buffer)) + (setq epa-keys-buffer (generate-new-buffer "*Keys*"))) + (set-buffer epa-keys-buffer) + (epa-key-list-mode) + (let ((inhibit-read-only t) + buffer-read-only + (point (point-min)) + (context (epg-make-context epa-protocol))) + (unless (get-text-property point 'epa-list-keys) + (setq point (next-single-property-change point 'epa-list-keys))) + (when point + (delete-region point + (or (next-single-property-change point 'epa-list-keys) + (point-max))) + (goto-char point)) + (epa--insert-keys context name secret) + (widget-setup) + (set-keymap-parent (current-local-map) widget-keymap)) + (make-local-variable 'epa-list-keys-arguments) + (setq epa-list-keys-arguments (list name secret)) + (goto-char (point-min)) + (pop-to-buffer (current-buffer))) + +;;;###autoload +(defun epa-list-keys (&optional name) + "List all keys matched with NAME from the public keyring." + (interactive + (if current-prefix-arg + (let ((name (read-string "Pattern: " + (if epa-list-keys-arguments + (car epa-list-keys-arguments))))) + (list (if (equal name "") nil name))) + (list nil))) + (epa--list-keys name nil)) + +;;;###autoload +(defun epa-list-secret-keys (&optional name) + "List all keys matched with NAME from the private keyring." + (interactive + (if current-prefix-arg + (let ((name (read-string "Pattern: " + (if epa-list-keys-arguments + (car epa-list-keys-arguments))))) + (list (if (equal name "") nil name))) + (list nil))) + (epa--list-keys name t)) + (defun epa--marked-keys () (or (save-excursion (set-buffer epa-keys-buffer) @@ -442,19 +453,7 @@ If SECRET is non-nil, list secret keys instead of public keys." "Click here or \\[exit-recursive-edit] to finish") "OK") (insert "\n\n") - (if names - (while names - (epa--insert-keys context (car names) secret) - (if (get-text-property (point) 'epa-list-keys) - (epa-mark)) - (goto-char (point-max)) - (setq names (cdr names))) - (if secret - (progn - (epa--insert-keys context nil secret) - (if (get-text-property (point) 'epa-list-keys) - (epa-mark))) - (epa--insert-keys context nil nil))) + (epa--insert-keys context names secret) (widget-setup) (set-keymap-parent (current-local-map) widget-keymap) (setq epa-exit-buffer-function #'abort-recursive-edit) @@ -561,7 +560,7 @@ If SECRET is non-nil, list secret keys instead of public keys." (defun epa-display-info (info) (if epa-popup-info-window (save-selected-window - (unless epa-info-buffer + (unless (and epa-info-buffer (buffer-live-p epa-info-buffer)) (setq epa-info-buffer (generate-new-buffer "*Info*"))) (if (get-buffer-window epa-info-buffer) (delete-window (get-buffer-window epa-info-buffer))) @@ -819,16 +818,28 @@ Don't use this command in Lisp programs!" Don't use this command in Lisp programs!" (interactive "r") - (let ((context (epg-make-context epa-protocol))) + (let ((context (epg-make-context epa-protocol)) + plain) (epg-context-set-progress-callback context #'epa-progress-callback-function "Verifying...") - (epg-verify-string context - (epa--encode-coding-string - (buffer-substring start end) - (or coding-system-for-write - (get-text-property start - 'epa-coding-system-used)))) + (setq plain (epg-verify-string + context + (epa--encode-coding-string + (buffer-substring start end) + (or coding-system-for-write + (get-text-property start + 'epa-coding-system-used))))) + (if (y-or-n-p "Replace the original text? ") + (let ((inhibit-read-only t) + buffer-read-only) + (delete-region start end) + (goto-char start) + (insert plain)) + (with-output-to-temp-buffer "*Temp*" + (set-buffer standard-output) + (insert plain) + (epa-info-mode))) (if (epg-context-result-for context 'verify) (epa-display-info (epg-verify-result-to-string (epg-context-result-for context 'verify)))))) @@ -844,19 +855,19 @@ Don't use this command in Lisp programs!" (save-restriction (narrow-to-region start end) (goto-char start) - (let (armor-start armor-end) + (let (cleartext-start cleartext-end) (while (re-search-forward "-----BEGIN PGP SIGNED MESSAGE-----$" nil t) - (setq armor-start (match-beginning 0)) + (setq cleartext-start (match-beginning 0)) (unless (re-search-forward "^-----BEGIN PGP SIGNATURE-----$" nil t) (error "Invalid cleartext signed message")) - (setq armor-end (re-search-forward + (setq cleartext-end (re-search-forward "^-----END PGP SIGNATURE-----$" nil t)) - (unless armor-end - (error "No armor tail")) - (epa-verify-region armor-start armor-end)))))) + (unless cleartext-end + (error "No cleartext tail")) + (epa-verify-region cleartext-start cleartext-end)))))) (if (fboundp 'select-safe-coding-system) (defalias 'epa--select-safe-coding-system 'select-safe-coding-system)