`inhibit-redisplay' makes debugging hard - note this in a comment. --- emacs/notmuch.el | 81 ++++++++++++++++++++++++++++-------------------------- 1 files changed, 42 insertions(+), 39 deletions(-) diff --git a/emacs/notmuch.el b/emacs/notmuch.el index d561c6e..20d954b 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -722,10 +722,13 @@ foreground and blue background." (defun notmuch-search-process-insert (proc buffer string) (with-current-buffer buffer (let ((inhibit-read-only t) + ;; Comment out this next line to allow useful single-step + ;; during debugging. (inhibit-redisplay t) ;; Vectors are not as useful here. (json-array-type 'list) (json-object-type 'plist)) + (save-excursion ;; Insert the text, advancing the process marker (goto-char (point-max)) @@ -739,46 +742,46 @@ foreground and blue background." (save-excursion (goto-char notmuch-search-parse-start) - (while - (let ((next-char (json-peek))) - (cond - ;; No more data (yet). - ((eq next-char :json-eof) - nil) - - ;; Opening bracket or comma separator between - ;; objects. - ((or (char-equal next-char ?\[) - (char-equal next-char ?\,)) - (json-advance) - (delete-region notmuch-search-parse-start (point)) - t) - - ;; Closing array. - ((char-equal next-char ?\]) - ;; Consume both the closing bracket and any trailing - ;; whitespace (typically a carriage return). - (json-advance) - (json-skip-whitespace) - (delete-region notmuch-search-parse-start (point)) - nil) - - ;; Single object. - ((condition-case nil - (let ((object (json-read-object))) - ;; Delete the object that we consumed. - (delete-region notmuch-search-parse-start (point)) - ;; Insert the corresponding results. - (notmuch-search-process-insert-object object) - t) - (error nil))))) - - ;; Consume any white space between terms. - (let ((p (point))) + (while + (let ((next-char (json-peek))) + (cond + ;; No more data (yet). + ((eq next-char :json-eof) + nil) + + ;; Opening bracket or comma separator between + ;; objects. + ((or (char-equal next-char ?\[) + (char-equal next-char ?\,)) + (json-advance) + (delete-region notmuch-search-parse-start (point)) + t) + + ;; Closing array. + ((char-equal next-char ?\]) + ;; Consume both the closing bracket and any trailing + ;; whitespace (typically a carriage return). + (json-advance) (json-skip-whitespace) - (delete-region p (point))) - ;; Remember where we got up to. - (setq notmuch-search-parse-start (point))))))) + (delete-region notmuch-search-parse-start (point)) + nil) + + ;; Single object. + ((condition-case nil + (let ((object (json-read-object))) + ;; Delete the object that we consumed. + (delete-region notmuch-search-parse-start (point)) + ;; Insert the corresponding results. + (notmuch-search-process-insert-object object) + t) + (error nil))))) + + ;; Consume any white space between terms. + (let ((p (point))) + (json-skip-whitespace) + (delete-region p (point))) + ;; Remember where we got up to. + (setq notmuch-search-parse-start (point))))))) (defun notmuch-search-process-filter (proc string) "Process and filter the output of `notmuch search'." -- 1.7.2.3