[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