+.TH MH-FORMAT %manext5% "January 10, 2015" "%nmhversion%"
.\"
.\" %nmhwarning%
.\"
-.TH MH-FORMAT %manext5% "%nmhdate%" MH.6.8 [%nmhversion%]
.SH NAME
mh-format \- format file for nmh message system
.SH DESCRIPTION
escape sequences which begin with `%'. When specifying a format
string, the usual C backslash characters are honored: `\\b', `\\f',
`\\n', `\\r', and `\\t'. Continuation lines in format files end with
-`\\' followed by the newline character.
-
+`\\' followed by the newline character. A literal `%' can be inserted into
+a format file by using the sequence `%%'.
.\" TALK ABOUT SYNTAX FIRST, THEN SEMANTICS
.SS SYNTAX
Format strings are built around
component, they are listed without a leading `%'. When control escapes
are used as function arguments, they written as normally, with
a leading `%';
-
.SS "Control escapes"
.PP
A
For string valued functions or components, the condition is true
if the function return or component value is
a non-empty string, and false for an empty string.
-
.PP
-The `%?' control escape is optional, and may there may be more
+The `%?' control escape is optional, and there may be more
than one `%?' control escape in a conditional block.
The `%|' control escape
is also optional, but may be included at most once.
-
.SS "Function escapes"
Functions expecting an argument generally
require an argument of a particular type.
.RS 5
.nf
.ta +\w'Argument 'u +\w'An optional component, 'u
-.I Argument Description Example Syntax
+.I "Argument Description Example Syntax"
literal A literal number %(\fIfunc\fR 1234)
or string %(\fIfunc\fR text string)
comp Any component %(\fIfunc\fR\^{\fIin-reply-to\fR\^})
.RS 5
.nf
.ta \w'Fformataddr 'u +\w'Aboolean 'u +\w'Rboolean 'u
-.I Function Argument Result Description
+.I "Function Argument Result Description"
msg integer message number
cur integer message is current (0 or 1)
unseen integer message is unseen (0 or 1)
size integer size of message
strlen integer length of \fIstr\fR
-width integer output buffer size in bytes
+width integer column width of terminal
charleft integer bytes left in output buffer
timenow integer seconds since the UNIX epoch
me string the user's mailbox (username)
-myhost string the user's local hostname
-myname string the user's name
+myhost string the user's local hostname
+myname string the user's name
+localmbox string the complete local mailbox
eq literal boolean \fInum\fR == \fIarg\fR
ne literal boolean \fInum\fR != \fIarg\fR
gt literal boolean \fInum\fR > \fIarg\fR
amatch literal boolean \fIstr\fR starts with \fIarg\fR
plus literal integer \fIarg\fR plus \fInum\fR
minus literal integer \fIarg\fR minus \fInum\fR
+multiply literal integer \fInum\fR multiplied by \fIarg\fR
divide literal integer \fInum\fR divided by \fIarg\fR
modulo literal integer \fInum\fR modulo \fIarg\fR
num literal integer Set \fInum\fR to \fIarg\fR.
comp comp string Set \fIstr\fR to component text
compval comp integer Set \fInum\fR to \*(lq\fBatoi\fR(\fIcomp\fR\^)\*(rq
.\" compflag comp integer Set \fInum\fR to component flags bits (internal)
-.\" decodecomp comp string Set \fIstr\fR to RFC-2047 decoded component text
-decode expr string decode \fIstr\fR as RFC-2047 (MIME-encoded)
+.\" decodecomp comp string Set \fIstr\fR to RFC 2047 decoded component text
+decode expr string decode \fIstr\fR as RFC 2047 (MIME-encoded)
component
-unquote expr string remove RFC-2822 quotes from \fIstr\fR
-trim expr trim trailing white-space from \fIstr\fR
+unquote expr string remove RFC 2822 quotes from \fIstr\fR
+trim expr trim trailing whitespace from \fIstr\fR
+kilo expr string express in SI units: 15.9K, 2.3M, etc.
+ %(kilo) scales by factors of 1000,
+kibi expr string express in IEC units: 15.5Ki, 2.2Mi.
+ %(kibi) scales by factors of 1024.
putstr expr print \fIstr\fR
putstrf expr print \fIstr\fR in a fixed width
putnum expr print \fInum\fR
putnumf expr print \fInum\fR in a fixed width
.\" addtoseq literal add msg to sequence (LBL option)
putlit expr print \fIstr\fR without space compression
-nodate string integer Argument not a date string (0 or 1)
+zputlit expr print \fIstr\fR without space compression;
+ \fIstr\fR must occupy no width on display
+bold string set terminal bold mode
+underline string set terminal underlined mode
+standout string set terminal standout mode
+resetterm string reset all terminal attributes
+hascolor boolean terminal supports color
+fgcolor literal string set terminal foreground color
+bgcolor literal string set terminal background color
formataddr expr append \fIarg\fR to \fIstr\fR as a
(comma separated) address list
concataddr expr append \fIarg\fR to \fIstr\fR as a
is not configured. The (\fImyname\fR\^) function will return the value of
the
.B SIGNATURE
-environment variable if set, otherwise will return the passwd GECOS field for
-the current user.
+environment variable if set, otherwise will return the passwd GECOS field
+(truncated at the first comma if it contains one) for
+the current user. The (\fIlocalmbox\fR\^) function will return the complete
+form of the local mailbox, suitable for use in a \*(lqFrom\*(rq header.
+It will return the
+.RI \*(lq Local-Mailbox \*(rq
+profile entry if it is set; if it is not, it will be equivalent to:
+.PP
+.RS 5
+.nf
+%(myname) <%(me)@%(myhost)>
+.fi
+.RE
.PP
The following functions require a date component as an argument:
.PP
.RS 5
.nf
.ta \w'Fformataddr 'u +\w'Aboolean 'u +\w'Rboolean 'u
-.I Function Argument Return Description
+.I "Function Argument Return Description"
sec date integer seconds of the minute
min date integer minutes of the hour
hour date integer hours of the day (0-23)
month date string month of the year (abbrev.)
lmonth date string month of the year
year date integer year (may be > 100)
-zone date integer timezone in hours
+zone date integer timezone in minutes
tzone date string timezone string
szone date integer timezone explicit?
(1=explicit,0=implicit,\-1=unknown)
dst date integer daylight savings in effect? (0 or 1)
clock date integer seconds since the UNIX epoch
rclock date integer seconds prior to current time
-tws date string official 822 rendering
+tws date string official RFC 822 rendering
pretty date string user-friendly rendering
+nodate date integer returns 1 if date is invalid
.fi
.RE
.PP
.RS 5
.nf
.ta \w'Fformataddr 'u +\w'Aboolean 'u +\w'Rboolean 'u
-.I Function Argument Return Description
-proper addr string official 822 rendering
+.I "Function Argument Return Description"
+proper addr string official RFC 822 rendering
friendly addr string user-friendly rendering
addr addr string mbox@host or host!mbox rendering*
pers addr string the personal name*
note addr string commentary text*
mbox addr string the local mailbox*
-mymbox addr integer List has the user's address? (0 or 1)
+mymbox addr integer list has the user's address? (0 or 1)
+getmymbox addr string the user's (first) address,
+ with personal name
+getmyaddr addr string the user's (first) address,
+ without personal name
host addr string the host domain*
nohost addr integer no host was present (0 or 1)*
type addr integer host type* (0=local,1=network,
The functions (\fIputnum\fR\^) and
(\fIputstr\fR\^) are somewhat special: they print their result in the minimum number of characters
required, and ignore any leading field width argument. The (\fIputlit\fR\^)
-function outputs the exact contents of str register without any changes
+function outputs the exact contents of the str register without any changes
such as duplicate space removal or control character conversion.
+The (\fIzputlit\fR\^) function similarly outputs the exact contents of
+the str register, but requires that those contents not occupy any
+output width. It can therefore be used for outputting terminal escape
+sequences.
+.PP
+There are a limited number of function escapes to output terminal escape
+sequences. These sequences are retrieved from the
+.IR terminfo (5)
+database according to the current terminal setting. The (\fIbold\fR\^),
+(\fIunderline\fR\^), and (\fIstandout\fR\^) escapes set bold mode,
+underline mode, and standout mode respectively.
+.PP
+(\fIhascolor\fR\^)
+can be used to determine if the current terminal supports color.
+(\fIfgcolor\fR\^) and (\fIbgcolor\fR\^) set the foreground and
+background colors respectively. Both of these escapes take one literal
+argument, the color name, which can be one of: black, red, green, yellow,
+blue, magenta, cyan, white. (\fIresetterm\fR\^) resets all terminal
+attributes back to their default setting.
+.PP
+All of these terminal escape should be used in conjunction with
+(\fIzputlit\fR\^) (preferred) or (\fIputlit\fR\^), as the normal
+(\fIputstr\fR\^) function will strip out control characters.
.PP
The available output width is kept in an internal register; any output
-past this width will be truncated.
+past this width will be truncated. The one exception to this is
+(\fIzputlit\fR\^) functions will still be executed in case a terminal reset
+code is being placed at the end of the line.
.SS Special Handling
A few functions have different behavior depending on what command they are
being invoked from.
.fi
.RE
.PP
-Unfortuantely if the Reply-to: header is NOT present, the output line that is
+Unfortunately if the Reply-to: header is NOT present, the output line that is
generated will be something like:
.PP
.RS 5
.nf
-My From User <from@user.com>To: My From User <from@user.com>
+My From User <from@example.com>To: My From User <from@example.com>
.fi
.RE
.PP
register.
.PP
As an additional note, the (\fIformataddr\fR\^) and (\fIconcataddr\fR\^)
-functions have some behavior when it comes to the
+functions have special behavior when it comes to the
.I str
register. The starting point of the register is saved and is used to
build up entries in the address list.
.PP
You will find the
-.B ap
-and
-.B fmtdump
-utilities invaluable in debugging problems with format strings.
+.B fmttest
+utility invaluable when debugging problems with format strings.
.SS Examples
With all this in mind,
here's the default format string for
.RE
.PP
the month and date are printed in two digits (zero filled) separated by
-a slash. Next,
+a slash. Next,
.PP
.RS 5
.nf
switch was given to
.B repl
(see
-.BR repl (1)
+.IR repl (1)
for more details about %{\fIfcc\fR\^}),
an \*(lqFcc:\*(rq header is output.
.PP
.\" process 200 messages a day and still get some real work
.\" done." The authors apparently only planned to get
.\" real work done for about 50 days per folder.)
-Nontheless (as noted above)
+Nonetheless (as noted above)
the various scan format strings are inherited
from older MH versions, and are generally hard-coded to 4
digits of message number before formatting problems
is used to test whether the message number
has 5
or more digits.
-If so, it is printed at full width: otherwise
+If so, it is printed at full width, otherwise
at 4 digits.
.SH "SEE ALSO"
-scan(1), repl(1), ap(8), dp(8)
-
+.IR scan (1),
+.IR repl (1),
+.IR fmttest (1),
.SH CONTEXT
None