emacs: Fix notmuch-search-process-filter to handle incomplete lines

This fixes the recently-added emacs-large-search-buffer test. This is
as simple as saving any trailing input and then pre-prepending it on
the next call.

MAny thanks to Thomas Schwinge <thomas@schwinge.name> for tracking
down this problem and contributing a preliminary version of this fix.
This commit is contained in:
Carl Worth 2011-03-10 15:29:24 -08:00
parent 44d3c57e2a
commit 8a534dc60d

View file

@ -736,6 +736,10 @@ non-authors is found, assume that all of the authors match."
do (notmuch-search-insert-field field date count authors subject tags))) do (notmuch-search-insert-field field date count authors subject tags)))
(insert "\n")) (insert "\n"))
(defvar notmuch-search-process-filter-data nil
"Data that has not yet been processed.")
(make-variable-buffer-local 'notmuch-search-process-filter-data)
(defun notmuch-search-process-filter (proc string) (defun notmuch-search-process-filter (proc string)
"Process and filter the output of \"notmuch search\"" "Process and filter the output of \"notmuch search\""
(let ((buffer (process-buffer proc)) (let ((buffer (process-buffer proc))
@ -745,7 +749,9 @@ non-authors is found, assume that all of the authors match."
(save-excursion (save-excursion
(let ((line 0) (let ((line 0)
(more t) (more t)
(inhibit-read-only t)) (inhibit-read-only t)
(string (concat notmuch-search-process-filter-data string)))
(setq notmuch-search-process-filter-data nil)
(while more (while more
(while (and (< line (length string)) (= (elt string line) ?\n)) (while (and (< line (length string)) (= (elt string line) ?\n))
(setq line (1+ line))) (setq line (1+ line)))
@ -775,7 +781,7 @@ non-authors is found, assume that all of the authors match."
(while (and (< line (length string)) (= (elt string line) ?\n)) (while (and (< line (length string)) (= (elt string line) ?\n))
(setq line (1+ line))) (setq line (1+ line)))
(if (< line (length string)) (if (< line (length string))
(insert (concat "Error: Unexpected output from notmuch search:\n" (substring string line) "\n"))) (setq notmuch-search-process-filter-data (substring string line)))
)))) ))))
(if found-target (if found-target
(goto-char found-target))) (goto-char found-target)))