+ 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_mimetype()
+{
+ # use mime types from mime-support package if available, and fall
+ # back to a handful of common ones otherwise
+ if [ -r "/etc/mime.types" ]; then
+ sed -n '/^[[:alpha:]]/{s/[[:space:]].*//;p;}' /etc/mime.types
+ else
+ cat <<EOF
+application/gzip
+application/msword
+application/pdf
+application/zip
+audio/mpeg
+audio/ogg
+image/gif
+image/jpeg
+image/png
+message/rfc822
+text/calendar
+text/html
+text/plain
+text/vcard
+text/x-diff
+text/x-vcalendar
+EOF
+ fi