scan produces a one-line-per-message listing of the specified folder or messages. Each scan line
contains the message number (name), the date, the “From:” field, the “Subject” field, and, if room
allows, some of the body of the message. For example:
15+ 10/05 crocker nned <<Last week I asked some of
16- 10/05 crocker message id format <<I recommend
18 10/06 brien Re: Exit status from mkdir
19 10/07*brien “scan” listing format in nmh
The `+' on message 15 indicates that it is the current message.
The `-' on message 16 indicates that it has been replied to, as indicated by a “Replied:” component
(produced by the -annotate switch to the repl command).
The `*' on message 19 indicates that no “Date:” header was present. The time of last modification of the
message is given instead.
If there is sufficient room left on the scan line after the subject, the line will be filled with text
from the body, preceded by “<<”, and terminated by “>>” if the body is sufficiently short. scan actually
reads each of the specified messages and parses them to extract the desired fields. During parsing,
appropriate error messages will be produced if there are format errors in any of the messages.
By default, scan will decode RFC 2047 (MIME) encoding in these scan listings. scan will only decode
these fields if your terminal can natively display the character set used in the encoding. You should
set the appropriate locale(1) environment variables to your native character set, if it is not US-ASCII.
See locale(1) for more details on the appropriate environment variables.
The switch -reverse, makes scan list the messages in reverse order.
The -filefilename switch allows the user to obtain a scan listing of a mail drop. This listing includes
every message in the mail drop (you can't scan individual messages). The switch -reverse is ignored with
this option. If filename is a file, it can be in mbox or MMDF format, as produced by packf. If filename
is a directory, it is considered to be in Maildir format.
The switch -widthcolumns may be used to specify the width of the scan line. The default is to use the
width of the terminal.
The -header switch produces a header line prior to the scan listing. Currently, the name of the folder
and the current date and time are output (see the HISTORY section for more information).
If the -clear switch is used and scan's output is directed to a terminal, then scan will consult the
environment variables $TERM and $TERMCAP to determine your terminal type in order to find out how to
clear the screen prior to exiting. If the -clear switch is used and scan's output is not directed to a
terminal (e.g., a pipe or a file), then scan will send a formfeed prior to exiting.
For example, the command:
(scan -clear -header; show all -show pr -f) | lpr
produces a scan listing of the current folder, followed by a formfeed, followed by a formatted listing of
all messages in the folder, one per page. Omitting “-showpr-f” will cause the messages to be
concatenated, separated by a one-line header and two blank lines.
To override the output format used by scan, the -formatstring or -formfile switches are used. This
permits individual fields of the scan listing to be extracted with ease. The string is simply a format
string and the file is simply a format file. See mh-format(5) for the details.
In addition to the standard mh-format(5) escapes, scan also recognizes the following additional component
escapes:
EscapeReturnsDescription
body string the (compressed) first part of the body
dtimenow date the current date
folder string the name of the current folder
{body} returns a string without MIME decoding, i.e. the MIME boundary separator may be the first text
shown.
If no date header is present in the message, the function escapes which operate on {date} will return
values for the date of last modification of the message file itself. This feature is handy for scanning
a draft folder, as message drafts usually aren't allowed to have dates in them.
The /etc/nmh directory contains several format files as examples of customized scan output.
scan will update the nmh context prior to starting the listing, so interrupting a long scan listing
preserves the new context. nmh purists hate this idea.