Use the new notmuch address command to do completion for addresses in from: and to:. --- This patch is more of an RFC. The to: completion is sloooow because typically there are more matches to begin with, and then producing the results requires reading the messages. Maybe it would be better to use the same mechanism as from: for both, even if it's not accurate for to:? --- completion/notmuch-completion.bash | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/completion/notmuch-completion.bash b/completion/notmuch-completion.bash index e0498903f22f..db49294fc58c 100644 --- a/completion/notmuch-completion.bash +++ b/completion/notmuch-completion.bash @@ -27,10 +27,30 @@ # on completion. # -_notmuch_user_emails() +# $1: current input of the form prefix:partialinput, where prefix is +# to or from. +_notmuch_email() { - notmuch config get user.primary_email - notmuch config get user.other_email + local output prefix cur + + prefix="${1%%:*}" + cur="${1#*:}" + + # Cut the input to be completed at punctuation because + # (apparently) Xapian does not support the trailing wildcard '*' + # operator for input with punctuation. We let compgen handle the + # extra filtering required. + cur="${cur%%[^a-zA-Z0-9]*}" + + case "$prefix" in + to) output=recipients;; + from) output=sender;; + *) return;; + esac + + # Only emit plain, lower case, unique addresses. + notmuch address --output=$output $prefix:"${cur}*" | \ + sed 's/[^<]*<\([^>]*\)>/\1/' | tr "[:upper:]" "[:lower:]" | sort -u } _notmuch_search_terms() @@ -44,10 +64,10 @@ _notmuch_search_terms() COMPREPLY=( $(compgen -P "tag:" -W "`notmuch search --output=tags \*`" -- ${cur##tag:}) ) ;; to:*) - COMPREPLY=( $(compgen -P "to:" -W "`_notmuch_user_emails`" -- ${cur##to:}) ) + COMPREPLY=( $(compgen -P "to:" -W "`_notmuch_email ${cur}`" -- ${cur##to:}) ) ;; from:*) - COMPREPLY=( $(compgen -P "from:" -W "`_notmuch_user_emails`" -- ${cur##from:}) ) + COMPREPLY=( $(compgen -P "from:" -W "`_notmuch_email ${cur}`" -- ${cur##from:}) ) ;; path:*) local path=`notmuch config get database.path` -- 2.1.4