[PATCH 5/5] completion: complete addresses in from:/to: search terms
Tomi Ollila
tomi.ollila at iki.fi
Mon Feb 23 23:12:24 PST 2015
On Tue, Jan 27 2015, Jani Nikula <jani at nikula.org> wrote:
> 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:?
Shameless marketing puff: Imagine how fast would it would be to use
nottoomuch-addresses -- the completions are there before one
sees TAB KeyRelease event... ;)
Tomi
> ---
> 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
>
> _______________________________________________
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch
More information about the notmuch
mailing list