3.3. Contacts Completion

For each account you can define an address book by providing a subsection named abook. Crucially, this section needs an option type that specifies the type of the address book. The only types supported at the moment are “shellcommand” and “abook”. Both respect the ignorecase option which defaults to True and results in case insensitive lookups.

shellcommand

Address books of this type use a shell command in combination with a regular expression to look up contacts.

The value of command will be called with the search prefix as only argument for lookups. Its output is searched for email-name pairs using the regular expression given as regexp, which must include named groups “email” and “name” to match the email address and realname parts respectively. See below for an example that uses abook

[accounts]
  [[youraccount]]
      # ...
      [[[abook]]]
          type = shellcommand
          command = abook --mutt-query
          regexp = '^(?P<email>[^@]+@[^\t]+)\t+(?P<name>[^\t]+)'
          ignorecase = True

See here for alternative lookup commands. The few others I have tested so far are:

goobook

for cached google contacts lookups. Works with the above default regexp

command = goobook query
regexp = '^(?P<email>[^@]+@[^\t]+)\t+(?P<name>[^\t]+)'
nottoomuch-addresses

completes contacts found in the notmuch index:

command = nottoomuch-addresses.sh
regexp = \"(?P<name>.+)\"\s*<(?P<email>.*.+?@.+?)>
notmuch-abook

completes contacts found in database of notmuch-abook:

command = notmuch_abook.py lookup
regexp = ^((?P<name>[^(\\s+\<)]*)\s+<)?(?P<email>[^@]+?@[^>]+)>?$
notmuch address

Since version 0.19, notmuch itself offers a subcommand address, that returns email addresses found in the notmuch index. Combined with the date: syntax to query for mails within a certain timeframe, this allows to search contacts that you’ve sent emails to (output all addresses from the To, Cc and Bcc headers):

command = 'notmuch address --format=json --output=recipients date:1Y.. AND from:my@address.org'
regexp = '\[?{"name": "(?P<name>.*)", "address": "(?P<email>.+)", "name-addr": ".*"}[,\]]?'
shellcommand_external_filtering = False

If you want to search for senders in the From header (which should be must faster according to notmuch address docs), then use the following command:

command = 'notmuch address --format=json date:1Y..'
notmuch-addlookup

If you have the ‘notmuch-addrlookup’ tool installed you can hook it to ‘alot’ with the following:

command = 'notmuch-addrlookup '
regexp = '(?P<name>.*).*<(?P<email>.+)>'

Don’t hesitate to send me your custom regexp values to list them here.

abook

Address books of this type directly parse abooks contact files. You may specify a path using the “abook_contacts_file” option, which defaults to ~/.abook/addressbook. To use the default path, simply do this:

[accounts]
[[youraccount]]
    # ...
    [[[abook]]]
        type = abook