summaryrefslogtreecommitdiffstats
path: root/completion
diff options
context:
space:
mode:
authorJani Nikula <jani@nikula.org>2015-03-07 14:44:42 +0200
committerDavid Bremner <david@tethera.net>2015-03-13 07:56:38 +0100
commit76f8498df61577c2f2e8f22e34a93a37ea532a03 (patch)
treea247182af523f246cdf0d82d783f2a3c18daa0b6 /completion
parent2447f4c1192ac6a90fbddcce40008efb0b4a0ee6 (diff)
completion: complete addresses in from:/to: search terms
Use the new notmuch address command to do completion for addresses in from: and to:. Use --output=sender for both for efficiency, even though --output=recipients would be more accurate for to: prefix completion.
Diffstat (limited to 'completion')
-rw-r--r--completion/notmuch-completion.bash33
1 files changed, 28 insertions, 5 deletions
diff --git a/completion/notmuch-completion.bash b/completion/notmuch-completion.bash
index e0498903..960275d1 100644
--- a/completion/notmuch-completion.bash
+++ b/completion/notmuch-completion.bash
@@ -27,10 +27,33 @@
# 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
+ # Note: It would be more accurate and less surprising to have
+ # output=recipients here for to: addresses, but as gathering
+ # the recipient addresses requires disk access for each
+ # matching message, this becomes prohibitively slow.
+ to|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 +67,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`