mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18:08 +01:00
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:
parent
0844af35eb
commit
66c935cff3
3 changed files with 17 additions and 16 deletions
|
@ -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:
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue