aboutsummaryrefslogtreecommitdiffhomepage
path: root/emacs
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@MIT.EDU>2012-12-15 15:04:16 -0500
committerGravatar David Bremner <bremner@debian.org>2012-12-16 17:00:22 -0400
commit66c935cff37fcab1ef7b0a5cecf5bc1c62d8d2ed (patch)
tree1fb3f2df33641c2813f6be80cdb5fc0f40b97061 /emacs
parent0844af35eb9a4843fbf7053ca37f9f69bbafdcb1 (diff)
emacs: Factor out synchronous notmuch JSON invocations
Previously this code was duplicated between show and reply. This factors out synchronously invoking notmuch and parsing the output as JSON.
Diffstat (limited to 'emacs')
-rw-r--r--emacs/notmuch-lib.el14
-rw-r--r--emacs/notmuch-mua.el8
-rw-r--r--emacs/notmuch-query.el11
3 files changed, 17 insertions, 16 deletions
diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
index 92c8417a..c3d76d22 100644
--- a/emacs/notmuch-lib.el
+++ b/emacs/notmuch-lib.el
@@ -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:
diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el
index 408b49e0..ac2d29ec 100644
--- a/emacs/notmuch-mua.el
+++ b/emacs/notmuch-mua.el
@@ -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))
diff --git a/emacs/notmuch-query.el b/emacs/notmuch-query.el
index d66baeab..e7e35207 100644
--- a/emacs/notmuch-query.el
+++ b/emacs/notmuch-query.el
@@ -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.