Re: [PATCH 1/3] emacs: Introduce `notmuch-call-notmuch-sexp'

Subject: Re: [PATCH 1/3] emacs: Introduce `notmuch-call-notmuch-sexp'

Date: Mon, 24 Jun 2013 15:11:16 -0400

To: Mark Walters

Cc: notmuch@notmuchmail.org

From: Austin Clements


Yes, and thanks for reminding me about the require's.  I'll do that in
a follow up.  I was thinking of just moving the streaming JSON parser
to a repo on my GitHub account, since maybe somebody some day will
find a use for it, or at least take inspiration from the API (I looked
into streaming JSON parser APIs before embarking on that one and
they're all terrible!)  Mark, you're the only other person who has
touched that code.  Is this plan good with you?

Quoth Mark Walters on Jun 24 at  8:00 pm:
> 
> This series looks good to me +1. 
> 
> Is it worth removing all the json (3 files with (require 'json) and the
> async json parser) too?
> 
> Best wishes
> 
> Mark
> 
> On Mon, 24 Jun 2013, Austin Clements <amdragon@MIT.EDU> wrote:
> > This is just like `notmuch-call-notmuch-json', but parses S-expression
> > output.  Note that, also like `notmuch-call-notmuch-json', this
> > doesn't consider trailing data to be an error, which may or may not be
> > what we want in the long run.
> > ---
> >  emacs/notmuch-lib.el |   17 +++++++++++++++++
> >  1 file changed, 17 insertions(+)
> >
> > diff --git a/emacs/notmuch-lib.el b/emacs/notmuch-lib.el
> > index 534f217..36eacc1 100644
> > --- a/emacs/notmuch-lib.el
> > +++ b/emacs/notmuch-lib.el
> > @@ -484,6 +484,23 @@ an error."
> >  	      (json-read)))
> >  	(delete-file err-file)))))
> >  
> > +(defun notmuch-call-notmuch-sexp (&rest args)
> > +  "Invoke `notmuch-command' with ARGS and return the parsed S-exp output.
> > +
> > +If notmuch exits with a non-zero status, this will pop up a
> > +buffer containing notmuch's output and signal an error."
> > +
> > +  (with-temp-buffer
> > +    (let ((err-file (make-temp-file "nmerr")))
> > +      (unwind-protect
> > +	  (let ((status (apply #'call-process
> > +			       notmuch-command nil (list t err-file) nil args)))
> > +	    (notmuch-check-exit-status status (cons notmuch-command args)
> > +				       (buffer-string) err-file)
> > +	    (goto-char (point-min))
> > +	    (read (current-buffer)))
> > +	(delete-file err-file)))))
> > +
> >  (defun notmuch-start-notmuch (name buffer sentinel &rest args)
> >    "Start and return an asynchronous notmuch command.

Thread: