]> git.notmuchmail.org Git - notmuch/blobdiff - emacs/notmuch.el
emacs: Fix notmuch-search-process-filter to handle incomplete lines
[notmuch] / emacs / notmuch.el
index 3d82f0d093ff9f98f43839dbd0b9acf5870a48ac..dbf269a572755f7b02f19cd090c7c296881057e0 100644 (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)))
   (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)
   "Process and filter the output of \"notmuch search\""
   (let ((buffer (process-buffer proc))
@@ -745,8 +749,12 @@ non-authors is found, assume that all of the authors match."
          (save-excursion
            (let ((line 0)
                  (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 (and (< line (length string)) (= (elt string line) ?\n))
+                 (setq line (1+ line)))
                (if (string-match "^\\(thread:[0-9A-Fa-f]*\\) \\([^][]*\\) \\(\\[[0-9/]*\\]\\) \\([^;]*\\); \\(.*\\) (\\([^()]*\\))$" string line)
                    (let* ((thread-id (match-string 1 string))
                           (date (match-string 2 string))
@@ -756,6 +764,8 @@ non-authors is found, assume that all of the authors match."
                           (tags (match-string 6 string))
                           (tag-list (if tags (save-match-data (split-string tags)))))
                      (goto-char (point-max))
+                     (if (/= (match-beginning 1) line)
+                         (insert (concat "Error: Unexpected output from notmuch search:\n" (substring string line (match-beginning 1)) "\n")))
                      (let ((beg (point-marker)))
                        (notmuch-search-show-result date count authors subject tags)
                        (notmuch-search-color-line beg (point-marker) tag-list)
@@ -767,7 +777,12 @@ non-authors is found, assume that all of the authors match."
                              (set 'found-target beg)
                              (set 'notmuch-search-target-thread "found"))))
                      (set 'line (match-end 0)))
-                 (set 'more nil)))))
+                 (set 'more nil)
+                 (while (and (< line (length string)) (= (elt string line) ?\n))
+                   (setq line (1+ line)))
+                 (if (< line (length string))
+                     (setq notmuch-search-process-filter-data (substring string line)))
+                 ))))
          (if found-target
              (goto-char found-target)))
       (delete-process proc))))