unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [PATCH] emacs: Add callback functions to crypto sigstatus button.
@ 2011-05-31 17:07 Jameson Graef Rollins
  2011-06-15  6:03 ` Jameson Graef Rollins
  2011-10-07  7:38 ` Thomas Schwinge
  0 siblings, 2 replies; 4+ messages in thread
From: Jameson Graef Rollins @ 2011-05-31 17:07 UTC (permalink / raw)
  To: Notmuch Mail

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.
---
 emacs/notmuch-crypto.el |   52 +++++++++++++++++++++++++++++++++++++---------
 1 files changed, 42 insertions(+), 10 deletions(-)

diff --git a/emacs/notmuch-crypto.el b/emacs/notmuch-crypto.el
index f03266f..096dc5e 100644
--- a/emacs/notmuch-crypto.el
+++ b/emacs/notmuch-crypto.el
@@ -70,20 +70,26 @@ search."
   (let* ((status (plist-get sigstatus :status))
 	 (help-msg nil)
 	 (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
      ((string= status "good")
-      ; if userid present, userid has full or greater validity
-      (if (plist-member sigstatus :userid)
-	  (let ((userid (plist-get sigstatus :userid)))
-	    (setq label (concat "Good signature by: " userid))
-	    (setq face 'notmuch-crypto-signature-good))
-	(let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint))))
-	  (setq label (concat "Good signature by key: " fingerprint))
-	  (setq face 'notmuch-crypto-signature-good-key))))
+      (let ((fingerprint (concat "0x" (plist-get sigstatus :fingerprint))))
+	;; if userid present, userid has full or greater validity
+	(if (plist-member sigstatus :userid)
+	    (let ((userid (plist-get sigstatus :userid)))
+	      (setq label (concat "Good signature by: " userid))
+	      (setq face 'notmuch-crypto-signature-good))
+	  (progn
+	    (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")
       (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")
       (let ((keyid (concat "0x" (plist-get sigstatus :keyid))))
 	(setq label (concat "Bad signature (claimed key ID " keyid ")"))
@@ -97,10 +103,36 @@ search."
      'help-echo help-msg
      'face face
      'mouse-face face
+     'action button-action
      :notmuch-sigstatus sigstatus
      :notmuch-from from)
     (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)
   (let* ((status (plist-get encstatus :status))
 	 (help-msg nil)
-- 
1.7.4.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] emacs: Add callback functions to crypto sigstatus button.
  2011-05-31 17:07 [PATCH] emacs: Add callback functions to crypto sigstatus button Jameson Graef Rollins
@ 2011-06-15  6:03 ` Jameson Graef Rollins
  2011-10-07  7:38 ` Thomas Schwinge
  1 sibling, 0 replies; 4+ messages in thread
From: Jameson Graef Rollins @ 2011-06-15  6:03 UTC (permalink / raw)
  To: Notmuch Mail

[-- Attachment #1: Type: text/plain, Size: 688 bytes --]

On Tue, 31 May 2011 10:07:13 -0700, Jameson Graef Rollins <jrollins@finestructure.net> wrote:
> 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.

I just want to point out for the record that this patch depends on the
patch series starting at:

id:"1306627784-3401-1-git-send-email-jrollins@finestructure.net"

Sorry for the mixup.

jamie.

[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] emacs: Add callback functions to crypto sigstatus button.
  2011-05-31 17:07 [PATCH] emacs: Add callback functions to crypto sigstatus button Jameson Graef Rollins
  2011-06-15  6:03 ` Jameson Graef Rollins
@ 2011-10-07  7:38 ` Thomas Schwinge
  2011-10-07 17:58   ` Jameson Graef Rollins
  1 sibling, 1 reply; 4+ messages in thread
From: Thomas Schwinge @ 2011-10-07  7:38 UTC (permalink / raw)
  To: Jameson Graef Rollins, Notmuch Mail

[-- Attachment #1: Type: text/plain, Size: 841 bytes --]

Hi!

On Tue, 31 May 2011 10:07:13 -0700, Jameson Graef Rollins <jrollins@finestructure.net> wrote:
> This adds two callback functions to the sigstatus button.  If the sig

First, thanks for this!

> 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.

Now, what happens on redisplay is that (apparently) all the current state
is lost: the point jumps back to its original position (the beginning of
the buffer, for example), messages/parts view toggles are reset, etc.  I
guess that is just how the refresh function works -- but is it really
what we want, and how difficult would it be to preserve that state?


Grüße,
 Thomas

[-- Attachment #2: Type: application/pgp-signature, Size: 489 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] emacs: Add callback functions to crypto sigstatus button.
  2011-10-07  7:38 ` Thomas Schwinge
@ 2011-10-07 17:58   ` Jameson Graef Rollins
  0 siblings, 0 replies; 4+ messages in thread
From: Jameson Graef Rollins @ 2011-10-07 17:58 UTC (permalink / raw)
  To: Thomas Schwinge, Notmuch Mail

[-- Attachment #1: Type: text/plain, Size: 771 bytes --]

On Fri, 07 Oct 2011 09:38:00 +0200, Thomas Schwinge <thomas@schwinge.name> wrote:
> Now, what happens on redisplay is that (apparently) all the current state
> is lost: the point jumps back to its original position (the beginning of
> the buffer, for example), messages/parts view toggles are reset, etc.  I
> guess that is just how the refresh function works -- but is it really
> what we want, and how difficult would it be to preserve that state?

Hi, Thomas.  I agree it would be nice to jump back to the same state in
the thread view that you were at previously.  There's not currently any
good way to do that, though, I don't think.  We would have to be
writing/saving a lot more of the current buffer state.  Suggestions and
patches are of course welcome.

jamie.

[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-10-07 17:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-31 17:07 [PATCH] emacs: Add callback functions to crypto sigstatus button Jameson Graef Rollins
2011-06-15  6:03 ` Jameson Graef Rollins
2011-10-07  7:38 ` Thomas Schwinge
2011-10-07 17:58   ` Jameson Graef Rollins

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).