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.
This commit is contained in:
Austin Clements 2012-12-15 15:04:16 -05:00 committed by David Bremner
parent 0844af35eb
commit 66c935cff3
3 changed files with 17 additions and 16 deletions

View file

@ -371,6 +371,20 @@ contents of ERR-FILE will be included in the error message."
;; Mimic `process-lines' ;; Mimic `process-lines'
(error "%s exited with status %s" (car command) exit-status)))) (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. ;; Compatibility functions for versions of emacs before emacs 23.
;; ;;
;; Both functions here were copied from emacs 23 with the following copyright: ;; Both functions here were copied from emacs 23 with the following copyright:

View file

@ -158,13 +158,7 @@ list."
(setq args (append args (list query-string))) (setq args (append args (list query-string)))
;; Get the reply object as JSON, and parse it into an elisp object. ;; Get the reply object as JSON, and parse it into an elisp object.
(with-temp-buffer (setq reply (apply #'notmuch-call-notmuch-json args))
(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))))
;; Extract the original message to simplify the following code. ;; Extract the original message to simplify the following code.
(setq original (plist-get reply :original)) (setq original (plist-get reply :original))

View 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 list where the first element is a message, and the second element
is a possibly empty forest of replies. is a possibly empty forest of replies.
" "
(let ((args '("show" "--format=json")) (let ((args '("show" "--format=json")))
(json-object-type 'plist)
(json-array-type 'list)
(json-false 'nil))
(if notmuch-show-process-crypto (if notmuch-show-process-crypto
(setq args (append args '("--decrypt")))) (setq args (append args '("--decrypt"))))
(setq args (append args search-terms)) (setq args (append args search-terms))
(with-temp-buffer (apply #'notmuch-call-notmuch-json args)))
(progn
(apply 'call-process (append (list notmuch-command nil (list t nil) nil) args))
(goto-char (point-min))
(json-read)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Mapping functions across collections of messages. ;; Mapping functions across collections of messages.