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:
parent
5a256186c2
commit
be688572f5
4 changed files with 44 additions and 3 deletions
|
@ -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]
|
||||||
#
|
#
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
34
mail/.local/bin/mail-searchcontacts
Executable file
34
mail/.local/bin/mail-searchcontacts
Executable 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"
|
Loading…
Reference in a new issue