X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=emacs%2Fnotmuch-crypto.el;h=c201d0d740360f7ba3ebde66e170ffebbddbe736;hp=928de0bbd926b31f94604c9146a0eb3cdd9d2018;hb=HEAD;hpb=ea16b5ba850ae0cfad619ef2b0995a5b30ae3ebc diff --git a/emacs/notmuch-crypto.el b/emacs/notmuch-crypto.el index 928de0bb..a1cf3ddd 100644 --- a/emacs/notmuch-crypto.el +++ b/emacs/notmuch-crypto.el @@ -1,4 +1,4 @@ -;;; notmuch-crypto.el --- functions for handling display of cryptographic metadata. +;;; notmuch-crypto.el --- functions for handling display of cryptographic metadata -*- lexical-binding: t -*- ;; ;; Copyright © Jameson Rollins ;; @@ -24,8 +24,12 @@ (require 'epg) (require 'notmuch-lib) +(declare-function notmuch-show-get-message-id "notmuch-show" (&optional bare)) + +;;; Options + (defcustom notmuch-crypto-process-mime t - "Should cryptographic MIME parts be processed? + "Whether to process cryptographic MIME parts. If this variable is non-nil signatures in multipart/signed messages will be verified and multipart/encrypted parts will be @@ -44,7 +48,7 @@ mode." :group 'notmuch-crypto) (defcustom notmuch-crypto-get-keys-asynchronously t - "Retrieve gpg keys asynchronously." + "Whether to retrieve openpgp keys asynchronously." :type 'boolean :group 'notmuch-crypto) @@ -53,6 +57,8 @@ mode." :type 'string :group 'notmuch-crypto) +;;; Faces + (defface notmuch-crypto-part-header '((((class color) (background dark)) @@ -94,15 +100,16 @@ mode." :group 'notmuch-crypto :group 'notmuch-faces) +;;; Functions + (define-button-type 'notmuch-crypto-status-button-type - 'action (lambda (button) (message (button-get button 'help-echo))) + 'action (lambda (button) (message "%s" (button-get button 'help-echo))) 'follow-link t 'help-echo "Set notmuch-crypto-process-mime to process cryptographic mime parts." :supertype 'notmuch-button-type) (defun notmuch-crypto-insert-sigstatus-button (sigstatus from) - "Insert a button describing the signature status SIGSTATUS sent -by user FROM." + "Insert a button describing the signature status SIGSTATUS sent by user FROM." (let* ((status (plist-get sigstatus :status)) (show-button t) (face 'notmuch-crypto-signature-unknown) @@ -112,26 +119,24 @@ by user FROM." (cond ((string= status "good") (let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint))) - (userid (plist-get sigstatus :userid))) - ;; If userid is present it has full or greater validity. - (if userid - (setq label (concat "Good signature by: " userid) - face 'notmuch-crypto-signature-good) - (setq label (concat "Good signature by key: " fingerprint) - face 'notmuch-crypto-signature-good-key)) - (setq button-action 'notmuch-crypto-sigstatus-good-callback - help-msg (concat "Click to list key ID 0x" fingerprint ".")))) - + (email-or-userid (or (plist-get sigstatus :email) + (plist-get sigstatus :userid)))) + ;; If email or userid are present, they have full or greater validity. + (setq label (concat "Good signature by key: " fingerprint)) + (setq face 'notmuch-crypto-signature-good-key) + (when email-or-userid + (setq label (concat "Good signature by: " email-or-userid)) + (setq face 'notmuch-crypto-signature-good)) + (setq button-action 'notmuch-crypto-sigstatus-good-callback) + (setq help-msg (concat "Click to list key ID 0x" fingerprint ".")))) ((string= status "error") - (setq label (concat "Unknown key ID " keyid " or unsupported algorithm") - button-action 'notmuch-crypto-sigstatus-error-callback - help-msg (concat "Click to retrieve key ID " keyid - " from keyserver."))) - + (setq label (concat "Unknown key ID " keyid " or unsupported algorithm")) + (setq button-action 'notmuch-crypto-sigstatus-error-callback) + (setq help-msg (concat "Click to retrieve key ID " keyid + " from key server."))) ((string= status "bad") - (setq label (concat "Bad signature (claimed key ID " keyid ")") - face 'notmuch-crypto-signature-bad)) - + (setq label (concat "Bad signature (claimed key ID " keyid ")")) + (setq face 'notmuch-crypto-signature-bad)) (status (setq label (concat "Unknown signature status: " status))) (t @@ -159,13 +164,14 @@ by user FROM." (goto-char (point-max)) (insert (format "-- Key %s in message %s:\n" fingerprint id)) - (call-process notmuch-crypto-gpg-program nil t t "--batch" "--no-tty" "--list-keys" fingerprint)) + (notmuch--call-process notmuch-crypto-gpg-program nil t t + "--batch" "--no-tty" "--list-keys" fingerprint)) (recenter -1)))) (declare-function notmuch-show-refresh-view "notmuch-show" (&optional reset-state)) (declare-function notmuch-show-get-message-id "notmuch-show" (&optional bare)) -(defun notmuch-crypto--async-key-sentinel (process event) +(defun notmuch-crypto--async-key-sentinel (process _event) "When the user asks for a GPG key to be retrieved asynchronously, handle completion of that task. @@ -218,25 +224,25 @@ corresponding key when the status button is pressed." (with-current-buffer buffer (goto-char (point-max)) (insert (format "--- Retrieving key %s:\n" keyid))) - (let ((p (make-process :name "notmuch GPG key retrieval" - :connection-type 'pipe - :buffer buffer - :stderr buffer - :command (list notmuch-crypto-gpg-program "--recv-keys" keyid) - :sentinel #'notmuch-crypto--async-key-sentinel))) + (let ((p (notmuch--make-process + :name "notmuch GPG key retrieval" + :connection-type 'pipe + :buffer buffer + :stderr buffer + :command (list notmuch-crypto-gpg-program "--recv-keys" keyid) + :sentinel #'notmuch-crypto--async-key-sentinel))) (process-put p :gpg-key-id keyid) (process-put p :notmuch-show-buffer (current-buffer)) (process-put p :notmuch-show-point (point)) (message "Getting the GPG key %s asynchronously..." keyid))) - (let ((window (display-buffer buffer))) (with-selected-window window (with-current-buffer buffer (goto-char (point-max)) (insert (format "--- Retrieving key %s:\n" keyid)) - (call-process notmuch-crypto-gpg-program nil t t "--recv-keys" keyid) + (notmuch--call-process notmuch-crypto-gpg-program nil t t "--recv-keys" keyid) (insert "\n") - (call-process notmuch-crypto-gpg-program nil t t "--list-keys" keyid)) + (notmuch--call-process notmuch-crypto-gpg-program nil t t "--list-keys" keyid)) (recenter -1)) (notmuch-show-refresh-view))))) @@ -252,14 +258,14 @@ corresponding key when the status button is pressed." "Decryption error") (t (concat "Unknown encryption status" - (if status (concat ": " status)))))) + (and status (concat ": " status)))))) " ]") :type 'notmuch-crypto-status-button-type 'face 'notmuch-crypto-decryption 'mouse-face 'notmuch-crypto-decryption) (insert "\n")) -;; +;;; _ (provide 'notmuch-crypto)