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

Reply via email to