emacs: notmuch search bugfix

The recent change to use json for notmuch-search.el introduced a bug
in the code for keeping position on refresh. The problem is a
comparison between (plist-get result :thread) and a thread-id returned
by notmuch-search-find-thread-id: the latter is prefixed with
"thread:"

We fix this by adding an option to notmuch-search-find-thread-id to
return the bare thread-id. It appears that notmuch-search-refresh-view
is the only caller of notmuch-search that supplies a thread-id so this
change should be safe (but could theoretically break users .emacs
functions).
This commit is contained in:
Mark Walters 2012-08-07 17:32:18 +01:00 committed by David Bremner
parent 94c3b40d41
commit 5811550cdd
2 changed files with 10 additions and 5 deletions

3
NEWS
View file

@ -55,6 +55,9 @@ user-specified formatting
you've customized this variable, you may have to change your date you've customized this variable, you may have to change your date
format from `"%s "` to `"%12s "`. format from `"%s "` to `"%12s "`.
The thread-id for the `target-thread` argument for `notmuch-search` should
now be supplied without the "thread:" prefix.
Notmuch 0.13.2 (2012-06-02) Notmuch 0.13.2 (2012-06-02)
=========================== ===========================

View file

@ -475,10 +475,12 @@ BEG."
(push (plist-get (notmuch-search-get-result pos) property) output))) (push (plist-get (notmuch-search-get-result pos) property) output)))
output)) output))
(defun notmuch-search-find-thread-id () (defun notmuch-search-find-thread-id (&optional bare)
"Return the thread for the current thread" "Return the thread for the current thread
If BARE is set then do not prefix with \"thread:\""
(let ((thread (plist-get (notmuch-search-get-result) :thread))) (let ((thread (plist-get (notmuch-search-get-result) :thread)))
(when thread (concat "thread:" thread)))) (when thread (concat (unless bare "thread:") thread))))
(defun notmuch-search-find-thread-id-region (beg end) (defun notmuch-search-find-thread-id-region (beg end)
"Return a list of threads for the current region" "Return a list of threads for the current region"
@ -936,7 +938,7 @@ If `query' is nil, it is read interactively from the minibuffer.
Other optional parameters are used as follows: Other optional parameters are used as follows:
oldest-first: A Boolean controlling the sort order of returned threads oldest-first: A Boolean controlling the sort order of returned threads
target-thread: A thread ID (with the thread: prefix) that will be made target-thread: A thread ID (without the thread: prefix) that will be made
current if it appears in the search results. current if it appears in the search results.
target-line: The line number to move to if the target thread does not target-line: The line number to move to if the target thread does not
appear in the search results." appear in the search results."
@ -993,7 +995,7 @@ same relative position within the new buffer."
(interactive) (interactive)
(let ((target-line (line-number-at-pos)) (let ((target-line (line-number-at-pos))
(oldest-first notmuch-search-oldest-first) (oldest-first notmuch-search-oldest-first)
(target-thread (notmuch-search-find-thread-id)) (target-thread (notmuch-search-find-thread-id 'bare))
(query notmuch-search-query-string) (query notmuch-search-query-string)
(continuation notmuch-search-continuation)) (continuation notmuch-search-continuation))
(notmuch-kill-this-buffer) (notmuch-kill-this-buffer)