aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2011-03-10 15:18:40 -0800
committerGravatar Carl Worth <cworth@cworth.org>2011-03-10 15:18:40 -0800
commit44d3c57e2a62e8d8a299894619389d90c2b97a14 (patch)
tree44f14761494c684350996c67d2923a7a5e0d05a5
parent4e414e2a5a72e8345df6371b3524030d07c2ce96 (diff)
emacs: Display any unexpected output from notmuch search
Rather than silently swallowing unexpected output, the emacs interface will now display it. This will allow error messages to actually arrive at the emacs interface (though not in an especially pretty way). This also allows for easier investigation of the inadvertent swallowing of search results that span page boundaries (as demonstrated by the recent added emacs-large-search-buffer test). The page-boundary bug has been present since a commit from 2009-11-24: 93af7b574598637c2766dd1f8ef343962c9a8efb Many thanks to Thomas Schwinge for tracking that bug down and contributing the test for it.
-rw-r--r--emacs/notmuch.el11
-rwxr-xr-xtest/emacs-large-search-buffer2
2 files changed, 11 insertions, 2 deletions
diff --git a/emacs/notmuch.el b/emacs/notmuch.el
index 3d82f0d0..057b1aec 100644
--- a/emacs/notmuch.el
+++ b/emacs/notmuch.el
@@ -747,6 +747,8 @@ non-authors is found, assume that all of the authors match."
(more t)
(inhibit-read-only t))
(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 +758,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 +771,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))
+ (insert (concat "Error: Unexpected output from notmuch search:\n" (substring string line) "\n")))
+ ))))
(if found-target
(goto-char found-target)))
(delete-process proc))))
diff --git a/test/emacs-large-search-buffer b/test/emacs-large-search-buffer
index f827bb14..78b3ae8b 100755
--- a/test/emacs-large-search-buffer
+++ b/test/emacs-large-search-buffer
@@ -21,7 +21,7 @@ notmuch new > /dev/null
test_begin_subtest 'Comparing emacs result to "notmuch search"'
expected="$(notmuch search '*' | sed -e 's/^thread:[0-9a-f]* //' -e 's/;//' -e 's/xx*/[BLOB]/')
End of search results."
-output=$(test_emacs '(notmuch-search "*") (notmuch-test-wait) (message (buffer-string))' 2>&1 | sed -e s', *, ,g' -e 's/xx*/[BLOB]/')
+output=$(test_emacs '(notmuch-search "*") (notmuch-test-wait) (message (buffer-string))' 2>&1 | sed -e s', *, ,g' -e 's/xxx*/[BLOB]/g')
test_expect_equal "$output" "$expected"
test_done