]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch-crypto.el
Merge branch 'release'
[notmuch] / emacs / notmuch-crypto.el
index 096dc5ecb742d9f2c81e7a952a7bfc8e463a081c..68a7e9f3735a814ce70b55948c3cf6ade687aea9 100644 (file)
@@ -1,4 +1,4 @@
-;; notmuch-crypto.el --- functions for handling display of cryptographic metadata.
+;;; notmuch-crypto.el --- functions for handling display of cryptographic metadata.
 ;;
 ;; Copyright © Jameson Rollins
 ;;
 ;;
 ;; Copyright © Jameson Rollins
 ;;
 ;; General Public License for more details.
 ;;
 ;; You should have received a copy of the GNU General Public License
 ;; General Public License for more details.
 ;;
 ;; You should have received a copy of the GNU General Public License
-;; along with Notmuch.  If not, see <http://www.gnu.org/licenses/>.
+;; along with Notmuch.  If not, see <https://www.gnu.org/licenses/>.
 ;;
 ;; Authors: Jameson Rollins <jrollins@finestructure.net>
 
 ;;
 ;; Authors: Jameson Rollins <jrollins@finestructure.net>
 
+;;; Code:
+
+(require 'notmuch-lib)
+
 (defcustom notmuch-crypto-process-mime nil
   "Should cryptographic MIME parts be processed?
 
 (defcustom notmuch-crypto-process-mime nil
   "Should cryptographic MIME parts be processed?
 
@@ -31,47 +35,65 @@ on the success or failure of the verification process and on the
 validity of user ID of the signer.
 
 The effect of setting this variable can be seen temporarily by
 validity of user ID of the signer.
 
 The effect of setting this variable can be seen temporarily by
-viewing a signed or encrypted message with M-RET in notmuch
-search."
-  :group 'notmuch
-  :type 'boolean)
+providing a prefix when viewing a signed or encrypted message, or
+by providing a prefix when reloading the message in notmuch-show
+mode."
+  :type 'boolean
+  :group 'notmuch-crypto)
+
+(defface notmuch-crypto-part-header
+  '((((class color)
+      (background dark))
+     (:foreground "LightBlue1"))
+    (((class color)
+      (background light))
+     (:foreground "blue")))
+  "Face used for crypto parts headers."
+  :group 'notmuch-crypto
+  :group 'notmuch-faces)
 
 (defface notmuch-crypto-signature-good
   '((t (:background "green" :foreground "black")))
   "Face used for good signatures."
 
 (defface notmuch-crypto-signature-good
   '((t (:background "green" :foreground "black")))
   "Face used for good signatures."
-  :group 'notmuch)
+  :group 'notmuch-crypto
+  :group 'notmuch-faces)
 
 (defface notmuch-crypto-signature-good-key
   '((t (:background "orange" :foreground "black")))
   "Face used for good signatures."
 
 (defface notmuch-crypto-signature-good-key
   '((t (:background "orange" :foreground "black")))
   "Face used for good signatures."
-  :group 'notmuch)
+  :group 'notmuch-crypto
+  :group 'notmuch-faces)
 
 (defface notmuch-crypto-signature-bad
   '((t (:background "red" :foreground "black")))
   "Face used for bad signatures."
 
 (defface notmuch-crypto-signature-bad
   '((t (:background "red" :foreground "black")))
   "Face used for bad signatures."
-  :group 'notmuch)
+  :group 'notmuch-crypto
+  :group 'notmuch-faces)
 
 (defface notmuch-crypto-signature-unknown
   '((t (:background "red" :foreground "black")))
   "Face used for signatures of unknown status."
 
 (defface notmuch-crypto-signature-unknown
   '((t (:background "red" :foreground "black")))
   "Face used for signatures of unknown status."
-  :group 'notmuch)
+  :group 'notmuch-crypto
+  :group 'notmuch-faces)
 
 (defface notmuch-crypto-decryption
   '((t (:background "purple" :foreground "black")))
   "Face used for encryption/decryption status messages."
 
 (defface notmuch-crypto-decryption
   '((t (:background "purple" :foreground "black")))
   "Face used for encryption/decryption status messages."
-  :group 'notmuch)
+  :group 'notmuch-crypto
+  :group 'notmuch-faces)
 
 (define-button-type 'notmuch-crypto-status-button-type
 
 (define-button-type 'notmuch-crypto-status-button-type
-  'action '(lambda (button) (message (button-get button 'help-echo)))
+  'action (lambda (button) (message (button-get button 'help-echo)))
   'follow-link t
   'follow-link t
-  'help-echo "Set notmuch-crypto-process-mime to process cryptographic mime parts.")
+  'help-echo "Set notmuch-crypto-process-mime to process cryptographic mime parts."
+  :supertype 'notmuch-button-type)
 
 (defun notmuch-crypto-insert-sigstatus-button (sigstatus from)
   (let* ((status (plist-get sigstatus :status))
         (help-msg nil)
         (label "Signature not processed")
         (face 'notmuch-crypto-signature-unknown)
 
 (defun notmuch-crypto-insert-sigstatus-button (sigstatus from)
   (let* ((status (plist-get sigstatus :status))
         (help-msg nil)
         (label "Signature not processed")
         (face 'notmuch-crypto-signature-unknown)
-        (button-action '(lambda (button) (message (button-get button 'help-echo)))))
+        (button-action (lambda (button) (message (button-get button 'help-echo)))))
     (cond
      ((string= status "good")
       (let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint))))
     (cond
      ((string= status "good")
       (let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint))))
@@ -89,14 +111,14 @@ search."
       (let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
        (setq label (concat "Unknown key ID " keyid " or unsupported algorithm"))
        (setq button-action 'notmuch-crypto-sigstatus-error-callback)
       (let ((keyid (concat "0x" (plist-get sigstatus :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 retreive key ID " keyid " from keyserver and redisplay."))))
+       (setq help-msg (concat "Click to retrieve key ID " keyid " from keyserver and redisplay."))))
      ((string= status "bad")
       (let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
        (setq label (concat "Bad signature (claimed key ID " keyid ")"))
        (setq face 'notmuch-crypto-signature-bad)))
      (t
      ((string= status "bad")
       (let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
        (setq label (concat "Bad signature (claimed key ID " keyid ")"))
        (setq face 'notmuch-crypto-signature-bad)))
      (t
-      (setq label "Unknown signature status")
-      (if status (setq label (concat label " \"" status "\"")))))
+      (setq label (concat "Unknown signature status"
+                         (if status (concat ": " status))))))
     (insert-button
      (concat "[ " label " ]")
      :type 'notmuch-crypto-status-button-type
     (insert-button
      (concat "[ " label " ]")
      :type 'notmuch-crypto-status-button-type
@@ -108,7 +130,7 @@ search."
      :notmuch-from from)
     (insert "\n")))
 
      :notmuch-from from)
     (insert "\n")))
 
-(declare-function notmuch-show-refresh-view "notmuch-show" (&optional crypto-switch))
+(declare-function notmuch-show-refresh-view "notmuch-show" (&optional reset-state))
 
 (defun notmuch-crypto-sigstatus-good-callback (button)
   (let* ((sigstatus (button-get button :notmuch-sigstatus))
 
 (defun notmuch-crypto-sigstatus-good-callback (button)
   (let* ((sigstatus (button-get button :notmuch-sigstatus))
@@ -117,6 +139,7 @@ search."
         (window (display-buffer buffer t nil)))
     (with-selected-window window
       (with-current-buffer buffer
         (window (display-buffer buffer t nil)))
     (with-selected-window window
       (with-current-buffer buffer
+       (goto-char (point-max))
        (call-process "gpg" nil t t "--list-keys" fingerprint))
       (recenter -1))))
 
        (call-process "gpg" nil t t "--list-keys" fingerprint))
       (recenter -1))))
 
@@ -127,6 +150,7 @@ search."
         (window (display-buffer buffer t nil)))
     (with-selected-window window
       (with-current-buffer buffer
         (window (display-buffer buffer t nil)))
     (with-selected-window window
       (with-current-buffer buffer
+       (goto-char (point-max))
        (call-process "gpg" nil t t "--recv-keys" keyid)
        (insert "\n")
        (call-process "gpg" nil t t "--list-keys" keyid))
        (call-process "gpg" nil t t "--recv-keys" keyid)
        (insert "\n")
        (call-process "gpg" nil t t "--list-keys" keyid))
@@ -144,7 +168,8 @@ search."
      ((string= status "bad")
       (setq label "Decryption error"))
      (t
      ((string= status "bad")
       (setq label "Decryption error"))
      (t
-      (setq label (concat "Unknown encstatus \"" status "\""))))
+      (setq label (concat "Unknown encryption status"
+                         (if status (concat ": " status))))))
     (insert-button
      (concat "[ " label " ]")
      :type 'notmuch-crypto-status-button-type
     (insert-button
      (concat "[ " label " ]")
      :type 'notmuch-crypto-status-button-type
@@ -156,3 +181,5 @@ search."
 ;;
 
 (provide 'notmuch-crypto)
 ;;
 
 (provide 'notmuch-crypto)
+
+;;; notmuch-crypto.el ends here