mail: Add contacts lookup script

Added `mail-searchcontacts` script, which uses notmuch to search for all
contacts of the mail database.

Can be invoked without any arguments to list *all* contacts of the
dataase in descending order of message count.
Otherwise, it will filter known contacts, first by prioritizing the
'from:' field, and otherwise by searching through the whole database for
the keywords passed in.

It will also re-format the results so that the list consists of
tab-delineated 'mail name' rows. If there is no name, the row will only
contain the bare e-mail address. This format is best accepted by aerc,
for which the script is written.

aerc uses the contacts script for its address completion in editing
e-mail headers.

Renamed `checkmail` to `mail-check` to fit the naming scheme of
`mail-[action]` for mail scripts, to better be able to group them in the
shell.
This commit is contained in:
Marty Oehme 2020-09-18 09:48:25 +02:00
parent 5a256186c2
commit be688572f5
Signed by: Marty
GPG key ID: B7538B8F50A1C800
4 changed files with 44 additions and 3 deletions

View file

@ -140,7 +140,7 @@ header-layout=To|From,Subject,Cc|Bcc
# the first field. Only the email address field is required. The second field, # the first field. Only the email address field is required. The second field,
# if present, will be treated as the contact name. Additional fields are # if present, will be treated as the contact name. Additional fields are
# ignored. # ignored.
address-book-cmd= address-book-cmd=mail-searchcontacts %s
[filters] [filters]
# #

View file

@ -4,7 +4,7 @@
gT = :prev-tab<Enter> gT = :prev-tab<Enter>
gt = :next-tab<Enter> gt = :next-tab<Enter>
<C-t> = :term<Enter> <C-t> = :term<Enter>
gR = :exec checkmail<Enter> gR = :exec mail-check<Enter>
[messages] [messages]
q = :quit<Enter> q = :quit<Enter>

View file

@ -13,7 +13,7 @@
MBSYNC_MAX_TRIES=3 MBSYNC_MAX_TRIES=3
MBSYNC_PRE="imapfilter -c /home/marty/.config/imapfilter/config.lua" MBSYNC_PRE="imapfilter -c /home/marty/.config/imapfilter/config.lua"
MBSYNC_POST="notmuch new" MBSYNC_POST="notmuch new && afew --tag --new"
# fail the routine and optionally send a message why # fail the routine and optionally send a message why
fail() { fail() {
@ -59,4 +59,11 @@ main() {
$MBSYNC_POST $MBSYNC_POST
} }
notmuch_foldertags() {
notmuch tag +dump -inbox -deleted -- folder:Dump and not folder:Inbox
notmuch tag +archived -inbox -deleted -- folder:Archive and not folder:Inbox
notmuch tag +deleted -inbox -archived -- folder:Trash and not folder:Inbox
}
main main
notmuch_foldertags

View file

@ -0,0 +1,34 @@
#!/usr/bin/env sh
# gets known e-mail adresses out of the current notmuch database
#
# called like `mail-searchcontacts [myadress]`
#
# where myaddress can be anything that connects mails to their adresses:
# if directly found in the 'from': field, it will return those adresses
# if no results are returned, it will switch to a more fuzzy search mode
# looking through subjects, mail text, and so on for the keywords
#
# this can be somewhat slow for large mailboxes, in which case you probably
# want to turn off fuzzy matching
searchterm="$1"
# make search fuzzy if 'fuzzy' is the second arg
searchcmd() {
if [ -n "$1" ] && [ "$2" = "fuzzy" ]; then
term="and $1"
elif [ -n "$1" ]; then
term="and from:$1"
else
term=""
fi
notmuch address --deduplicate=address --output=count not from:marty.oehme@gmail.com "$term" | sort --numeric-sort -r | cut -f2- | sed -e 's/\(^.*\)\(<.*$\)/\2\t\1/'
}
results=$(searchcmd "$searchterm")
if [ -z "$results" ]; then
results=$(searchcmd "$searchterm" "fuzzy")
fi
echo "$results"