(require 'epg)
(require 'notmuch-lib)
+(declare-function notmuch-show-get-message-id "notmuch-show" (&optional bare))
+
(defcustom notmuch-crypto-process-mime t
"Should cryptographic MIME parts be processed?
:type 'boolean
:group 'notmuch-crypto)
+(defcustom notmuch-crypto-gpg-program epg-gpg-program
+ "The gpg executable."
+ :type 'string
+ :group 'notmuch-crypto)
+
(defface notmuch-crypto-part-header
'((((class color)
(background dark))
(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 "."))))
-
+ (progn
+ (setq label (concat "Good signature by: " userid))
+ (setq face 'notmuch-crypto-signature-good))
+ (setq label (concat "Good signature by key: " fingerprint))
+ (setq face 'notmuch-crypto-signature-good-key))
+ (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
+ (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 keyserver.")))
-
((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
(insert "\n"))))
(defun notmuch-crypto-sigstatus-good-callback (button)
- (let* ((sigstatus (button-get button :notmuch-sigstatus))
+ (let* ((id (notmuch-show-get-message-id))
+ (sigstatus (button-get button :notmuch-sigstatus))
(fingerprint (concat "0x" (plist-get sigstatus :fingerprint)))
(buffer (get-buffer-create "*notmuch-crypto-gpg-out*"))
(window (display-buffer buffer)))
(with-selected-window window
(with-current-buffer buffer
(goto-char (point-max))
- (call-process epg-gpg-program nil t t "--batch" "--no-tty" "--list-keys" fingerprint))
+ (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))
(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)
"When the user asks for a GPG key to be retrieved
(progn
(notmuch-crypto--set-button-label
button (format "Retrieving key %s asynchronously..." keyid))
- (let ((p (make-process :name "notmuch GPG key retrieval"
- :buffer buffer
- :command (list epg-gpg-program "--recv-keys" keyid)
- :connection-type 'pipe
- :sentinel #'notmuch-crypto--async-key-sentinel
- ;; Create the process stopped so that
- ;; we have time to store the key id,
- ;; etc. on it.
- :stop t)))
+ (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)))
(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)
- (continue-process p)))
+ (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))
- (call-process epg-gpg-program nil t t "--recv-keys" keyid)
+ (insert (format "--- Retrieving key %s:\n" keyid))
+ (call-process notmuch-crypto-gpg-program nil t t "--recv-keys" keyid)
(insert "\n")
- (call-process epg-gpg-program nil t t "--list-keys" keyid))
+ (call-process notmuch-crypto-gpg-program nil t t "--list-keys" keyid))
(recenter -1))
(notmuch-show-refresh-view)))))