1
0
mirror of https://github.com/djcb/mu.git synced 2024-06-27 07:35:16 +02:00
mu/man/mu-cfind.1.org
Jeremy Sowden 721aadc140 man: change quoting style
The man-page sources use single quotes to quote text.  However, this can be
problematic in man-pages because if a single quote appears at the beginning of a
line the following word is interpreted by troff as a macro.  For example, this
paragraph in mu-easy.7:

    What if we want to see some of the body of the message? You can get a 'summary'
    of the first lines of the message using the \fI\-\-summary\-len\fP option, which will
   'summarize' the first \fIn\fP lines of the message:

elicits this warning:

    $ man --warnings obj-x86_64-linux-gnu/man/mu-easy.7 >/dev/null
    troff:<standard input>:166: warning: macro 'summarize'' not defined

and gets truncated:

    What  if  we want to see some of the body of the message? You can get a
    'summary' of the first lines of the message using the --summary-len op‐
    tion, which will

One could adjust the line-wrapping to move the quoted text away from the
beginning of the line, but that is fragile.  Another possibility would be to use
the troff escape-sequences for open and close quotes (`\(oq` and `\(cq`
respectively), but ox-man is being used precisely to avoid having to handle
troff directly.  Instead use back-ticks for left quotes.  Thus:

    What if we want to see some of the body of the message? You can get a `summary'
    of the first lines of the message using the \fI\-\-summary\-len\fP option, which will
   `summarize' the first \fIn\fP lines of the message:

which is rendered correctly:

    What  if  we want to see some of the body of the message? You can get a
    `summary' of the first lines of the message using the --summary-len op-
    tion, which will `summarize' the first n lines of the message:

Signed-off-by: Jeremy Sowden <azazel@debian.org>
2024-03-06 21:12:32 +00:00

5.6 KiB
Raw Blame History

MU CFIND

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:

$ mu cfind '@gmail\.com'

would find all contacts with a gmail-address, while

$ mu cfind Mary

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 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:

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

  --after=`date +%s --date='2020-06-01'`

JSON FORMAT

With --format=json, the matching contacts come out as a JSON array, e.g.,

[
  {
    "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
  }
]

Each contact has the following fields:

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 jq(1) tool:

List display names, sorted by their last-seen date:

$ mu cfind --format=json --personal | jq -r '.[] | ."last-seen-iso" + " " + .display' | sort

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:

set query_command = "mu cfind --format=mutt-ab '%s'"

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.

SEE ALSO

mu(1), mu-index(1), mu-find(1), pcre(3), jq(1)