mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 20:08:10 +01:00
emacs: Add callback functions to crypto sigstatus button.
This adds two callback functions to the sigstatus button. If the sig status is "good", then clicking the button displays the output of "gpg --list-keys" on the key fingerprint. If the sigstatus is "bad", then clicking the button will retrieve the key from the keyserver, and redisplay the current buffer. Thanks to David Bremner <bremner@unb.ca> for help with this.
This commit is contained in:
parent
fbe3c38655
commit
d1519d256a
1 changed files with 42 additions and 10 deletions
|
@ -70,20 +70,26 @@ search."
|
||||||
(let* ((status (plist-get sigstatus :status))
|
(let* ((status (plist-get sigstatus :status))
|
||||||
(help-msg nil)
|
(help-msg nil)
|
||||||
(label "Signature not processed")
|
(label "Signature not processed")
|
||||||
(face 'notmuch-crypto-signature-unknown))
|
(face 'notmuch-crypto-signature-unknown)
|
||||||
|
(button-action '(lambda (button) (message (button-get button 'help-echo)))))
|
||||||
(cond
|
(cond
|
||||||
((string= status "good")
|
((string= status "good")
|
||||||
; if userid present, userid has full or greater validity
|
(let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint))))
|
||||||
(if (plist-member sigstatus :userid)
|
;; if userid present, userid has full or greater validity
|
||||||
(let ((userid (plist-get sigstatus :userid)))
|
(if (plist-member sigstatus :userid)
|
||||||
(setq label (concat "Good signature by: " userid))
|
(let ((userid (plist-get sigstatus :userid)))
|
||||||
(setq face 'notmuch-crypto-signature-good))
|
(setq label (concat "Good signature by: " userid))
|
||||||
(let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint))))
|
(setq face 'notmuch-crypto-signature-good))
|
||||||
(setq label (concat "Good signature by key: " fingerprint))
|
(progn
|
||||||
(setq face 'notmuch-crypto-signature-good-key))))
|
(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")
|
((string= status "error")
|
||||||
(let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
|
(let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
|
||||||
(setq label (concat "Unknown key ID " keyid " or unsupported algorithm"))))
|
(setq label (concat "Unknown key ID " keyid " or unsupported algorithm"))
|
||||||
|
(setq button-action 'notmuch-crypto-sigstatus-error-callback)
|
||||||
|
(setq help-msg (concat "Click to retreive key ID " keyid " from keyserver and redisplay."))))
|
||||||
((string= status "bad")
|
((string= status "bad")
|
||||||
(let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
|
(let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
|
||||||
(setq label (concat "Bad signature (claimed key ID " keyid ")"))
|
(setq label (concat "Bad signature (claimed key ID " keyid ")"))
|
||||||
|
@ -97,10 +103,36 @@ search."
|
||||||
'help-echo help-msg
|
'help-echo help-msg
|
||||||
'face face
|
'face face
|
||||||
'mouse-face face
|
'mouse-face face
|
||||||
|
'action button-action
|
||||||
:notmuch-sigstatus sigstatus
|
:notmuch-sigstatus sigstatus
|
||||||
:notmuch-from from)
|
:notmuch-from from)
|
||||||
(insert "\n")))
|
(insert "\n")))
|
||||||
|
|
||||||
|
(declare-function notmuch-show-refresh-view "notmuch-show" (&optional crypto-switch))
|
||||||
|
|
||||||
|
(defun notmuch-crypto-sigstatus-good-callback (button)
|
||||||
|
(let* ((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 t nil)))
|
||||||
|
(with-selected-window window
|
||||||
|
(with-current-buffer buffer
|
||||||
|
(call-process "gpg" nil t t "--list-keys" fingerprint))
|
||||||
|
(recenter -1))))
|
||||||
|
|
||||||
|
(defun notmuch-crypto-sigstatus-error-callback (button)
|
||||||
|
(let* ((sigstatus (button-get button :notmuch-sigstatus))
|
||||||
|
(keyid (concat "0x" (plist-get sigstatus :keyid)))
|
||||||
|
(buffer (get-buffer-create "*notmuch-crypto-gpg-out*"))
|
||||||
|
(window (display-buffer buffer t nil)))
|
||||||
|
(with-selected-window window
|
||||||
|
(with-current-buffer buffer
|
||||||
|
(call-process "gpg" nil t t "--recv-keys" keyid)
|
||||||
|
(insert "\n")
|
||||||
|
(call-process "gpg" nil t t "--list-keys" keyid))
|
||||||
|
(recenter -1))
|
||||||
|
(notmuch-show-refresh-view)))
|
||||||
|
|
||||||
(defun notmuch-crypto-insert-encstatus-button (encstatus)
|
(defun notmuch-crypto-insert-encstatus-button (encstatus)
|
||||||
(let* ((status (plist-get encstatus :status))
|
(let* ((status (plist-get encstatus :status))
|
||||||
(help-msg nil)
|
(help-msg nil)
|
||||||
|
|
Loading…
Reference in a new issue