Make the emphasis more consistent, and do it using underscores in Org documents, since verbatim is rendered as underlined anyway.
168 lines
5.7 KiB
Org Mode
168 lines
5.7 KiB
Org Mode
#+TITLE: MU CFIND
|
||
#+MAN_CLASS_OPTIONS: :section-id "@SECTION_ID@" :date "@MAN_DATE@"
|
||
#+include: macros.inc
|
||
|
||
* NAME
|
||
|
||
mu-cfind - find contacts in the *mu* database and export them
|
||
for use in other programs.
|
||
|
||
* SYNOPSIS
|
||
|
||
*mu* [_COMMON-OPTIONS_] *cfind* [_OPTIONS_] [_PATTERN_]
|
||
|
||
* DESCRIPTION
|
||
|
||
*mu cfind* is the *mu* command for finding =contacts= (name and e-mail address of
|
||
people who were either an e-mail's sender or receiver). There are different
|
||
output formats available, for importing the contacts into other programs.
|
||
|
||
* SEARCHING CONTACTS
|
||
|
||
When you index your messages (see *mu index*), *mu* creates a list of unique e-mail
|
||
addresses found and the accompanying name, and caches this list. In case the
|
||
same e-mail address is used with different names, the most recent non-empty name
|
||
is used.
|
||
|
||
*mu cfind* starts a search for contacts that match a =regular expression=. For
|
||
example:
|
||
|
||
#+begin_example
|
||
$ mu cfind '@gmail\.com'
|
||
#+end_example
|
||
|
||
would find all contacts with a gmail-address, while
|
||
|
||
#+begin_example
|
||
$ mu cfind Mary
|
||
#+end_example
|
||
|
||
lists all contacts with Mary in either name or e-mail address.
|
||
|
||
If you do not specify a search expression, *mu cfind* returns the full list of
|
||
contacts. Note, *mu cfind* uses a cache with the e-mail information, which is
|
||
populated during the indexing process.
|
||
|
||
The regular expressions are basic case-insensitive PCRE, see {{{man-link(pcre,3)}}}.
|
||
|
||
* CFIND OPTIONS
|
||
|
||
** --format=plain|mutt-alias|mutt-ab|wl|org-contact|bbdb|csv
|
||
sets the output format to the given value. The following are available:
|
||
|
||
#+ATTR_MAN: :disable-caption t
|
||
| --format= | description |
|
||
|-------------+-----------------------------------|
|
||
| plain | default, simple list |
|
||
| mutt-alias | mutt alias-format |
|
||
| mutt-ab | mutt external address book format |
|
||
| wl | wanderlust addressbook format |
|
||
| org-contact | org-mode org-contact format |
|
||
| bbdb | BBDB format |
|
||
| csv | comma-separated values [1] |
|
||
| json | JSON format |
|
||
|
||
|
||
[1] *CSV* is not fully standardized, but *mu cfind* follows some common practices:
|
||
any double-quote is replaced by a double-double quote (thus, "hello" become
|
||
""hello"", and fields with commas are put in double-quotes. Normally, this
|
||
should only apply to name fields.
|
||
|
||
** --personal,-p only show addresses seen in messages where one of `my' e-mail
|
||
addresses was seen in one of the address fields; this is to exclude addresses
|
||
only seen in mailing-list messages. See the *--my-address* parameter to *mu init*.
|
||
|
||
** --after=<timestamp> only show addresses last seen after
|
||
=<timestamp>=. =<timestamp>= is a UNIX *time_t* value, the number of
|
||
seconds since 1970-01-01 (in UTC).
|
||
|
||
From the command line, you can use the *date* command to get this value. For
|
||
example, only consider addresses last seen after 2020-06-01, you could specify
|
||
#+begin_example
|
||
--after=`date +%s --date='2020-06-01'`
|
||
#+end_example
|
||
|
||
#+include: "muhome.inc" :minlevel 2
|
||
|
||
#+include: "common-options.inc" :minlevel 1
|
||
|
||
* JSON FORMAT
|
||
|
||
With *--format=json*, the matching contacts come out as a JSON array, e.g.,
|
||
#+begin_example
|
||
[
|
||
{
|
||
"email" : "syb@example.com",
|
||
"name" : "Sybil Gerard",
|
||
"display" : "Sybil Gerard <syb@example.com>",
|
||
"last-seen" : 1075982687,
|
||
"last-seen-iso" : "2004-02-05T14:04:47Z",
|
||
"personal" : false,
|
||
"frequency" : 14
|
||
},
|
||
{
|
||
"email" : "ed@example.com",
|
||
"name" : "Mallory, Edward",
|
||
"display" : "\"Mallory, Edward\" <ed@example.com>",
|
||
"last-seen" : 1425991805,
|
||
"last-seen-iso" : "2015-03-10T14:50:05Z",
|
||
"personal" : true,
|
||
"frequency" : 2
|
||
}
|
||
]
|
||
#+end_example
|
||
|
||
Each contact has the following fields:
|
||
|
||
#+ATTR_MAN: :disable-caption t
|
||
| property | description |
|
||
|---------------+--------------------------------------------------------------------------|
|
||
| ~email~ | the email-address |
|
||
| ~name~ | the name (or ~none~) |
|
||
| ~display~ | the combination name and e-mail address for display purposes |
|
||
| ~last-seen~ | date of most recent message with this contact (Unix time) |
|
||
| ~last-seen-iso~ | ~last-seen~ represented as an ISO-8601 timestamp |
|
||
| ~personal~ | whether the email was seen in a message together with a personal address |
|
||
| ~frequency~ | approximation of the number of times this contact was seen in messages |
|
||
|
||
The JSON format is useful for further processing, e.g. using the {{{man-link(jq,1)}}} tool:
|
||
|
||
List display names, sorted by their last-seen date:
|
||
#+begin_example
|
||
$ mu cfind --format=json --personal | jq -r '.[] | ."last-seen-iso" + " " + .display' | sort
|
||
#+end_example
|
||
|
||
* INTEGRATION WITH MUTT
|
||
|
||
You can use *mu cfind* as an external address book server for *mutt*.
|
||
For this to work, add the following to your _muttrc_:
|
||
|
||
#+begin_example
|
||
set query_command = "mu cfind --format=mutt-ab '%s'"
|
||
#+end_example
|
||
|
||
Now, in mutt, you can search for e-mail addresses using the *query*-command,
|
||
which is (by default) accessible by pressing *Q*.
|
||
|
||
* ENCODING
|
||
|
||
*mu cfind* output is encoded according to the current locale except for
|
||
*--format=bbdb*. This is hard-coded to UTF-8, and as such specified in the
|
||
output-file, so emacs/bbdb can handle things correctly, without guessing.
|
||
|
||
#+include: "exit-code.inc" :minlevel 1
|
||
|
||
#+include: "bugs.inc" :minlevel 1
|
||
|
||
#+include: "author.inc" :minlevel 1
|
||
|
||
#+include: "copyright.inc" :minlevel 1
|
||
|
||
* SEE ALSO
|
||
|
||
{{{man-link(mu,1)}}},
|
||
{{{man-link(mu-index,1)}}},
|
||
{{{man-link(mu-find,1)}}},
|
||
{{{man-link(pcre,3)}}},
|
||
{{{man-link(jq,1)}}}
|