emacs: Factor out synchronous notmuch JSON invocations
authorAustin Clements <amdragon@MIT.EDU>
Sat, 15 Dec 2012 20:04:16 +0000 (15:04 -0500)
committerDavid Bremner <bremner@debian.org>
Sun, 16 Dec 2012 21:00:22 +0000 (17:00 -0400)
Previously this code was duplicated between show and reply.  This
factors out synchronously invoking notmuch and parsing the output as
JSON.

emacs/notmuch-lib.el
emacs/notmuch-mua.el
emacs/notmuch-query.el

index 92c8417a9c8bb18a972f5d4a23be152854f70dd0..c3d76d22ab53339adf83cc8b11697023e8b46b7d 100644 (file)
@@ -371,6 +371,20 @@ contents of ERR-FILE will be included in the error message."
     ;; Mimic `process-lines'
     (error "%s exited with status %s" (car command) exit-status))))
 
+(defun notmuch-call-notmuch-json (&rest args)
+  "Invoke `notmuch-command' with `args' and return the parsed JSON output.
+
+The returned output will represent objects using property lists
+and arrays as lists."
+
+  (with-temp-buffer
+    (apply #'call-process notmuch-command nil (list t nil) nil args)
+    (goto-char (point-min))
+    (let ((json-object-type 'plist)
+         (json-array-type 'list)
+         (json-false 'nil))
+      (json-read))))
+
 ;; Compatibility functions for versions of emacs before emacs 23.
 ;;
 ;; Both functions here were copied from emacs 23 with the following copyright:
index 408b49e075068c574f900a756d76551c87ee7eb5..ac2d29ecf5491bc318ac6ed19710d55d01298ee6 100644 (file)
@@ -158,13 +158,7 @@ list."
     (setq args (append args (list query-string)))
 
     ;; Get the reply object as JSON, and parse it into an elisp object.
-    (with-temp-buffer
-      (apply 'call-process (append (list notmuch-command nil (list t nil) nil) args))
-      (goto-char (point-min))
-      (let ((json-object-type 'plist)
-           (json-array-type 'list)
-           (json-false 'nil))
-       (setq reply (json-read))))
+    (setq reply (apply #'notmuch-call-notmuch-json args))
 
     ;; Extract the original message to simplify the following code.
     (setq original (plist-get reply :original))
index d66baeab983b06a6be96abd7ae4bd75c945718a9..e7e352072887f3315a3ede255984b9db9a530006 100644 (file)
@@ -29,18 +29,11 @@ A thread is a forest or list of trees. A tree is a two element
 list where the first element is a message, and the second element
 is a possibly empty forest of replies.
 "
-  (let  ((args '("show" "--format=json"))
-        (json-object-type 'plist)
-        (json-array-type 'list)
-        (json-false 'nil))
+  (let ((args '("show" "--format=json")))
     (if notmuch-show-process-crypto
        (setq args (append args '("--decrypt"))))
     (setq args (append args search-terms))
-    (with-temp-buffer
-      (progn
-       (apply 'call-process (append (list notmuch-command nil (list t nil) nil) args))
-       (goto-char (point-min))
-       (json-read)))))
+    (apply #'notmuch-call-notmuch-json args)))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Mapping functions across collections of messages.