Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
S-NAIL(1)		FreeBSD	General	Commands Manual		     S-NAIL(1)

NAME
     S-nail [v14.9.19] -- send and receive Internet mail

SYNOPSIS
     s-nail [-DdEFinv~#] [-: spec] [-A account]	[:-a attachment:]
	    [:-b bcc-addr:] [:-C "field: body":] [:-c cc-addr:]
	    [-M	type | -m file | -q file | -t] [-r from-addr]
	    [:-S var[=value]:] [-s subject] [:-T "field: addr":] [:-X cmd:]
	    [:-Y cmd:] [-.] :to-addr: [-- :mta-option:]

     s-nail [-DdEeHiNnRv~#] [-:	spec] [-A account] [:-C	"field:	body":]
	    [-L	spec] [-r from-addr] [:-S var[=value]:]	[-u user] [:-X cmd:]
	    [:-Y cmd:] [-- :mta-option:]
     s-nail [-DdEeHiNnRv~#] [-:	spec] [-A account] [:-C	"field:	body":]	-f
	    [-L	spec] [-r from-addr] [:-S var[=value]:]	[:-X cmd:] [:-Y	cmd:]
	    [file] [-- :mta-option:]

     s-nail -h | --help
     s-nail -V | --version

DESCRIPTION
	   Note: S-nail	(S-nail) will see major	changes	in v15.0 (circa	2020).
	   Some	backward incompatibilities cannot be avoided.  COMMANDS	change
	   to  Shell-style argument quoting, and shell metacharacters will be-
	   come	(more) meaningful.  Some commands accept new syntax today  via
	   wysh	 (Command  modifiers).	 Behaviour is flagged [v15-compat] and
	   [no	v15-compat],  setting  v15-compat  (INTERNAL  VARIABLES)  will
	   choose  new behaviour when applicable; giving it a value makes wysh
	   an implied default.	[Obsolete] flags what will vanish.

	   Warning! v15-compat (with value) will be a default in v14.10.0!

     S-nail provides a simple and friendly environment for sending and receiv-
     ing mail.	It is intended to provide the functionality of the POSIX
     mailx(1) command, but is MIME capable and optionally offers extensions
     for line editing, S/MIME, SMTP and	POP3, among others.  S-nail divides
     incoming mail into	its constituent	messages and allows the	user to	deal
     with them in any order.  It offers	many COMMANDS and INTERNAL VARIABLES
     for manipulating messages and sending mail.  It provides the user simple
     editing capabilities to ease the composition of outgoing messages,	and
     increasingly powerful and reliable	non-interactive	scripting capabili-
     ties.

   Options
     -:	spec, --resource-files=..
	       Explicitly control which	of the Resource	files shall be sourced
	       (loaded): if the	letter `s' is (case-insensitively) part	of
	       spec then the system wide s-nail.rc is sourced, `u' controls
	       sourcing	of the user's personal file ~/.mailrc.	The (original,
	       unmodified) system resource file	content	is also	available in
	       the binary itself, and can be sourced without accessing the
	       filesystem via `x'.  The	letters	`-' and	`/' explicitly forbid
	       sourcing	of any resource	files.	The default is `su'.

	       Scripts should use this option: to avoid	environmental noise
	       they should "detach" from any configuration and create a
	       script-specific environment, setting any	of the desired
	       INTERNAL	VARIABLES via -S and running configurating commands
	       via -X.	This option overrides -n.

     -A	name, --account=..
	       Executes	an account command for the given user email account
	       name after program startup is complete (all resource files are
	       loaded, any -S setting is being established, but	-X commands
	       have not	been evaluated yet).  Being a special incarnation of
	       defined macros for the purpose of bundling longer-lived
	       settings, activating such an email account also switches	to the
	       accounts	primary	system mailbox (most likely the	inbox).	 If
	       the operation fails the program will exit if it is used non-in-
	       teractively, or if any of errexit or posix are set.

     -a	file[=input-charset[#output-charset]], --attach=..
	       Attach file to the message (for compose mode opportunities re-
	       fer to ~@ and ~^), after	applying tilde expansion (see Filename
	       transformations and folder).  Shall file	not be accessible but
	       contain a `=' character,	then anything before the last `=' will
	       be used as the filename,	anything thereafter as a character set
	       specification.

	       If an input character set is specified, but no output character
	       set, then the given input character set is fixed	as-is, and no
	       conversion will be applied; giving the empty string or the spe-
	       cial string hyphen-minus	`-' will be treated as if ttycharset
	       has been	specified (the default).

	       If an output character set has also been	given then the conver-
	       sion will be performed exactly as specified and on-the-fly, not
	       considering the file type and content.  As an exception the
	       empty string or hyphen-minus `-'	select the default conversion
	       algorithm (see Character	sets): no conversion is	performed on-
	       the-fly,	file and its contents will be MIME-classified (HTML
	       mail and	MIME attachments, The mime.types files); Only this
	       mode is available unless	character set conversion is supported
	       (features includes `+iconv').

     -B	       ([Obsolete]: S-nail will	always use line-buffered output, to
	       gain line-buffered input	even in	batch mode enable batch	mode
	       via -#.)

     -b	addr, --bcc=..
	       Send a blind carbon copy	to recipient addr, if the setting of
	       expandaddr, one of the INTERNAL VARIABLES, allows; the
	       `shquote' expandaddr flag is supported.	The option may be used
	       multiple	times.	Also see the section On	sending	mail, and non-
	       interactive mode.

     -C	"field:	body", --custom-header=..
	       Create a	custom header which persists for an entire session.  A
	       custom header consists of the field name	followed by a colon
	       `:' and the field content body, for example `-C "Blah: Neminem
	       laede; imo omnes, quantum potes,	juva"'.	 Standard header field
	       names cannot be overwritten by custom headers.  Runtime ad-
	       justable	custom headers are available via the variable
	       customhdr, and in compose mode ~^, one of the COMMAND ESCAPES,
	       as well as digmsg are the most flexible and powerful options to
	       manage message headers.	This option may	be used	multiple
	       times.

     -c	addr, --cc=..
	       Just like -b, except it places the argument in the list of car-
	       bon copies.

     -D, --disconnected
	       ([Option]) Startup with disconnected set.

     -d, --debug
	       Enter a debug-only sandbox mode by setting the internal vari-
	       able debug; the same can	be achieved via	`-S debug' or `set
	       debug'.	Also see -v.

     -E, --discard-empty-messages
	       set skipemptybody and thus discard messages with	an empty mes-
	       sage part body.

     -e, --check-and-exit
	       Just check if mail is present (in the system inbox or the one
	       specified via -f): if yes, return an exit status	of zero, a
	       non-zero	value otherwise.  To restrict the set of mails to con-
	       sider in	this evaluation	a message specification	can be added
	       with the	option -L.  Quickrun: does not open an interactive
	       session.

     -F	       Save the	message	to send	in a file named	after the local	part
	       of the first recipient's	address	(instead of in record).

     -f, --file
	       Read in the contents of the user's secondary mailbox MBOX (or
	       the specified file) for processing; when	S-nail is quit,	it
	       writes undeleted	messages back to this file (but	be aware of
	       the hold	option).  The optional file argument will undergo some
	       special Filename	transformations	(as via	folder).  Note that
	       file is not an argument to the flag -f, but is instead taken
	       from the	command	line after option processing has been com-
	       pleted.	In order to use	a file that starts with	a hyphen-mi-
	       nus, prefix with	a relative path, as in `./-hyphenbox.mbox'.

     -H, --header-summary
	       Display a summary of headers for	the given folder (depending on
	       -u, inbox or MAIL, or as	specified via -f), then	exit.  A con-
	       figurable summary view is available via the option -L.  This
	       mode does not honour showlast.  Quickrun: does not open an in-
	       teractive session.

     -h, --help
	       Show a brief usage summary; use --long-help for a list long op-
	       tions.

     -i	       set ignore to ignore tty	interrupt signals.

     -L	spec, --search=..
	       Display a summary of headers of all messages that match the
	       given spec in the folder	found by the same algorithm used by
	       -H, then	exit.  See the section Specifying messages for the
	       format of spec.	This mode does not honour showlast.

	       If the -e option	has been given in addition no header summary
	       is produced, but	S-nail will instead indicate via its exit sta-
	       tus whether spec	matched	any messages (`0') or not (`1'); note
	       that any	verbose	output is suppressed in	this mode and must in-
	       stead be	enabled	explicitly (see	-v).  Quickrun:	does not open
	       an interactive session.

     -M	type   Special send mode that will flag	standard input with the	MIME
	       `Content-Type:' set to the given	known type (HTML mail and MIME
	       attachments, The	mime.types files) and use it as	the main mes-
	       sage body.  [v15	behaviour may differ] Using this option	will
	       bypass processing of message-inject-head	and
	       message-inject-tail.  Also see -q, -m, -t.

     -m	file   Special send mode that will MIME	classify the specified file,
	       and use it as the main message body.  [v15 behaviour may	dif-
	       fer] Using this option will bypass processing of
	       message-inject-head and message-inject-tail.  Also see -q, -M,
	       -t.

     -N, --no-header-summary
	       inhibit the initial display of message headers when reading
	       mail or editing a mailbox folder	by calling unset for the in-
	       ternal variable header.

     -n	       Standard	flag that inhibits reading the system wide s-nail.rc
	       upon startup.  The option -: allows more	control	over the
	       startup sequence; also see Resource files.

     -q	file, --quote-file=..
	       Special send mode that will initialize the message body with
	       the contents of the specified file, which may be	standard input
	       `-' only	in non-interactive context.  Also see -M, -m, -t.

     -R, --read-only
	       Any mailbox folder aka folder opened will be in read-only mode.

     -r	from-addr, --from-address=..
	       The RFC 5321 reverse-path used for relaying and delegating mes-
	       sages to	its destination(s), for	example	to report delivery er-
	       rors, is	normally derived from the address which	appears	in the
	       from header (or,	if that	contains multiple addresses, in
	       sender).	 A file-based aka local	executable mta (Mail-Transfer-
	       Agent), however,	instead	uses the local identity	of the initi-
	       ating user.

	       When this command line option is	used the given single ad-
	       dressee from-addr will be assigned to the internal variable
	       from, but in addition the command line option -f	from-addr will
	       be passed to a file-based mta whenever a	message	is sent.
	       Shall from-addr include a user name the address components will
	       be separated and	the name part will be passed to	a file-based
	       mta individually	via -F name.  Even though not a	recipient the
	       `shquote' expandaddr flag is supported.

	       If an empty string is passed as from-addr then the content of
	       the variable from (or, if that contains multiple	addresses,
	       sender) will be evaluated and used for this purpose whenever
	       the file-based mta is contacted.	 By default, without -r	that
	       is, neither -f nor -F command line options are used when	con-
	       tacting a file-based MTA, unless	this automatic deduction is
	       enforced	by seting the internal variable	r-option-implicit.

	       Remarks:	many default installations and sites disallow overrid-
	       ing the local user identity like	this unless either the MTA has
	       been configured accordingly or the user is member of a group
	       with special privileges.	 Passing an invalid address will cause
	       an error.

     -S	var[=value], --set=..
	       set (or,	with a prefix string `no', as documented in INTERNAL
	       VARIABLES, unset) variable and optionally assign	value, if sup-
	       ported; [v15 behaviour may differ] the entire expression	is
	       evaluated as if specified within	dollar-single-quotes (see
	       Shell-style argument quoting) if	the internal variable
	       v15-compat is set.  If the operation fails the program will
	       exit if any of errexit or posix are set.	 Settings established
	       via -S cannot be	changed	from within Resource files or an ac-
	       count switch initiated by -A.  They will	become mutable again
	       before commands registered via -X are executed.

     -s	subject, --subject=..
	       Specify the subject of the message to be	sent.  Newline (NL)
	       and carriage-return (CR)	bytes are invalid and will be normal-
	       ized to space (SP) characters.

     -T	"field:	addr", --target=..
	       Add addr	to the list of receivers targeted by field, for	now
	       supported are only `bcc', `cc', `fcc', and `to'.	 Field and
	       body (address) are separated by a colon `:' and optionally
	       blank (space, tabulator)	characters.  The `shquote' expandaddr
	       flag is supported.  addr	is parsed like a message header	ad-
	       dress line, as if it would be part of a template	message	fed in
	       via -t, and the same modifier suffix is supported.  This	option
	       may be used multiple times.

     -t, --template
	       The text	message	given (on standard input) is expected to con-
	       tain, separated from the	message	body by	an empty line, one or
	       multiple	plain text message headers.  [v15 behaviour may	dif-
	       fer] Readily prepared MIME mail messages	cannot be passed.
	       Headers can span	multiple consecutive lines if follow lines
	       start with any amount of	whitespace.  A line starting with the
	       number sign `#' in the first column is ignored.	Message	recip-
	       ients can be given via the message headers `To:', `Cc:',	`Bcc:'
	       (the `?single' modifier enforces	treatment as a single ad-
	       dressee,	for example `To?single:	exa, <m@ple>') or `Fcc:', they
	       will be added to	any recipients specified on the	command	line,
	       and are likewise	subject	to expandaddr validity checks.	If a
	       message subject is specified via	`Subject:' then	it will	be
	       used in favour of one given on the command line.

	       More optional headers are `Reply-To:' (possibly overriding
	       reply-to), `Sender:' (sender), `From:' (from and	/ or option
	       -r).  `Message-ID:', `In-Reply-To:', `References:' and
	       `Mail-Followup-To:', by default created automatically dependent
	       on message context, will	be used	if specified (a	special	ad-
	       dress massage will however still	occur for the latter).	Any
	       other custom header field (also see -C, customhdr and ~^) is
	       passed through entirely unchanged, and in conjunction with the
	       options -~ or -#	it is possible to embed	COMMAND	ESCAPES.  Also
	       see -M, -m, -q.

     -u	user, --inbox-of=..
	       Initially read the primary system mailbox of user, appropriate
	       privileges presumed; effectively	identical to `-f %user'.

     -V, --version
	       Show S-nails version and	exit.  The command version will	also
	       show the	list of	features: `$ s-nail -:/	-Xversion -Xx'.

     -v, --verbose
	       sets the	internal variable verbose to enable logging of infor-
	       mational	context	messages.  (Increases level of verbosity when
	       used multiple times.)  Also see -d.

     -X	cmd, --startup-cmd=..
	       Add the given (or multiple for a	multiline argument) cmd	to a
	       list of commands	to be executed before normal operation starts.
	       The commands will be evaluated as a unit, just as via source.
	       Correlates with -# and errexit.

     -Y	cmd, --cmd=..
	       Add the given (or multiple for a	multiline argument) cmd	to a
	       list of commands	to be executed after normal operation has
	       started.	 The commands will be evaluated	successively in	the
	       given order, and	as if given on the program's standard input --
	       before interactive prompting begins in interactive mode,	after
	       standard	input has been consumed	otherwise.

     -~, --enable-cmd-escapes
	       Enable COMMAND ESCAPES in compose mode even in non-interactive
	       use cases.  This	can for	example	be used	to automatically for-
	       mat the composed	message	text before sending the	message:

		     $ ( echo 'line    one. Word.     Word2.';\
			 echo '~| /usr/bin/fmt -tuw66' ) |\
		       LC_ALL=C	s-nail -d~:/ -Sttycharset=utf-8	bob@exam.ple

     -#, --batch-mode
	       Enables batch mode: standard input is made line buffered, the
	       complete	set of (interactive) commands is available, processing
	       of COMMAND ESCAPES is enabled in	compose	mode, and diverse
	       INTERNAL	VARIABLES are adjusted for batch necessities, exactly
	       as if done via -S: emptystart, noerrexit, noheader, noposix,
	       quiet, sendwait,	typescript-mode	as well	as MAIL, MBOX and
	       inbox (the latter three to /dev/null).  Also, the values	of
	       COLUMNS and LINES are looked up,	and acted upon.	 The following
	       prepares	an email message in a batched dry run:

		     $ LC_ALL=C	printf 'm bob\n~s ubject\nText\n~.\nx\n' |\
		       LC_ALL=C	s-nail -d#:x -X'alias bob bob@exam.ple'

     -., --end-options
	       This flag forces	termination of option processing in order to
	       prevent "option injection" (attacks).  It also forcefully puts
	       S-nail into send	mode, see On sending mail, and non-interactive
	       mode.

     All given to-addr arguments and all receivers established via -b and -c
     as	well as	-T are subject to the checks established by expandaddr,	one of
     the INTERNAL VARIABLES; they all support the flag `shquote'.  If the set-
     ting of expandargv	allows their recognition all mta-option	arguments
     given at the end of the command line after	a `--' separator will be
     passed through to a file-based mta	(Mail-Transfer-Agent) and persist for
     the entire	session.  expandargv constraints do not	apply to the content
     of	mta-arguments.

   A starter
     S-nail is a direct	descendant of BSD Mail,	itself a successor to the Re-
     search UNIX mail which "was there from the	start" according to HISTORY.
     It	thus represents	the user side of the UNIX mail system, whereas the
     system side (Mail-Transfer-Agent, MTA) was	traditionally taken by
     sendmail(8) (and most MTAs	provide	a binary of this name for compatibil-
     ity reasons).  If the [Option]al SMTP mta is included in the features of
     S-nail then the system side is not	a mandatory precondition for mail de-
     livery.

     S-nail strives for	compliance with	the POSIX mailx(1) standard, but
     posix, one	of the INTERNAL	VARIABLES (or its ENVIRONMENTal	equivalent
     POSIXLY_CORRECT), needs to	be set to adjust behaviour to be almost	on
     par.  Almost, because there is one	important difference: POSIX
     Shell-style argument quoting is ([v15 behaviour may differ] increasingly)
     used instead of the Old-style argument quoting that the standard docu-
     ments, which is believed to be a feature.	The builtin as well as the
     (default) global s-nail.rc	Resource files already bend the	standard im-
     posed settings a bit.

     For example, hold and keepsave are	set in order to	suppress the automatic
     moving of messages	to the secondary mailbox MBOX that would otherwise oc-
     cur (see Message states), and keep	to not remove empty system MBOX	mail-
     box files (or all empty such files	in posix mode) to avoid	mangling of
     file permissions when files eventually get	recreated.

     To	enter interactive mode even if the initial mailbox is empty emptystart
     is	set, editheaders to allow editing of headers as	well as	fullnames to
     not strip down addresses in compose mode, and quote to include the	mes-
     sage that is being	responded to when replying, which is indented by an
     indentprefix that also deviates from standard imposed settings.
     mime-counter-evidence is fully enabled, too.  It sets followup-to-honour
     and reply-to-honour to comply with	reply address desires.

     Random remarks.  The file mode creation mask can be managed explicitly
     via the variable umask.  Files and	shell pipe output can be sourced for
     evaluation, also during startup from within the Resource files.  Informa-
     tional context can	be available by	setting	verbose	or debug (as via -v,
     -d).

   On sending mail, and	non-interactive	mode
     To	send a message to one or more people, using a local or built-in	mta
     (Mail-Transfer-Agent) transport to	actually deliver the generated mail
     message, S-nail can be invoked with arguments which are the names of peo-
     ple to whom the mail will be sent,	and the	command	line options -b	and -c
     can be used to add	(blind)	carbon copy receivers:

	   # Via test MTA
	   $ echo Hello, world | s-nail	-:/ -Smta=test -s test $LOGNAME

	   # Via sendmail(1) MTA
	   $ </dev/null	s-nail -:x -s test $LOGNAME

	   # Debug dry-run mode:
	   $ </dev/null	LC_ALL=C s-nail	-d -:/ \
	      -Sttycharset=utf8	-Sfullnames \
	      -b bcc@exam.ple -c cc@exam.ple -.	\
	      '(Lovely)	Bob <bob@exam.ple>' eric@exam.ple

	   # With SMTP (no real	sending	due to -d debug	dry-run)
	   $ LC_ALL=C s-nail -d	-:/ -Sv15-compat -Sttycharset=utf8 \
	       -S mta=smtps://mylogin@exam.ple:465 -Ssmtp-auth=none \
	       -S from=scriptreply@exam.ple \
	       -a /etc/mail.rc --end-options \
	       eric@exam.ple < /tmp/letter.txt

     If	standard input is a terminal rather than the message to	be sent, the
     user is expected to type in the message contents.	In this	compose	mode
     S-nail treats lines beginning with	the character `~' special - these are
     so-called COMMAND ESCAPES,	which can be used to read in files, process
     shell commands, add and edit attachments and more;	for example ~v or ~e
     will start	the VISUAL text	EDITOR,	respectively, to revise	the message in
     its current state,	~h allows editing of the most important	message	head-
     ers, with the potent ~^ custom headers can	be created, for	example	(more
     specifically than with -C and customhdr).	[Option]ally ~?	gives an over-
     view of most other	available command escapes.

     The command escape	~. (see	there) will call hooks,	insert automatic in-
     jections and receivers, leave compose mode	and send the message once it
     is	completed.  Aborting letter composition	is possible with either	of ~x
     or	~q, the	latter of which	will save the message in the file denoted by
     DEAD unless nosave	is set.	 And unless ignoreeof is set the effect	of ~.
     can also be achieved by typing end-of-transmission	(EOT) via `control-D'
     (`^D') at the beginning of	an empty line, and ~q is always	reachable by
     typing end-of-text	(ETX) twice via	`control-C' (`^C').

     A number of ENVIRONMENT and INTERNAL VARIABLES can	be used	to alter de-
     fault behavior.  setting (also via	-S) editalong will automatically
     startup an	editor when compose mode is entered, and editing of headers
     additionally to plain body	content	can be enabled via editheaders:	[v15
     behaviour may differ] some, but not all headers can be created, edited or
     deleted in	an editor, then.  askcc	and askbcc will	cause the user to be
     prompted actively for (blind) carbon-copy recipients, respectively, and
     (the default) asksend will	request	confirmation whether the message shall
     be	sent.

     The envelope sender address is defined by from, explicitly	defining an
     originating hostname may be desirable, especially with the	built-in SMTP
     Mail-Transfer-Agent mta.  Character sets for outgoing message and MIME
     part content are configurable via sendcharsets, whereas input data	is as-
     sumed to be in ttycharset.	 Message data will be passed over the wire in
     a mime-encoding.  MIME parts aka attachments need to be assigned a
     mimetype, usually taken out of The	mime.types files.  Saving a copy of
     sent messages in a	record mailbox may be desirable	- as for most mailbox
     folder targets the	value will undergo Filename transformations.  Some in-
     troductional -d or	debug sandbox dry-run tests will prove correctness.

     Message recipients	are subject to alternates filtering, and may not only
     be	email addresses, but can also be names of mailboxes and	even complete
     shell command pipe	specifications.	 If the	variable expandaddr is not set
     then only email addresses like `bob@exam.ple' and plain user names	(in-
     cluding MTA aliases) may be used, other types will	be filtered out, giv-
     ing a warning message.  expandaddr	indeed allows further control over and
     adjustments of message recipients,	for example user names can be expanded
     to	network	addresses by specifying	`nametoaddr'.  A network address that
     contains no domain-, but only a valid local user `<name>' in angle	brack-
     ets will be automatically expanded	to a valid address when	hostname is
     not set, or set to	a non-empty value; setting it to the empty value in-
     structs S-nail that the used mta will perform the necessary expansion.
     The command addrcodec may help to generate	standard compliant network ad-
     dresses.

     If	the variable expandaddr	is set then an extended	set of recipient ad-
     dresses will be accepted: Any name	that starts with a vertical bar	`|'
     character specifies a command pipe	- the command string following the `|'
     is	executed and the message is sent to its	standard input;	Likewise, any
     name that consists	only of	hyphen-minus `-' or starts with	the character
     solidus `/' or the	character sequence dot solidus `./' is treated as a
     file, regardless of the remaining content.	 Any other name	which contains
     a commercial at `@' character is a	network	address; Any other name	which
     starts with a plus	sign `+' character is a	mailbox	name; Any other	name
     which contains a solidus `/' character but	no exclamation mark `!'	or
     percent sign `%' character	before is also a mailbox name; What remains is
     treated as	a network address.

	   $ echo bla |	s-nail -Sexpandaddr -s test ./mbox.mbox
	   $ echo bla |	s-nail -Sexpandaddr -s test '|cat >> ./mbox.mbox'
	   $ echo safe | LC_ALL=C \
	       s-nail -:/ -Sv15-compat -Sttycharset=utf8 \
		 --set mime-force-sendout \
		 -Sexpandaddr=fail,-all,+addr,failinvaddr -s test \
		 --end-options bob@exam.ple

     To	create file-carbon-copies the special recipient	header `Fcc:' may be
     used as often as desired.	Its entire value (or body in standard terms)
     is	interpreted as a folder	target,	after having been subject to Filename
     transformations.  Beside using the	command	escape ~^ (to create a `Fcc'
     header) this is the only way to create a file-carbon-copy without intro-
     ducing an ambiguity regarding the interpretation of the address, file
     names with	leading	vertical bars or commercial ats	can be used.  Like all
     other recipients `Fcc:' is	subject	to the checks of expandaddr.  Any lo-
     cal file and pipe command addressee honours the setting of
     mbox-fcc-and-pcc.

     It	is possible to create personal distribution lists via the alias	com-
     mand, so that, for	instance, the user can send mail to `cohorts' and have
     it	go to a	group of people.  Different to the alias mechanism of most lo-
     cal mtas, often documented	in aliases(5) and subject to the `name'	con-
     straint of	expandaddr, personal aliases will be expanded by S-nail	before
     the message is sent.  They	are thus a convenient alternative to specify-
     ing each addressee	by itself, correlate with the active set of
     alternates, and are subject to metoo filtering.  [Option]ally MTA aliases
     can be expanded before sending messages by	setting	mta-aliases.

	   ? alias  cohorts  bill jkf mark kridle@ucbcory ~/cohorts.mbox
	   ? alias  mark  mark@exam.ple
	   ? set mta-aliases=/etc/aliases

     For the purpose of	arranging a complete environment of settings that can
     be	switched to with a single command or command line option there are
     accounts.	Alternatively it is also possible to use a flat	configuration,
     making use	of so-called variable chains which automatically pick
     `USER@HOST' or `HOST' context-dependent variable variants:	for example
     addressing	`Folder	pop3://yaa@exam.ple' would find
     pop3-no-apop-yaa@exam.ple,	pop3-no-apop-exam.ple and pop3-no-apop in or-
     der.  See On URL syntax and credential lookup and INTERNAL	VARIABLES.

     The compose mode hooks on-compose-enter, on-compose-splice,
     on-compose-leave and on-compose-cleanup may be set	to defined macros and
     provide reliable and increasingly powerful	mechanisms to perform auto-
     mated message adjustments dependent on message context, for example addi-
     tion of message signatures	(message-inject-head, message-inject-tail) or
     creation of additional receiver lists (also by setting autocc, autobcc).
     To	achieve	that the command digmsg	may be used in order to	query and ad-
     just status of message(s).	 The splice hook can also make use of COMMAND
     ESCAPES.  ([v15 behaviour may differ] The compose mode hooks work for
     forward, mail, reply and variants;	resend and Resend only provide the
     hooks on-resend-enter and on-resend-cleanup, which	are pretty restricted
     due to the	nature of the operation.)

     To	avoid environmental noise scripts should "detach" S-nail from any con-
     figuration	files and create a script-local	environment, ideally with the
     command line options -: to	disable	any configuration file in conjunction
     with repetitions of -S to specify variables:

	   $ env LC_ALL=C s-nail -:/ \
	       -Sv15-compat \
	       -Sttycharset=utf-8 -Smime-force-sendout \
	       -Sexpandaddr=fail,-all,failinvaddr \
	       -S mta=smtps://mylogin@exam.ple:465 -Ssmtp-auth=login \
	       -S from=scriptreply@exam.ple \
	       -s 'Subject to go' -a attachment_file \
	       -Sfullnames -. \
	       'Recipient 1 <rec1@exam.ple>' rec2@exam.ple \
	       < content_file

     As	shown, scripts can "fake" a locale environment,	the above specifies
     the all-compatible	7-bit clean LC_ALL "C",	but will nonetheless take and
     send UTF-8	in the message text by using ttycharset.  If character set
     conversion	is compiled in (features includes the term `+iconv') invalid
     (according	to ttycharset) character input data would normally cause er-
     rors; setting mime-force-sendout will instead, as a last resort, classify
     the input as binary data, and therefore allow message creation to be suc-
     cessful.  (Such content can then be inspected either by installing	a
     pipe-TYPE/SUBTYPE handler for `application/octet-stream', or possibly au-
     tomatically through mime-counter-evidence).

     In	interactive mode, which	is introduced in the next section, messages
     can be sent by calling the	mail command with a list of recipient ad-
     dresses:

	   $ s-nail -d -Squiet -Semptystart
	   "/var/spool/mail/user": 0 messages
	   ? mail "Recipient 1 <rec1@exam.ple>", rec2@exam.ple
	   ...
	   ? # Will do the right thing (tm)
	   ? m rec1@exam.ple rec2@exam.ple

   On reading mail, and	interactive mode
     When invoked without addressees S-nail enters interactive mode in which
     mails may be read.	 When used like	that the user's	system inbox (for more
     on	mailbox	types please see the command folder) is	read in	and a one line
     header of each message therein is displayed if the	variable header	is
     set.  The visual style of this summary of headers can be adjusted through
     the variable headline and the possible sorting criterion via autosort.
     Scrolling through screenfuls of headers can be performed with the command
     z.	 If the	initially opened mailbox is empty S-nail will instead exit im-
     mediately (after displaying a message) unless the variable	emptystart is
     set.

     At	the prompt the command list will give a	listing	of all available com-
     mands and help will [Option]ally give a summary of	some common ones.  If
     the [Option]al documentation strings are available	(see features) one can
     type `help	X' (or `?X') and see the actual	expansion of `X' and what its
     purpose is, i.e., commands	can be abbreviated (note that POSIX defines
     some abbreviations, so that the alphabetical order	of commands does not
     necessarily relate	to the abbreviations; it is however possible to	define
     overwrites	with commandalias).  These commands can	also produce a more
     verbose output.

     Messages are given	numbers	(starting at 1)	which uniquely identify	mes-
     sages; the	current	message	- the "dot" - will either be the first new
     message, or the first unread message, or the first	message	of the mail-
     box; the internal variable	showlast will instead cause usage of the last
     message for this purpose.	The command headers will display a screenful
     of	header summaries containing the	"dot", whereas from will display only
     the summaries of the given	messages, defaulting to	the "dot".

     Message content can be displayed with the command type (`t', alias
     print).  Here the variable	crt controls whether and when S-nail will use
     the configured PAGER for display instead of directly writing to the user
     terminal screen, the sole difference to the command more, which will al-
     ways use the PAGER.  The command top will instead only show the first
     toplines of a message (maybe even compressed if topsqueeze	is set).  Mes-
     sage display experience may improve by setting and	adjusting
     mime-counter-evidence, and	also see HTML mail and MIME attachments.

     By	default	the current message ("dot") is displayed, but like with	many
     other commands it is possible to give a fancy message specification (see
     Specifying	messages), for example `t:u' will display all unread messages,
     `t.' will display the "dot", `t 1 5' will type the	messages 1 and 5, `t
     1-5' will type the	messages 1 through 5, and `t-' and `t+'	will display
     the previous and the next message,	respectively.  The command search (a
     more substantial alias for	from) will display a header summary of the
     given message specification list instead of their content;	the following
     will search for subjects:

	   ? from '@Some subject to search for'

     In	the default setup all header fields of a message will be typed,	but
     fields can	be white- or blacklisted for a variety of applications by us-
     ing the command headerpick, e.g., to restrict their display to a very re-
     stricted set for type: `headerpick	type retain from to cc subject'.  In
     order to display all header fields	of a message regardless	of currently
     active ignore or retain lists, use	the commands Type and Top; Show	will
     show the raw message content.  Note that historically the global
     s-nail.rc not only	adjusts	the list of displayed headers, but also	sets
     crt.  ([v15 behaviour may differ] A yet somewhat restricted) Reliable
     scriptable	message	inspection is available	via digmsg.

     Dependent upon the	configuration a	line editor (see the section On
     terminal control and line editor) aims at making the user experience with
     the many COMMANDS a bit nicer.  When reading the system inbox, or when -f
     (or folder) specified a mailbox explicitly	prefixed with the special `%:'
     modifier (to propagate it to a primary system mailbox), then messages
     which have	been read (see Message states) will be automatically moved to
     a secondary mailbox, the user's MBOX file,	when the mailbox is left, ei-
     ther by changing the active mailbox or by quitting	S-nail - this auto-
     matic moving from a system- or primary- to	the secondary mailbox is not
     performed when the	variable hold is set.  Messages	can also be explicitly
     moved to other mailboxes, whereas copy keeps the original message.	 write
     can be used to write out data content of specific parts of	messages.

     After examining a message the user	can reply `r' to the sender and	all
     recipients	(which will also be placed in `To:' unless recipients-in-cc is
     set), or Reply `R'	exclusively to the sender(s).  To comply with with the
     receivers desired reply address the quadoptions followup-to-honour	and
     reply-to-honour should usually be set.  The commands Lreply and Lfollowup
     know how to apply a special addressee massage, see	Mailing	lists.	Depen-
     dent on the presence and value of quote the message being replied to will
     be	included in a quoted form.  forwarding a message will allow editing
     the new message: the original message will	be contained in	the message
     body, adjusted according to headerpick.  It is possible to	resend or
     Resend messages: the former will add a series of `Resent-'	headers,
     whereas the latter	will not; different to newly created messages editing
     is	not possible and no copy will be saved even with record	unless the ad-
     ditional variable record-resent is	set.  When sending, replying or	for-
     warding messages comments and full	names will be stripped from recipient
     addresses unless the internal variable fullnames is set.

     Of	course messages	can be delete `d', and they can	spring into existence
     again via undelete, or when the S-nail session is ended via the exit or
     xit commands to perform a quick program termation.	 To end	a mail pro-
     cessing session regulary and perform a full program exit one may issue
     the command quit.	It will, among others, move read messages to the
     secondary mailbox MBOX as necessary, discard deleted messages in the cur-
     rent mailbox, and update the [Option]al (see features) line editor
     history-file.  By the way,	whenever the main event	loop is	about to look
     out for the next input line it will trigger the hook on-main-loop-tick.

   HTML	mail and MIME attachments
     HTML-only messages	become more and	more common, and many messages come
     bundled with a bouquet of MIME (Multipurpose Internet Mail	Extensions)
     parts and attachments.  To	get a notion of	MIME types S-nail has a	de-
     fault set of types	built-in, onto which the content of The	mime.types
     files will	be added (as configured	and allowed by
     mimetypes-load-control).  Types can also become registered	with the com-
     mand mimetype.  To	improve	interaction with the faulty MIME part declara-
     tions of real life	mime-counter-evidence will allow verification of the
     given assertion, and the possible provision of an alternative, better
     MIME type.

     Whereas a simple HTML-to-text filter for displaying HTML messages is [Op-
     tion]ally supported (indicated by `+filter-html-tagsoup' in features),
     MIME types	other than plain text cannot be	handled	directly.  Instead
     programs need to become registered	to deal	with specific MIME types or
     file extensions, either to	prepare	(re-)integrable	plain text versions of
     their input (a mode which is called copiousoutput), or to display the
     content externally, for example in	a graphical window: the	latter type is
     only considered by	and for	the command mimeview.

     To	install	a handler program for a	MIME type an according
     pipe-TYPE/SUBTYPE variable	needs to be set; to define a handler for a
     file extension pipe-EXTENSION can be used - these handlers	take prece-
     dence.  [Option]ally mail user agent configuration	is supported (see The
     Mailcap files), and will be queried for display or	quote handlers after
     the former	ones.  Type-markers registered via mimetype are	the last pos-
     sible source for information how to handle	a MIME type.

     For example, to display HTML messages integrated via the text browsers
     lynx(1) or	elinks(1), register a MathML MIME type and enable its plain
     text display, and to open PDF attachments in an external PDF viewer,
     asynchronously and	with some other	magic attached:

	   ? if	"$features" !% +filter-html-tagsoup
	   ?   #set pipe-text/html='?* elinks -force-html -dump	1'
	   ?   set pipe-text/html='?* lynx -stdin -dump	-force_html'
	   ?   # Display HTML as plain text instead
	   ?   #set pipe-text/html=?t
	   ? endif
	   ? mimetype ?t application/mathml+xml	mathml
	   ? wysh set pipe-application/pdf='?&=? \
	       trap "rm	-f \"${MAILX_FILENAME_TEMPORARY}\"" EXIT;\
	       trap "trap \"\" INT QUIT	TERM; exit 1" INT QUIT TERM;\
	       mupdf "${MAILX_FILENAME_TEMPORARY}"'

   Mailing lists
     Known or subscribed-to mailing lists may be flagged in the	summary	of
     headers (headline format character	`%L'), and will	gain special treatment
     when sending mails: the variable followup-to-honour will ensure that a
     `Mail-Followup-To:' header	is honoured when a message is being replied to
     (reply, followup, Lreply, Lfollowup), and followup-to controls creation
     of	this header when creating mails, if the	necessary user setup (from,
     sender); is available; then, it may also be created automatically,	for
     example when list-replying	via Lreply or Lfollowup, when followup or
     reply is used and the messages `Mail-Followup-To:'	is honoured etc.

     The commands mlist	and mlsubscribe	manage S-nails notion of which ad-
     dresses are mailing lists.	 With the [Option]al regular expression	sup-
     port any address which contains any of the	magic regular expression char-
     acters (`^[*+?|$';	see re_format(7) or regex(7), dependent	on the host
     system) will be compiled and used as one, possibly	matching many ad-
     dresses.  It is not possible to escape the	"magic": in order to match
     special characters	as-is, bracket expressions must	be used, for example
     `search @subject@'[[]open bracket''.

	   ? set followup-to followup-to-honour=ask-yes	\
	       reply-to-honour=ask-yes
	   ? mlist a1@b1.c1 a2@b2.c2 '.*@lists\.c3$'
	   ? mlsubscribe a4@b4.c4 exact@lists.c3

     Known and subscribed lists	differ in that for the latter the users	ad-
     dress is not part of a generated `Mail-Followup-To:'.  There are excep-
     tions, for	example	if multiple lists are addressed	and not	all have the
     subscription attribute.  When replying to a message its list address
     (`List-Post:' header) is automatically and	temporarily treated like a
     known mlist; dependent on the variable reply-to-honour an existing
     `Reply-To:' is used instead (if it	is a single address on the same	domain
     as	`List-Post:') in order to accept a list	administrator's	wish that is
     supposed to have been manifested like that.

     For convenience and compatibility with mail programs that do not honour
     the non-standard M-F-T, an	automatic user entry in	the carbon-copy	`Cc:'
     address list of generated message can be created by setting
     followup-to-add-cc.  This entry will be added whenever the	user will be
     placed in the `Mail-Followup-To:' list, and is not	a regular addressee
     already.  reply-to-swap-in	tries to deal with the address rewriting that
     many mailing-lists	nowadays perform to work around	DKIM / DMARC etc.
     standard imposed problems.

   Signed and encrypted	messages with S/MIME
     [Option] S/MIME provides two central mechanisms: message signing and mes-
     sage encryption.  A signed	message	contains some data in addition to the
     regular text.  The	data can be used to verify that	the message has	been
     sent using	a valid	certificate, that the sender address matches that in
     the certificate, and that the message text	has not	been altered.  Signing
     a message does not	change its regular text; it can	be read	regardless of
     whether the recipients software is	able to	handle S/MIME.	It is thus
     usually possible to sign all outgoing messages if so desired.

     Encryption, in contrast, makes the	message	text invisible for all people
     except those who have access to the secret	decryption key.	 To encrypt a
     message, the specific recipients public encryption	key must be known.  It
     is	therefore not possible to send encrypted mail to people	unless their
     key has been retrieved from either	previous communication or public key
     directories.  Because signing is performed	with private keys, and encryp-
     tion with public keys, messages should always be signed before being en-
     crypted.

     A central concept to S/MIME is that of the	certification authority	(CA).
     A CA is a trusted institution that	issues certificates.  For each of
     these certificates	it can be verified that	it really originates from the
     CA, provided that the CA's	own certificate	is previously known.  A	set of
     CA	certificates is	usually	delivered and installed	together with the
     cryptographical library that is used on the local system.	Therefore rea-
     sonable security for S/MIME on the	Internet is provided if	the source
     that provides that	library	installation is	trusted.  It is	also possible
     to	use a specific pool of trusted certificates.  If this is desired,
     smime-ca-no-defaults should be set	to avoid using the default certificate
     pool, and smime-ca-file and/or smime-ca-dir should	be pointed to a
     trusted pool of certificates.  A certificate cannot be more secure	than
     the method	its CA certificate has been retrieved with.

     This trusted pool of certificates is used by the command verify to	ensure
     that the given S/MIME messages can	be trusted.  If	so, verified sender
     certificates that were embedded in	signed messages	can be saved locally
     with the command certsave,	and used by S-nail to encrypt further communi-
     cation with these senders:

	   ? certsave FILENAME
	   ? set smime-encrypt-USER@HOST=FILENAME \
	       smime-cipher-USER@HOST=AES256

     To	sign outgoing messages,	in order to allow receivers to verify the ori-
     gin of these messages, a personal S/MIME certificate is required.	S-nail
     supports password-protected personal certificates (and keys), see
     smime-sign-cert.  The section On URL syntax and credential	lookup gives
     an	overview of the	possible sources of user credentials, and S/MIME step
     by	step shows examplarily how a private S/MIME certificate	can be ob-
     tained.  In general, if such a private key	plus certificate "pair"	is
     available,	all that needs to be done is to	set some variables:

	   ? set smime-sign-cert=ME@exam.ple.paired \
	       smime-sign-digest=SHA512	\
	       smime-sign from=myname@my.host

     Variables of interest for S/MIME in general are smime-ca-dir,
     smime-ca-file, smime-ca-flags, smime-ca-no-defaults, smime-crl-dir,
     smime-crl-file.  For S/MIME signing of interest are smime-sign,
     smime-sign-cert, smime-sign-include-certs and smime-sign-digest.  Addi-
     tional variables of interest for S/MIME en- and decryption: smime-cipher
     and smime-encrypt-USER@HOST.  Variables of	secondary interest may be
     content-description-smime-message and
     content-description-smime-signature.  S/MIME is available if `+smime' is
     included in features.

     [v15 behaviour may	differ]	Note that neither S/MIME signing nor encryp-
     tion applies to message subjects or other header fields yet.  Thus	they
     may not contain sensitive information for encrypted messages, and cannot
     be	trusted	even if	the message content has	been verified.	When sending
     signed messages, it is recommended	to repeat any important	header infor-
     mation in the message text.

   On URL syntax and credential	lookup
     For accessing protocol-specific resources Uniform Resource	Locators (URL,
     RFC 3986) have become omnipresent.	 Here they are expected	in a
     "normalized" variant, not used in data exchange, but only meant as	a com-
     pact, easy-to-use way of defining and representing	information in a well-
     known notation; as	such they do not conform to any	real standard.	Op-
     tional parts are placed in	brackets `[]', optional	either because there
     also exist	other ways to define the information, or because the part is
     protocol specific.	 `/path' for example is	used by	the [Option]al Maildir
     folder type and the IMAP protocol,	but not	by POP3.  If `USER' and
     `PASSWORD'	are included in	an URL server specification, URL percent en-
     coded (RFC	3986) forms are	needed,	generable with urlcodec.

	   PROTOCOL://[USER[:PASSWORD]@]server[:port][/path]

     Often INTERNAL VARIABLES exist in multiple	versions, called "variable
     chains" in	this document: the plain `variable' as well as `variable-HOST'
     and `variable-USER@HOST'.	If a port was specified	`HOST' really means
     `server:port', not	`server'.  And this `USER' is never in URL percent en-
     coded form.  For example, whether the hypothetical	`smtp://wings%3Aof
     @a.dove' including	user and password was used, or whether it was
     `smtp://a.dove' and it came from a	different source, to lookup the	chain
     tls-config-pairs first `tls-config-pairs-wings:of@a.dove' is looked up,
     then `tls-config-pairs-a.dove', before finally looking up the plain vari-
     able.

     The logic to collect (an accounts)	credential information is as follows:

     +o	 A user	is always required.  If	no `USER' has been given in the	URL
	 the variables user-HOST and user are looked up.  Afterwards, when en-
	 forced	by the [Option]al variables netrc-lookup-HOST or netrc-lookup,
	 The .netrc file of the	user will be searched for a `HOST' specific
	 entry which provides a	`login'	name: only unambiguous entries are
	 used (one possible matching entry for `HOST').

	 If there is still no `USER' then the verified LOGNAME,	known to be a
	 valid user on the current host, is used.

     +o	 Authentication: unless	otherwise noted	the chain
	 PROTOCOL-auth-USER@HOST, PROTOCOL-auth-HOST, PROTOCOL-auth is
	 checked, falling back to a protocol-specific default as necessary.

     +o	 If no `PASSWORD' has been given in the	URL, then if the `USER'	has
	 been found through the	[Option]al netrc-lookup, that may have also
	 provided the password.	 Otherwise the chain password-USER@HOST,
	 password-HOST,	password is looked up.

	 Thereafter the	(now complete) [Option]al chain
	 netrc-lookup-USER@HOST, netrc-lookup-HOST, netrc-lookup is checked,
	 if set	the netrc cache	is searched for	a password only	(multiple user
	 accounts for a	single machine may exist as well as a fallback entry
	 without user but with a password).

	 If at that point there	is still no password available,	but the	(pro-
	 tocols') chosen authentication	type requires a	password, then in in-
	 teractive mode	the user will be prompted on the terminal.

     Note: S/MIME verification works relative to the values found in the
     `From:' (or `Sender:') header field(s), which means the values of
     smime-sign, smime-sign-cert, smime-sign-include-certs and
     smime-sign-digest will not	be looked up using the `USER' and `HOST'
     chains from above,	but instead use	the corresponding values from the mes-
     sage that is being	worked on.  If no address matches we assume and	use
     the setting of from.  In unusual cases multiple and different `USER' and
     `HOST' combinations may therefore be involved - on	the other hand those
     unusual cases become possible.  The usual case is as short	as:

	   set mta=smtp://USER:PASS@HOST smtp-use-starttls \
	       smime-sign smime-sign-cert=+smime.pair \
	       from=myname@my.host

     The section EXAMPLES contains complete example configurations.

   Encrypted network communication
     [Option] SSL (Secure Sockets Layer) aka its successor TLS (Transport
     Layer Security) are protocols which aid in	securing communication by pro-
     viding a safely initiated and encrypted network connection.  A central
     concept of	TLS are	certificates: as part of each network connection setup
     a (set of)	certificates will be exchanged through which the identity of
     the network peer can be cryptographically verified; if possible the
     TLS/SNI (ServerNameIndication) extension will be enabled to allow servers
     fine-grained control over the certificates	being used.  A locally in-
     stalled pool of trusted certificates will then be inspected, and verifi-
     cation will succeed if it contains	a(n in)direct signer of	the presented
     certificate(s).

     The local pool of trusted so-called CA (Certification Authority) certifi-
     cates is usually delivered	with and used along the	TLS library.  A	custom
     pool of trusted certificates can be selected by pointing tls-ca-file
     and/or (with special preparation) tls-ca-dir to the desired location;
     setting tls-ca-no-defaults	in addition will avoid additional inspection
     of	the default pool.  A certificate cannot	be more	secure than the	method
     its CA certificate	has been retrieved with.  For inspection or other pur-
     poses, the	certificate of a server	(as seen when connecting to it)	can be
     fetched with the command tls (port	can usually be the protocol name, too,
     and tls-verify is taken into account here):

	   $ s-nail -vX	'tls certchain SERVER-URL[:PORT]; x'

     A local pool of CA	certificates is	not strictly necessary,	however,
     server certificates can also be verified via their	fingerprint.  For this
     a message digest will be calculated and compared against the variable
     chain tls-fingerprint, and	verification will succeed if the fingerprint
     matches.  The message digest (algorithm) can be configured	via the	vari-
     able chain	tls-fingerprint-digest;	tls can	again be used:

	   $ s-nail -X 'wysh set verbose; tls fingerprint SERVER-URL[:PORT]; x'

     It	depends	on the used protocol whether encrypted communication is	possi-
     ble, and which configuration steps	have to	be taken to enable it.	Some
     protocols,	like POP3S, are	implicitly encrypted, others, like POP3, can
     upgrade a plain text connection if	so requested.  For example, to use the
     `STLS' that POP3 offers (a	member of) the variable	(chain)
     pop3-use-starttls needs to	be set,	with convenience via shortcut:

	   shortcut encpop1 pop3s://pop1.exam.ple

	   shortcut encpop2 pop3://pop2.exam.ple
	   set pop3-use-starttls-pop2.exam.ple

	   set mta=smtps://smtp.exam.ple:465
	   set mta=smtp://smtp.exam.ple	smtp-use-starttls

     Normally that is all there	is to do, given	that TLS libraries try to pro-
     vide safe defaults, plenty	of knobs however exist to adjust settings.
     For example certificate verification settings can be fine-tuned via
     tls-ca-flags, and the TLS configuration basics are	accessible via
     tls-config-pairs, for example to control protocol versions	or cipher
     lists.  In	the past hints on how to restrict the set of protocols to
     highly secure ones	were indicated,	but as of the time of this writing the
     list of protocols or ciphers may need to become relaxed in	order to be
     able to connect to	some servers; the following example allows connecting
     to	a "Lion" that uses OpenSSL 0.9.8za from	June 2014 (refer to INTERNAL
     VARIABLES for more	on variable chains):

	   wysh	set tls-config-pairs-lion@exam.ple='MinProtocol=TLSv1.1,\
	       CipherString=TLSv1.2:!aNULL:!eNULL:\
		 ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:\
		 DHE-RSA-AES256-SHA:@STRENGTH'

     The OpenSSL program ciphers(1) should be referred to when creating	a cus-
     tom cipher	list.  Variables of interest for TLS in	general	are
     tls-ca-dir, tls-ca-file, tls-ca-flags, tls-ca-no-defaults,
     tls-config-file, tls-config-module, tls-config-pairs, tls-crl-dir,
     tls-crl-file, tls-rand-file as well as tls-verify.	 Also see
     tls-features.  TLS	is available if	`+tls' is included in features.

   Character sets
     [Option] S-nail detects the character set of the terminal by using	mecha-
     nisms that	are controlled by the LC_CTYPE environment variable (in	fact
     LC_ALL, LC_CTYPE, LANG, in	that order, see	there).	 The internal variable
     ttycharset	will be	set to the detected terminal character set accord-
     ingly, and	will thus show up in the output	of commands like set and
     varshow.

     However, the user may give	ttycharset a value during startup, making it
     possible to send mail in a	completely "faked" locale environment, an op-
     tion which	can be used to generate	and send for example 8-bit UTF-8 input
     data in a pure 7-bit US-ASCII `LC_ALL=C' environment (an example of this
     can be found in the section On sending mail, and non-interactive mode).
     Changing the value	does not mean much beside that,	because	several	as-
     pects of the real character set are implied by the	locale environment of
     the system, which stays unaffected	by ttycharset.

     Messages and attachments which consist of 7-bit clean data	will be	clas-
     sified as consisting of charset-7bit character data.  This	is a problem
     if	the ttycharset character set is	a multibyte character set that is also
     7-bit clean.  For example,	the Japanese character set ISO-2022-JP is
     7-bit clean but capable to	encode the rich	set of Japanese	Kanji, Hira-
     gana and Katakana characters: in order to notify receivers	of this	char-
     acter set the mail	message	must be	MIME encoded so	that the character set
     ISO-2022-JP can be	advertised!  To	achieve	this, the variable
     charset-7bit must be set to ISO-2022-JP.  (Today a	better approach	re-
     garding email is the usage	of UTF-8, which	uses 8-bit bytes for non-US-
     ASCII data.)

     If	the [Option]al character set conversion	capabilities are not available
     (features does not	include	the term `+iconv'), then ttycharset will be
     the only supported	character set, it is simply assumed that it can	be
     used to exchange 8-bit messages (over the wire an intermediate, config-
     urable mime-encoding may be applied), and the rest	of this	section	does
     not apply;	it may however still be	necessary to explicitly	set it if au-
     tomatic detection fails, since in that case it defaults to	LATIN1 aka
     ISO-8859-1	unless the operating system environment	is known to always and
     exclusively support UTF-8 locales.

     [Option] When reading messages, their text	is converted into ttycharset
     as	necessary in order to display them on the user's terminal.  Unprint-
     able characters and invalid byte sequences	are detected and replaced by
     proper substitution characters.  Character	set mappings for source	char-
     acter sets	can be established with	the command charsetalias, which	may be
     handy to work around faulty character set catalogues (one could add a
     missing LATIN1 to ISO-8859-1 mapping), or to enforce treatment of one
     character set as another one (maybe interpret LATIN1 as CP1252).  Also
     see charset-unknown-8bit to deal with another hairy aspect	of message in-
     terpretation.

     When sending messages their parts and attachments are classified.
     Whereas no	character set conversion is performed on those parts which ap-
     pear to be	binary data, the character set being used must be declared
     within the	MIME header of an outgoing text	part if	it contains characters
     that do not conform to the	set of characters that are allowed by the
     email standards.  Permissible values for character	sets used in outgoing
     messages can be declared using the	sendcharsets variable, and
     charset-8bit, which defines a catch-all last-resort fallback character
     set that is implicitly appended to	the list of character sets in
     sendcharsets.

     When replying to a	message	and the	variable reply-in-same-charset is set,
     then the character	set of the message being replied to is tried first
     (still being a subject of charsetalias).  And it is also possible to make
     S-nail work even more closely related to the current locale setting auto-
     matically by using	the variable sendcharsets-else-ttycharset, please see
     there for more information.

     All the specified character sets are tried	in order unless	the conversion
     of	the part or attachment succeeds.  If none of the tried (8-bit) charac-
     ter sets is capable to represent the content of the part or attachment,
     then the message will not be send and its text will optionally be saved
     in	DEAD.  If that is not acceptable, the variable mime-force-sendout can
     be	set in order to	force sending of non-convertible text as
     `application/octet-stream'	classified binary content instead; like	this
     receivers still have the option to	inspect	message	content	(for example
     by	setting	mime-counter-evidence).

     In	general, if a message saying "cannot convert from a to b" appears, ei-
     ther some characters are not appropriate for the currently	selected (ter-
     minal) character set, or the needed conversion is not supported by	the
     system.  In the first case, it is necessary to set	an appropriate
     LC_CTYPE locale and/or the	variable ttycharset.  The best results are
     usually achieved when S-nail is run in a UTF-8 locale on an UTF-8 capable
     terminal, in which	case the full Unicode spectrum of characters is	avail-
     able.  In this setup characters from various countries can	be displayed,
     while it is still possible	to use more simple character sets for sending
     to	retain maximum compatibility with older	mail clients.

     On	the other hand the POSIX standard defines a locale-independent 7-bit
     "portable character set" that should be used when overall portability is
     an	issue, the even	more restricted	subset named "portable filename
     character set" consists of	A-Z, a-z, 0-9, period `.', underscore `_' and
     hyphen-minus `-'.

   Message states
     S-nail differentiates in between several message states; the current
     state will	be reflected in	the summary of headers if the attrlist of the
     configured	headline allows, and Specifying	messages dependent on their
     state is possible.	 When operating	on the system inbox, or	in any other
     primary system mailbox, special actions, like the automatic moving	of
     messages to the secondary mailbox MBOX, may be applied when the mailbox
     is	left (also implicitly by program termination, unless the command exit
     was used) - however, because this may be irritating to users which	are
     used to "more modern" mail-user-agents, the provided global s-nail.rc
     template sets the internal	hold and keepsave variables in order to	sup-
     press this	behaviour.

     `new'     Message has neither been	viewed nor moved to any	other state.
	       Such messages are retained even in the primary system mailbox.

     `unread'  Message has neither been	viewed nor moved to any	other state,
	       but the message was present already when	the mailbox has	been
	       opened last: Such messages are retained even in the primary
	       system mailbox.

     `read'    The message has been processed by one of	the following com-
	       mands: ~f, ~m, ~F, ~M, copy, mbox, next,	pipe, Print, print,
	       top, Type, type,	undelete.  The commands	dp and dt will always
	       try to automatically "step" and type the	"next" logical mes-
	       sage, and may thus mark multiple	messages as read, the delete
	       command will do so if the internal variable autoprint is	set.

	       Except when the exit command is used, messages that are in a
	       primary system mailbox and are in `read'	state when the mailbox
	       is left will be saved in	the secondary mailbox MBOX unless the
	       internal	variable hold it set.

     `deleted' The message has been processed by one of	the following com-
	       mands: delete, dp, dt.  Only undelete can be used to access
	       such messages.

     `preserved' The message has been processed	by a preserve command and it
	       will be retained	in its current location.

     `saved'   The message has been processed by one of	the following com-
	       mands: save or write.  Unless when the exit command is used,
	       messages	that are in a primary system mailbox and are in
	       `saved' state when the mailbox is left will be deleted; they
	       will be saved in	the secondary mailbox MBOX when	the internal
	       variable	keepsave is set.

     In	addition to these message states, flags	which otherwise	have no	tech-
     nical meaning in the mail system except allowing special ways of address-
     ing them when Specifying messages can be set on messages.	These flags
     are saved with messages and are thus persistent, and are portable between
     a set of widely used MUAs.

     answered  Mark messages as	having been answered.

     draft     Mark messages as	being a	draft.

     flag      Mark messages which need	special	attention.

   Specifying messages
     [Only new quoting rules] COMMANDS which take Message list arguments, such
     as	search,	type, copy, and	delete,	can perform actions on a number	of
     messages at once.	Specifying invalid messages, or	using illegal syntax,
     will cause	errors to be reported through the INTERNAL VARIABLES !,	^ERR
     and companions, as	well as	the command exit status	?.

     For example, `delete 1 2' deletes the messages 1 and 2, whereas `delete
     1-5' will delete the messages 1 through 5.	 In sorted or threaded mode
     (see the sort command), `delete 1-5' will delete the messages that	are
     located between (and including) messages 1	through	5 in the
     sorted/threaded order, as shown in	the headers summary.

     Errors can	for example be ^ERR-BADMSG when	requesting an invalid message,
     ^ERR-NOMSG	if no applicable message can be	found, ^ERR-CANCELED for miss-
     ing informational data (mostly thread-related).  ^ERR-INVAL for invalid
     syntax as well as ^ERR-IO for input/output	errors can happen.  The	fol-
     lowing special message names exist:

     .	       The current message, the	so-called "dot".

     ;	       The message that	was previously the current message; needs to
	       be quoted.

     ,	       The parent message of the current message, that is the message
	       with the	Message-ID given in the	`In-Reply-To:' field or	the
	       last entry of the `References:' field of	the current message.

     -	       The previous undeleted message, or the previous deleted message
	       for the undelete	command; In sorted or `thread'ed mode, the
	       previous	such message in	the according order.

     +	       The next	undeleted message, or the next deleted message for the
	       undelete	command; In sorted or `thread'ed mode, the next	such
	       message in the according	order.

     ^	       The first undeleted message, or the first deleted message for
	       the undelete command; In	sorted or `thread'ed mode, the first
	       such message in the according order.

     $	       The last	message; In sorted or `thread'ed mode, the last	such
	       message in the according	order.	Needs to be quoted.

     _x	       In `thread'ed sort mode,	selects	the message addressed with x,
	       where x is any other message specification, and all messages
	       from the	thread that begins at it.  Otherwise it	is identical
	       to x.  If x is omitted, the thread beginning with the current
	       message is selected.

     *	       All messages.

     `	       All messages that were included in the Message list arguments
	       of the previous command;	needs to be quoted.  (A	convenient way
	       to read all new messages	is to select them via `from :n', as
	       below, and then to read them in order with the default command
	       -- next -- simply by successively typing	``'; for this to work
	       showlast	must be	set.)

     x-y       An inclusive range of message numbers.  Selectors that may also
	       be used as endpoints include any	of .;-+^$.

     address   A case-insensitive "any substring matches" search against the
	       `From:' header, which will match	addresses (too)	even if
	       showname	is set (and POSIX says "any address as shown in	a
	       header summary shall be matchable in this form"); However, if
	       the allnet variable is set, only	the local part of the address
	       is evaluated for	the comparison,	not ignoring case, and the
	       setting of showname is completely ignored.  For finer control
	       and match boundaries use	the `@'	search expression.

     /string   All messages that contain string	in the subject field (case ig-
	       nored according to locale).  See	also the searchheaders vari-
	       able.  If string	is empty, the string from the previous speci-
	       fication	of that	type is	used again.

     [@name-list]@expr
	       All messages that contain the given case-insensitive search
	       expression;  If the [Option]al regular expression support is
	       available expr will be interpreted as (an extended) one if any
	       of the magic regular expression characters is seen.  If the op-
	       tional @name-list part is missing the search is restricted to
	       the subject field body, but otherwise name-list specifies a
	       comma-separated list of header fields to	search,	for example

		     '@to,from,cc@Someone i ought to know'

	       In order	to search for a	string that includes a `@' (commercial
	       at) character the name-list is effectively non-optional,	but
	       may be given as the empty string.  Also,	specifying an empty
	       search expression will effectively test for existence of	the
	       given header fields.  Some special header fields	may be abbre-
	       viated: `f', `t', `c', `b' and `s' will match `From', `To',
	       `Cc', `Bcc' and `Subject', respectively and case-insensitively.
	       [Option]ally, and just like expr, name-list will	be interpreted
	       as (an extended)	regular	expression if any of the magic regular
	       expression characters is	seen.

	       The special names `header' or `<' can be	used to	search in (all
	       of) the header(s) of the	message, and the special names `body'
	       or `>' and `text' or `='	will perform full text searches	-
	       whereas the former searches only	the body, the latter also
	       searches	the message header ([v15 behaviour may differ] this
	       mode yet	brute force searches over the entire decoded content
	       of messages, including administrativa strings).

	       This specification performs full	text comparison, but even with
	       regular expression support it is	almost impossible to write a
	       search expression that safely matches only a specific address
	       domain.	To request that	the body content of the	header is
	       treated as a list of addresses, and to strip those down to the
	       plain email address which the search expression is to be
	       matched against,	prefix the effective name-list with a tilde
	       `~':

		     '@~f,c@@a\.safe\.domain\.match$'

     :c	       All messages of state or	with matching condition	`c', where `c'
	       is one or multiple of the following colon modifiers:

	       a	 answered messages (cf.	the variable markanswered).
	       d	 `deleted' messages (for the undelete and from com-
			 mands only).
	       f	 flagged messages.
	       L	 Messages with receivers that match mlsubscribed ad-
			 dresses.
	       l	 Messages with receivers that match mlisted addresses.
	       n	 `new' messages.
	       o	 Old messages (any not in state	`read' or `new').
	       r	 `read'	messages.
	       S	 [Option] Messages with	unsure spam classification
			 (see Handling spam).
	       s	 [Option] Messages classified as spam.
	       t	 Messages marked as draft.
	       u	 `unread' messages.

     [Option] IMAP-style SEARCH	expressions may	also be	used.  These consist
     of	keywords and criterions, and because Message list arguments are	split
     into tokens according to Shell-style argument quoting it is necessary to
     quote the entire IMAP search expression in	order to ensure	that it	re-
     mains a single token.  This addressing mode is available with all types
     of	mailbox	folders; S-nail	will perform the search	locally	as necessary.
     Strings must be enclosed by double	quotation marks	`"' in their entirety
     if	they contain whitespace	or parentheses;	within the quotes, only	re-
     verse solidus `\' is recognized as	an escape character.  All string
     searches are case-insensitive.  When the description indicates that the
     "envelope"	representation of an address field is used, this means that
     the search	string is checked against both a list constructed as

	   '("name" "source" "local-part" "domain-part")'

     for each address, and the addresses without real names from the respec-
     tive header field.	 These search expressions can be nested	using paren-
     theses, see below for examples.

     (criterion)
	       All messages that satisfy the given criterion.
     (criterion1 criterion2 ...	criterionN)
	       All messages that satisfy all of	the given criteria.
     (or criterion1 criterion2)
	       All messages that satisfy either	criterion1 or criterion2, or
	       both.  To connect more than two criteria	using `or' specifica-
	       tions have to be	nested using additional	parentheses, as	with
	       `(or a (or b c))', since	`(or a b c)' really means `((a or b)
	       and c)'.	 For a simple `or' operation of	independent criteria
	       on the lowest nesting level, it is possible to achieve similar
	       effects by using	three separate criteria, as with `(a) (b)
	       (c)'.
     (not criterion)
	       All messages that do not	satisfy	criterion.
     (bcc "string")
	       All messages that contain string	in the envelope	representation
	       of the `Bcc:' field.
     (cc "string")
	       All messages that contain string	in the envelope	representation
	       of the `Cc:' field.
     (from "string")
	       All messages that contain string	in the envelope	representation
	       of the `From:' field.
     (subject "string")
	       All messages that contain string	in the `Subject:' field.
     (to "string")
	       All messages that contain string	in the envelope	representation
	       of the `To:' field.
     (header name "string")
	       All messages that contain string	in the specified `Name:'
	       field.
     (body "string")
	       All messages that contain string	in their body.
     (text "string")
	       All messages that contain string	in their header	or body.
     (larger size)
	       All messages that are larger than size (in bytes).
     (smaller size)
	       All messages that are smaller than size (in bytes).
     (before date)
	       All messages that were received before date, which must be in
	       the form	`d[d]-mon-yyyy', where `d' denotes the day of the
	       month as	one or two digits, `mon' is the	name of	the month -
	       one of `Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec', and
	       `yyyy' is the year as four digits, for example `28-Dec-2012'.
     (on date)
	       All messages that were received on the specified	date.
     (since date)
	       All messages that were received since the specified date.
     (sentbefore date)
	       All messages that were sent on the specified date.
     (senton date)
	       All messages that were sent on the specified date.
     (sentsince	date)
	       All messages that were sent since the specified date.
     ()	       The same	criterion as for the previous search.  This specifica-
	       tion cannot be used as part of another criterion.  If the pre-
	       vious command line contained more than one independent crite-
	       rion then the last of those criteria is used.

   On terminal control and line	editor
     [Option] Terminal control through one of the standard UNIX	libraries,
     Termcap Access Library (libtermcap, -ltermcap) or Terminal	Information
     Library (libterminfo, -lterminfo),	may be available.  For the TERMinal
     defined in	the environment	interactive usage aspects, for example
     Coloured display, and insight of cursor and function keys for the Mailx-
     Line-Editor (MLE),	will be	enhanced or enabled.  Library interaction can
     be	disabled on a per-invocation basis via termcap-disable,	whereas	the
     internal variable termcap is always used as a preferred source of termi-
     nal capabilities.	(For a usage example see the FAQ entry Not
     "defunctional", but the editor key	does not work.)

     [Option] The built-in Mailx-Line-Editor (MLE) should work in all environ-
     ments which comply	to the ISO C standard ISO/IEC 9899/AMD1:1995
     ("ISO C90,	Amendment 1"), and will	support	wide glyphs if possible	(the
     necessary functionality had been removed from ISO C, but was included in
     X/Open Portability	Guide Issue 4 ("XPG4")).  Usage	of a line editor in
     interactive mode can be prevented by setting line-editor-disable.	Espe-
     cially if the [Option]al terminal control support is missing setting en-
     tries in termcap will help	shall the MLE misbehave, see there for more.
     The MLE can support a little bit of colour.

     [Option] If the history feature is	available then input from line editor
     prompts will be saved in a	history	list that can be searched in and be
     expanded from.  Such saving can be	prevented by prefixing input with any
     amount of whitespace.  Aspects of history,	like allowed content and maxi-
     mum size, as well as whether history shall	be saved persistently, can be
     configured	with the internal variables history-file, history-gabby,
     history-gabby-persist and history-size.  There also exists	the macro hook
     on-history-addition which can be used to apply finer control on what en-
     ters history.

     The MLE supports a	set of editing and control commands.  By default (as)
     many (as possible)	of these will be assigned to a set of single-letter
     control codes, which should work on any terminal (and can be generated by
     holding the "control" key while pressing the key of desire, for example
     `control-D').  If the [Option]al bind command is available	then the MLE
     commands can also be accessed freely by assigning the command name, which
     is	shown in parenthesis in	the list below,	to any desired key-sequence,
     and the MLE will instead and also use bind	to establish its built-in key
     bindings (more of them if the [Option]al terminal control is available),
     an	action which can then be suppressed completely by setting
     line-editor-no-defaults.  Shell-style argument quoting notation is	used
     in	the following:

     `\cA'     Go to the start of the line (mle-go-home).
     `\cB'     Move the	cursor backward	one character (mle-go-bwd).
     `\cC'     raise(3)	`SIGINT' (mle-raise-int).
     `\cD'     Forward delete the character under the cursor; quits S-nail if
	       used on the empty line unless the internal variable ignoreeof
	       is set (mle-del-fwd).
     `\cE'     Go to the end of	the line (mle-go-end).
     `\cF'     Move the	cursor forward one character (mle-go-fwd).
     `\cG'     Cancel current operation, full reset.  If there is an active
	       history search or tabulator expansion then this command will
	       first reset that, reverting to the former line content; thus a
	       second reset is needed for a full reset in this case
	       (mle-reset).
     `\cH'     Backspace: backward delete one character	(mle-del-bwd).
     `\cI'     [Only new quoting rules]	Horizontal tabulator: try to expand
	       the word	before the cursor, supporting the usual	Filename
	       transformations (mle-complete; this is affected by
	       mle-quote-rndtrip and line-editor-cpl-word-breaks).
     `\cJ'     Newline:	commit the current line	(mle-commit).
     `\cK'     Cut all characters from the cursor to the end of	the line
	       (mle-snarf-end).
     `\cL'     Repaint the line	(mle-repaint).
     `\cN'     [Option]	Go to the next history entry (mle-hist-fwd).
     `\cO'     ([Option]ally context-dependent)	Invokes	the command dt.
     `\cP'     [Option]	Go to the previous history entry (mle-hist-bwd).
     `\cQ'     Toggle roundtrip	mode shell quotes, where produced, on and off
	       (mle-quote-rndtrip).  This setting is temporary,	and will be
	       forgotten once the command line is committed; also see shcodec.
     `\cR'     [Option]	Complete the current line from (the remaining) older
	       history entries (mle-hist-srch-bwd).
     `\cS'     [Option]	Complete the current line from (the remaining) newer
	       history entries (mle-hist-srch-fwd).
     `\cT'     Paste the snarf buffer (mle-paste).
     `\cU'     The same	as `\cA' followed by `\cK' (mle-snarf-line).
     `\cV'     Prompts for a Unicode character (hexadecimal number without
	       prefix, see vexpr) to be	inserted (mle-prompt-char).  Note this
	       command needs to	be assigned to a single-letter control code in
	       order to	become recognized and executed during input of a key-
	       sequence	(only three single-letter control codes	can be used
	       for that	shortcut purpose); this	control	code is	then special-
	       treated and thus	cannot be part of any other sequence (because
	       it will trigger the mle-prompt-char function immediately).
     `\cW'     Cut the characters from the one preceding the cursor to the
	       preceding word boundary (mle-snarf-word-bwd).
     `\cX'     Move the	cursor forward one word	boundary (mle-go-word-fwd).
     `\cY'     Move the	cursor backward	one word boundary (mle-go-word-bwd).
     `\cZ'     raise(3)	`SIGTSTP' (mle-raise-tstp).
     `\c['     Escape: reset a possibly	used multibyte character input state
	       machine and [Option]ally	a lingering, incomplete	key binding
	       (mle-cancel).  This command needs to be assigned	to a single-
	       letter control code in order to become recognized and executed
	       during input of a key-sequence (only three single-letter	con-
	       trol codes can be used for that shortcut	purpose).  This	con-
	       trol code may also be part of a multi-byte sequence, but	if a
	       sequence	is active and the very control code is currently also
	       an expected input, then the active sequence takes precedence
	       and will	consume	the control code.
     `\c\'     ([Option]ally context-dependent)	Invokes	the command `z+'.
     `\c]'     ([Option]ally context-dependent)	Invokes	the command `z$'.
     `\c^'     ([Option]ally context-dependent)	Invokes	the command `z0'.
     `\c_'     Cut the characters from the one after the cursor	to the suc-
	       ceeding word boundary (mle-snarf-word-fwd).
     `\c?'     Backspace: mle-del-bwd.
     -	       mle-bell: ring the audible bell.
     -	       [Option]	mle-clear-screen: move the cursor home and clear the
	       screen.
     -	       mle-fullreset: different	to mle-reset this will immediately re-
	       set a possibly active search etc.
     -	       mle-go-screen-bwd: move the cursor backward one screen width.
     -	       mle-go-screen-fwd: move the cursor forward one screen width.
     -	       mle-raise-quit: raise(3)	`SIGQUIT'.

   Coloured display
     [Option] Colours and font attributes through ANSI a.k.a. ISO 6429 SGR
     (select graphic rendition)	escape sequences are optionally	supported.
     Usage of colours and font attributes solely depends upon the capability
     of	the detected terminal type (TERM), and as fine-tuned through termcap.
     Colours and font attributes can be	managed	with the multiplexer command
     colour, and uncolour removes the given mappings.  Setting colour-disable
     suppresses	usage of colour	and font attribute sequences, while leaving
     established mappings unchanged.

     Whether actually applicable colour	and font attribute sequences should
     also be generated when output is going to be paged	through	the external
     PAGER (also see crt) depends upon the setting of colour-pager, because
     pagers usually need to be configured in order to support ISO escape se-
     quences.  Knowledge of some widely	used pagers is however built-in, and
     in	a clean	environment it is often	enough to simply set colour-pager;
     please refer to that variable for more on this topic.

     It	might make sense to conditionalize colour setup	on interactive mode
     via if (`terminal'	indeed means "interactive"):

	   if terminal && "$features" =% +colour
	     colour iso	view-msginfo ft=bold,fg=green
	     colour iso	view-header ft=bold,fg=red (from|subject) # regex
	     colour iso	view-header fg=red

	     uncolour iso view-header from,subject
	     colour iso	view-header ft=bold,fg=magenta,bg=cyan
	     colour 256	view-header ft=bold,fg=208,bg=230 "subject,from"
	     colour mono view-header ft=bold
	     colour mono view-header ft=bold,ft=reverse	subject,from
	   endif

   Handling spam
     [Option] S-nail can make use of several spam interfaces for the purpose
     of	identification of, and,	in general, dealing with spam messages.	 A
     precondition of most commands in order to function	is that	the
     spam-interface variable is	set to one of the supported interfaces.
     Specifying	messages that have been	identified as spam is possible via
     their (volatile) `is-spam'	state by using the `:s'	and `:S' specifica-
     tions, and	their attrlist entries will be used when displaying the
     headline in the summary of	headers.

     +o	 spamrate rates	the given messages and sets their `is-spam' flag ac-
	 cordingly.  If	the spam interface offers spam scores these can	be
	 shown in headline by using the	format `%$'.

     +o	 spamham, spamspam and spamforget will interact	with the Bayesian fil-
	 ter of	the chosen interface and learn the given messages as "ham" or
	 "spam", respectively; the last	command	can be used to cause
	 "unlearning" of messages; it adheres to their current `is-spam' state
	 and thus reverts previous teachings.

     +o	 spamclear and spamset will simply set and clear, respectively,	the
	 mentioned volatile `is-spam' message flag, without any	interface in-
	 teraction.

     The spamassassin(1) based spam-interface `spamc' requires a running in-
     stance of the spamd(1) server in order to function, started with the op-
     tion --allow-tell shall Bayesian filter learning be possible.

	   $ spamd -i localhost:2142 -i	/tmp/.spamsock -d [-L] [-l]
	   $ spamd --listen=localhost:2142 --listen=/tmp/.spamsock \
	       --daemonize [--local] [--allow-tell]

     Thereafter	S-nail can make	use of these interfaces:

	   $ s-nail -Sspam-interface=spamc -Sspam-maxsize=500000 \
	       -Sspamc-command=/usr/local/bin/spamc \
	       -Sspamc-arguments="-U /tmp/.spamsock" -Sspamc-user=
	   or
	   $ s-nail -Sspam-interface=spamc -Sspam-maxsize=500000 \
	       -Sspamc-command=/usr/local/bin/spamc \
	       -Sspamc-arguments="-d localhost -p 2142"	-Sspamc-user=

     Using the generic filter approach allows usage of programs	like
     bogofilter(1).  Here is an	example, requiring it to be accessible via
     PATH:

	   $ s-nail -Sspam-interface=filter -Sspam-maxsize=500000 \
	       -Sspamfilter-ham="bogofilter -n"	\
	       -Sspamfilter-noham="bogofilter -N" \
	       -Sspamfilter-nospam="bogofilter -S" \
	       -Sspamfilter-rate="bogofilter -TTu 2>/dev/null" \
	       -Sspamfilter-spam="bogofilter -s" \
	       -Sspamfilter-rate-scanscore="1;^(.+)$"

     Because messages must exist on local storage in order to be scored	(or
     used for Bayesian filter training), it is possibly	a good idea to perform
     the local spam check last.	 Spam can be checked automatically when	open-
     ing specific folders by setting a specialized form	of the internal	vari-
     able folder-hook.

	   define spamdelhook {
	     # Server side DCC
	     spamset (header x-dcc-brand-metrics "bulk")
	     # Server-side spamassassin(1)
	     spamset (header x-spam-flag "YES")
	     del :s # TODO we HAVE to be able to do `spamrate :u ! :sS'
	     move :S +maybe-spam
	     spamrate :u
	     del :s
	     move :S +maybe-spam
	   }
	   set folder-hook-SOMEFOLDER=spamdelhook

     See also the documentation	for the	variables spam-interface,
     spam-maxsize, spamc-command, spamc-arguments, spamc-user, spamfilter-ham,
     spamfilter-noham, spamfilter-nospam, spamfilter-rate and
     spamfilter-rate-scanscore.

COMMANDS
     S-nail reads input	in lines.  An unquoted reverse solidus `\' at the end
     of	a command line "escapes" the newline character:	it is discarded	and
     the next line of input is used as a follow-up line, with all leading
     whitespace	removed; once an entire	line is	completed, the whitespace
     characters	space, tabulator, newline as well as those defined by the
     variable ifs are removed from the beginning and end.  Placing any white-
     space characters at the beginning of a line will prevent a	possible addi-
     tion of the command line to the [Option]al	history.

     The beginning of such input lines is then scanned for the name of a known
     command: command names may	be abbreviated,	in which case the first	com-
     mand that matches the given prefix	will be	used.  Command modifiers may
     prefix a command in order to modify its behaviour.	 A name	may also be a
     commandalias, which will become expanded until no more expansion is pos-
     sible.  Once the command that shall be executed is	known, the remains of
     the input line will be interpreted	according to command-specific rules,
     documented	in the following.

     This behaviour is different to the	sh(1)ell, which	is a programming lan-
     guage with	syntactic elements of clearly defined semantics, and therefore
     capable to	sequentially expand and	evaluate individual elements of	a
     line.  S-nail will	never be able to handle	`? set one=value two=$one' in
     a single statement, because the variable assignment is performed by the
     command (set), not	the language.

     A list of all commands in lookup order is dumped by the command list.
     [Option]ally the command help (or ?), when	given an argument, will	show a
     documentation string for the command matching the expanded	argument, as
     in	`?t', which should be a	shorthand of `?type'; with these documentation
     strings both commands support a more verbose listing mode which includes
     the argument type of the command and other	information which applies; a
     handy suggestion might thus be:

	   ? define __xv {
	     # Before v15: need	to enable sh(1)ell-style on _entire_ line!
	     localopts yes;wysh	set verbose;ignerr eval	"${@}";return ${?}
	   }
	   ? commandalias xv '\call __xv'
	   ? xv	help set

   Command modifiers
     Commands may be prefixed by none to multiple command modifiers.  Some
     command modifiers can be used with	a restricted set of commands only, the
     verbose version of	list will ([Option]ally) show which modifiers apply.

     +o	 The modifier reverse solidus \, to be placed first, prevents
	 commandalias expansions on the	remains	of the line, for example
	 `\echo' will always evaluate the command echo,	even if	an (com-
	 mand)alias of the same	name exists.  commandalias content may itself
	 contain further command modifiers, including an initial reverse
	 solidus to prevent further expansions.

     +o	 The modifier ignerr indicates that any	error generated	by the follow-
	 ing command should be ignored by the state machine and	not cause a
	 program exit with enabled errexit or for the standardized exit	cases
	 in posix mode.	 ?, one	of the INTERNAL	VARIABLES, will	be set to the
	 real exit status of the command regardless.

     +o	 local will alter the called command to	apply changes only temporar-
	 ily, local to block-scope, and	can thus only be used inside of	a
	 defined macro or an account definition.  Specifying it	implies	the
	 modifier wysh.	 Block-scope settings will not be inherited by macros
	 deeper	in the call chain, and will be garbage collected once the cur-
	 rent block is left.  To record	and unroll changes in the global scope
	 use the command localopts.

     +o	 scope does yet	not implement any functionality.

     +o	 u does	yet not	implement any functionality.

     +o	 Some commands support the vput	modifier: if used, they	expect the
	 name of a variable, which can itself be a variable, i.e., shell ex-
	 pansion is applied, as	their first argument, and will place their
	 computation result in it instead of the default location (it is usu-
	 ally written to standard output).

	 The given name	will be	tested for being a valid sh(1) variable	name,
	 and may therefore only	consist	of upper- and lowercase	characters,
	 digits, and the underscore; the hyphen-minus may be used as a non-
	 portable extension; digits may	not be used as first, hyphen-minus may
	 not be	used as	last characters.  In addition the name may either not
	 be one	of the known INTERNAL VARIABLES, or must otherwise refer to a
	 writable (non-boolean)	value variable.	 The actual put	operation may
	 fail nonetheless, for example if the variable expects a number	argu-
	 ment only a number will be accepted.  Any error during	these opera-
	 tions causes the command as such to fail, and the error number	! will
	 be set	to ^ERR-NOTSUP,	the exit status	? should be set	to `-1', but
	 some commands deviate from the	latter,	which is documented.

     +o	 Last, but not least, the modifier wysh	can be used for	some old and
	 established commands to choose	the new	Shell-style argument quoting
	 rules over the	traditional Old-style argument quoting.	 This modifier
	 is implied if v15-compat is set to a non-empty	value.

   Old-style argument quoting
     [v15 behaviour may	differ]	This section documents the traditional and
     POSIX standardized	style of quoting non-message list arguments to com-
     mands which expect	this type of arguments:	whereas	still used by the ma-
     jority of such commands, the new Shell-style argument quoting may be
     available even for	those via wysh,	one of the Command modifiers.  None-
     theless care must be taken, because only new commands have	been designed
     with all the capabilities of the new quoting rules	in mind, which can,
     for example generate control characters.

	   +o   An argument can be enclosed between paired double-quotes
	       `"argument"' or single-quotes `'argument''; any whitespace,
	       shell word expansion, or	reverse	solidus	characters (except as
	       described next) within the quotes are treated literally as part
	       of the argument.	 A double-quote	will be	treated	literally
	       within single-quotes and	vice versa.  Inside such a quoted
	       string the actually used	quote character	can be used nonethe-
	       less by escaping	it with	a reverse solidus `\', as in
	       `"y\"ou"'.

	   +o   An argument that	is not enclosed	in quotes, as above, can usu-
	       ally still contain space	characters if those spaces are reverse
	       solidus escaped,	as in `you\ are'.

	   +o   A reverse solidus outside of the	enclosing quotes is discarded
	       and the following character is treated literally	as part	of the
	       argument.

   Shell-style argument	quoting
     sh(1)ell-style, and therefore POSIX standardized, argument	parsing	and
     quoting rules are used by most commands.  [v15 behaviour may differ] Most
     new commands only support these new rules and are flagged [Only new quot-
     ing rules], some elder ones can use them with the command modifier	wysh;
     in	the future only	this type of argument quoting will remain.

     A command line is parsed from left	to right and an	input token is com-
     pleted whenever an	unquoted, otherwise ignored, metacharacter is seen.
     Metacharacters are	vertical bar |,	ampersand &, semicolon ;, as well as
     all characters from the variable ifs, and / or space, tabulator, newline.
     The additional metacharacters left	and right parenthesis (, ) and less-
     than and greater-than signs <, > that the sh(1) supports are not used,
     and are treated as	ordinary characters: for one these characters are a
     vivid part	of email addresses, and	it seems highly	unlikely that their
     function will become meaningful to	S-nail.

	   Compatibility  note:	 [v15  behaviour  may differ] Please note that
	   even	many new-style commands	do not yet honour ifs to  parse	 their
	   arguments:  whereas	the sh(1)ell is	a language with	syntactic ele-
	   ments of clearly defined  semantics,	 S-nail	 parses	 entire	 input
	   lines and decides on	a per-command base what	to do with the rest of
	   the line.  This also	means that whenever an unknown command is seen
	   all that S-nail can do is cancellation of the processing of the re-
	   mains of the	line.

	   It also often depends on an actual subcommand of a multiplexer com-
	   mand	 how  the rest of the line should be treated, and until	v15 we
	   are not capable to  perform	this  deep  inspection	of  arguments.
	   Nonetheless,	 at least the following	commands which work with posi-
	   tional parameters fully support ifs for an almost  shell-compatible
	   field splitting: call, call_if, read, vpospar, xcall.

     Any unquoted number sign `#' at the beginning of a	new token starts a
     comment that extends to the end of	the line, and therefore	ends argument
     processing.  An unquoted dollar sign `$' will cause variable expansion of
     the given name, which must	be a valid sh(1)ell-style variable name	(see
     vput): INTERNAL VARIABLES as well as ENVIRONMENT (shell) variables	can be
     accessed through this mechanism, brace enclosing the name is supported
     (i.e., to subdivide a token).

     Whereas the metacharacters	space, tabulator, newline only complete	an in-
     put token,	vertical bar |,	ampersand & and	semicolon ; also act as	con-
     trol operators and	perform	control	functions.  For	now supported is semi-
     colon ;, which terminates a single	command, therefore sequencing the com-
     mand line and making the remainder	of the line a subject to reevaluation.
     With sequencing, multiple command argument	types and quoting rules	may
     therefore apply to	a single line, which can become	problematic before
     v15: e.g.,	the first of the following will	cause surprising results.

	   ? echo one; set verbose; echo verbose=$verbose.
	   ? echo one; wysh set	verbose; echo verbose=$verbose.

     Quoting is	a mechanism that will remove the special meaning of metachar-
     acters and	reserved words,	and will prevent expansion.  There are four
     quoting mechanisms: the escape character, single-quotes, double-quotes
     and dollar-single-quotes:

	   +o   The literal value of any	character can be preserved by preced-
	       ing it with the escape character	reverse	solidus	`\'.

	   +o   Arguments which are enclosed in `'single-quotes'' retain	their
	       literal value.  A single-quote cannot occur within single-
	       quotes.

	   +o   The literal value of all	characters enclosed in `"double-
	       quotes"'	is retained, with the exception	of dollar sign `$',
	       which will cause	variable expansion, as above, backquote	(grave
	       accent) ``', (which not yet means anything special), reverse
	       solidus `\', which will escape any of the characters dollar
	       sign `$'	(to prevent variable expansion), backquote (grave ac-
	       cent) ``', double-quote `"' (to prevent ending the quote) and
	       reverse solidus `\' (to prevent escaping, i.e., to embed	a re-
	       verse solidus character as-is), but has no special meaning oth-
	       erwise.

	   +o   Arguments enclosed in `$'dollar-single-quotes'' extend normal
	       single quotes in	that reverse solidus escape sequences are ex-
	       panded as follows:

	       `\a'    bell control character (ASCII and ISO-10646 BEL).
	       `\b'    backspace control character (ASCII and ISO-10646	BS).
	       `\E'    escape control character	(ASCII and ISO-10646 ESC).
	       `\e'    the same.
	       `\f'    form feed control character (ASCII and ISO-10646	FF).
	       `\n'    line feed control character (ASCII and ISO-10646	LF).
	       `\r'    carriage	return control character (ASCII	and ISO-10646
		       CR).
	       `\t'    horizontal tabulator control character (ASCII and
		       ISO-10646 HT).
	       `\v'    vertical	tabulator control character (ASCII and
		       ISO-10646 VT).
	       `\\'    emits a reverse solidus character.
	       `\''    single quote.
	       `\"'    double quote (escaping is optional).
	       `\NNN'  eight-bit byte with the octal value `NNN' (one to three
		       octal digits), optionally prefixed by an	additional
		       `0'.  A 0 byte will suppress further output for the
		       quoted argument.
	       `\xHH'  eight-bit byte with the hexadecimal value `HH' (one or
		       two hexadecimal characters, no prefix, see vexpr).  A 0
		       byte will suppress further output for the quoted	argu-
		       ment.
	       `\UHHHHHHHH'
		       the Unicode / ISO-10646 character with the hexadecimal
		       codepoint value `HHHHHHHH' (one to eight	hexadecimal
		       characters) -- note that	Unicode	defines	the maximum
		       codepoint ever to be supported as `0x10FFFF' (in	planes
		       of `0xFFFF' characters each).  This escape is only sup-
		       ported in locales that support Unicode (see Character
		       sets), in other cases the sequence will remain unex-
		       panded unless the given code point is ASCII compatible
		       or (if the [Option]al character set conversion is
		       available) can be represented in	the current locale.
		       The character NUL will suppress further output for the
		       quoted argument.
	       `\uHHHH'
		       Identical to `\UHHHHHHHH' except	it takes only one to
		       four hexadecimal	characters.
	       `\cX'   Emits the non-printable (ASCII and compatible) C0 con-
		       trol codes 0 (NUL) to 31	(US), and 127 (DEL).  Print-
		       able representations of ASCII control codes can be cre-
		       ated by mapping them to a different, visible part of
		       the ASCII character set.	 Adding	the number 64 achieves
		       this for	the codes 0 to 31, here	7 (BEL): `7 + 64 = 71
		       = G'.  The real operation is a bitwise logical XOR with
		       64 (bit 7 set, see vexpr), thus also covering code 127
		       (DEL), which is mapped to 63 (question mark):
		       `? vexpr	^ 127 64'.

		       Whereas historically circumflex notation	has often been
		       used for	visualization purposes of control codes, as in
		       `^G', the reverse solidus notation has been standard-
		       ized: `\cG'.  Some control codes	also have standardized
		       (ISO-10646, ISO C) aliases, as shown above (`\a', `\n',
		       `\t' etc) : whenever such an alias exists it will be
		       used for	display	purposes.  The control code NUL
		       (`\c@', a non-standard extension) will suppress further
		       output for the remains of the token (which may extend
		       beyond the current quote), or, depending	on the con-
		       text, the remains of all	arguments for the current com-
		       mand.
	       `\$NAME'
		       Non-standard extension: expand the given	variable name,
		       as above.  Brace	enclosing the name is supported.
	       `\`{command}'
		       Not yet supported, just to raise	awareness: Non-stan-
		       dard extension.

     Caveats:

	   ? echo 'Quotes '${HOME}' and	'tokens" differ!"# no comment
	   ? echo Quotes ${HOME} and tokens differ! # comment
	   ? echo Don"'"t you worry$'\x21' The sun shines on us. $'\u263A'

   Message list	arguments
     Many commands operate on message list specifications, as documented in
     Specifying	messages.  The argument	input is first split into individual
     tokens via	Shell-style argument quoting, which are	then interpreted as
     the mentioned specifications.  If no explicit message list	has been spec-
     ified, many commands will search for and use the next message forward
     that satisfies the	commands' requirements,	and if there are no messages
     forward of	the current message, the search	proceeds backwards; if there
     are no good messages at all to be found, an error message is shown	and
     the command is aborted.  The verbose output of the	command	list will in-
     dicate whether a command searches for a default message, or not.

   Raw data arguments for codec	commands
     A special set of commands,	which all have the string "codec" in their
     name, like	addrcodec, shcodec, urlcodec, take raw string data as input,
     which means that the content of the command input line is passed com-
     pletely unexpanded	and otherwise unchanged: like this the effect of the
     actual codec is visible without any noise of possible shell quoting rules
     etc., i.e., the user can input one-to-one the desired or questionable
     data.  To gain a level of expansion, the entire command line can be
     evaluated first, for example

	   ? vput shcodec res encode /usr/Schones Wetter/heute.txt
	   ? echo $res
	   $'/usr/Sch\u00F6nes Wetter/heute.txt'
	   ? shcodec d $res
	   $'/usr/Sch\u00F6nes Wetter/heute.txt'
	   ? eval shcodec d $res
	   /usr/Schones	Wetter/heute.txt

   Filename transformations
     Filenames,	where expected,	and unless documented otherwise, are subse-
     quently subject to	the following filename transformations,	in sequence:

	   +o   If the given name is a registered shortcut, it will be replaced
	       with the	expanded shortcut.  This step is mostly	taken for
	       folders only.

	   +o   The filename is matched against the following patterns or
	       strings.	 But for plus +file folder expansion this step is
	       mostly taken for	folders	only.

	       #      (Number sign) is expanded	to the previous	file.
	       %      (Percent sign) is	replaced by the	invoking user's	pri-
		      mary system mailbox, which either	is the (itself expand-
		      able) inbox if that is set, the standardized absolute
		      pathname indicated by MAIL if that is set, or a built-in
		      compile-time default otherwise.  When opening a folder
		      the used name is actively	checked	for being a primary
		      mailbox, first against inbox, then against MAIL.
	       %user  Expands to the primary system mailbox of user (and never
		      the value	of inbox, regardless of	its actual setting).
	       _      (Ampersand) is replaced with the invoking	user's sec-
		      ondary mailbox, the MBOX.
	       +file  Refers to	a file in the folder directory (if that	vari-
		      able is set).
	       %:filespec Expands to the same value as filespec, but has spe-
		      cial meaning when	used with, for example,	the command
		      folder: the file will be treated as a primary system
		      mailbox by, among	others,	the mbox and save commands,
		      meaning that messages that have been read	in the current
		      session will be moved to the MBOX	mailbox	instead	of
		      simply being flagged as read.

	   +o   Meta expansions may be applied to the resulting filename, as
	       allowed by the operation	and applicable to the resulting	access
	       protocol	(also see On URL syntax	and credential lookup).	 For
	       the file-protocol, a leading tilde `~' character	will be	re-
	       placed by the expansion of HOME,	except when followed by	a
	       valid user name,	in which case the home directory of the	given
	       user is used instead.

	       A shell expansion as if specified in double-quotes (see
	       Shell-style argument quoting) may be applied, so	that any oc-
	       currence	of `$VARIABLE' (or `${VARIABLE}') will be replaced by
	       the expansion of	the variable, if possible; INTERNAL VARIABLES
	       as well as ENVIRONMENT (shell) variables	can be accessed
	       through this mechanism.

	       Shell pathname wildcard pattern expansions (glob(7)) may	be ap-
	       plied as	documented.  If	the fully expanded filename results in
	       multiple	pathnames and the command is expecting only one	file,
	       an error	results.

	       In interactive context, in order	to allow simple	value accep-
	       tance (via "ENTER"), arguments will usually be displayed	in a
	       properly	quoted form, so	a file `diet\ is \curd.txt' may	be
	       displayed as `'diet\ is \curd.txt''.

   Commands
     The following commands are	available:

     !	       Executes	the SHELL command which	follows, replacing unescaped
	       exclamation marks with the previously executed command if the
	       internal	variable bang is set.  This command supports vput as
	       documented in Command modifiers,	and manages the	error number
	       !.  A 0 or positive exit	status ? reflects the exit status of
	       the command, negative ones that an error	happened before	the
	       command was executed, or	that the program did not exit cleanly,
	       but maybe due to	a signal: the error number is ^ERR-CHILD,
	       then.

	       In conjunction with the vput modifier the following special
	       cases exist: a negative exit status occurs if the collected
	       data could not be stored	in the given variable, which is	a
	       ^ERR-NOTSUP error that should otherwise not occur.
	       ^ERR-CANCELED indicates that no temporary file could be created
	       to collect the command output at	first glance.  In case of
	       catchable out-of-memory situations ^ERR-NOMEM will occur	and
	       S-nail will try to store	the empty string, just like with all
	       other detected error conditions.

     #	       The comment-command causes the entire line to be	ignored.
	       Note: this really is a normal command which' purpose is to dis-
	       card its	arguments, not a "comment-start" indicating special
	       character, which	means that for example trailing	comments on a
	       line are	not possible (except for commands which	use
	       Shell-style argument quoting).

     +	       Goes to the next	message	in sequence and	types it (like
	       "ENTER").

     -	       Display the preceding message, or the n'th previous message if
	       given a numeric argument	n.

     =	       Shows the message number	of the current message (the "dot")
	       when used without arguments, that of the	given list otherwise.
	       Output numbers will be separated	from each other	with the first
	       character of ifs, and followed by the first character of	if-ws,
	       if that is not empty and	not identical to the first.  If	that
	       results in no separation	at all a space character is used.
	       This command supports vput (see Command modifiers), and manages
	       the error number	!.

     ?	       [Option]	Show a brief summary of	commands.  [Option] Given an
	       argument	a synopsis for the command in question is shown	in-
	       stead; commands can be abbreviated in general and this command
	       can be used to see the full expansion of	an abbreviation	in-
	       cluding the synopsis, try, for example `?h', `?hel' and `?help'
	       and see how the output changes.	To avoid that aliases are re-
	       solved the modifier \ can be prepended to the argument, but
	       note it must be quoted.	This mode also supports	a more verbose
	       output, which will provide the information documented for list.

     |	       A synonym for the pipe command.

     account, unaccount
	       (ac, una) Creates, selects or lists (an)	account(s).  Accounts
	       are special incarnations	of defined macros and group commands
	       and variable settings which together usually arrange the	envi-
	       ronment for the purpose of creating an email account.  Differ-
	       ent to normal macros settings which are covered by localopts -
	       here by default enabled!	- will not be reverted before the
	       account is changed again.  The special account `null' (case-in-
	       sensitive) always exists, and all but it	can be deleted by the
	       latter command, and in one operation with the special name `*'.
	       Also for	all but	it a possibly set on-account-cleanup hook is
	       called once they	are left, including program exit.

	       Without arguments a listing of all defined accounts is shown.
	       With one	argument the given account is activated: the system
	       inbox of	that account will be activated (as via folder),	a pos-
	       sibly installed folder-hook will	be run,	and the	internal vari-
	       able account will be updated.  The two argument form is identi-
	       cal to defining a macro as via define:

		     account myisp {
		       set folder=~/mail inbox=+syste.mbox record=+sent.mbox
		       set from='(My Name) myname@myisp.example'
		       set mta=smtp://mylogin@smtp.myisp.example
		     }

     addrcodec
	       Perform email address codec transformations on raw-data argu-
	       ment, rather according to email standards (RFC 5322; [v15 be-
	       haviour may differ] will	furtherly improve).  Supports vput
	       (see Command modifiers),	and manages the	error number !.	 The
	       first argument must be either [+[+[+]]]e[ncode],	d[ecode],
	       s[kin] or skinl[ist] and	specifies the operation	to perform on
	       the rest	of the line.

	       Decoding	will show how a	standard-compliant MUA will display
	       the given argument, which should	be an email address.  Please
	       be aware	that most MUAs have difficulties with the address
	       standards, and vary wildly when (comments) in parenthesis,
	       "double-quoted" strings,	or quoted-pairs, as below, become in-
	       volved.	[v15 behaviour may differ] S-nail currently does not
	       perform decoding	when displaying	addresses.

	       Skinning	is identical to	decoding but only outputs the plain
	       address,	without	any string, comment etc. components.  Another
	       difference is that it may fail with the error number ! set to
	       ^ERR-INVAL if decoding fails to find a(n) (valid) email ad-
	       dress, in which case the	unmodified input will be output	again.

	       skinlist	first performs a skin operation, and thereafter	checks
	       a valid address for whether it is a registered mailing list
	       (see mlist and mlsubscribe), eventually reporting that state in
	       the error number	! as ^ERR-EXIST.  (This	state could later be-
	       come overwritten	by an I/O error, though.)

	       Encoding	supports four different	modes, lesser automated	ver-
	       sions can be chosen by prefixing	one, two or three plus signs:
	       the standard imposes a special meaning on some characters,
	       which thus have to be transformed to so-called quoted-pairs by
	       pairing them with a reverse solidus `\' in order	to remove the
	       special meaning;	this might change interpretation of the	entire
	       argument	from what has been desired, however!  Specify one plus
	       sign to remark that parenthesis shall be	left alone, two	for
	       not turning double quotation marks into quoted-pairs, and three
	       for also	leaving	any user-specified reverse solidus alone.  The
	       result will always be valid, if a successful exit status	is re-
	       ported ([v15 behaviour may differ] the current parser fails
	       this assertion for some constructs).  [v15 behaviour may	dif-
	       fer] Addresses need to be specified in between angle brackets
	       `<', `>'	if the construct becomes more difficult, otherwise the
	       current parser will fail; it is not smart enough	to guess
	       right.

		     ? addrc enc "Hey, you",<diet@exam.ple>\ out\ there
		     "\"Hey, you\", \\ out\\ there" <diet@exam.ple>
		     ? addrc d "\"Hey, you\", \\ out\\ there" <diet@exam.ple>
		     "Hey, you", \ out\	there <diet@exam.ple>
		     ? addrc s "\"Hey, you\", \\ out\\ there" <diet@exam.ple>
		     diet@exam.ple

     alias, unalias
	       [Only new quoting rules](a, una)	Define or list,	and remove,
	       respectively, address aliases.  Address aliases are a method of
	       creating	personal distribution lists that map a single alias
	       name to none to multiple	receivers; aliases are expanded	after
	       message composing is completed.	The latter command removes all
	       given aliases, the special name asterisk	`*' will remove	all
	       existing	aliases.  When used without arguments the former shows
	       a list of all currently known aliases, with one argument	only
	       the target(s) of	the given one.	When given two arguments, hy-
	       phen-minus `-' being the	first, the target(s) of	the second
	       is/are expanded recursively.

	       In all other cases the given address alias is newly defined or
	       will be appended	to: target arguments must either be valid
	       alias names, or any other address type.	Recursive expansion of
	       (what looks like) alias name(s) targets can be prevented	by
	       prefixing the target with the modifier reverse solidus \.  A
	       valid alias name	conforms to mta-aliases	syntax,	but follow-up
	       characters can also be the number sign `#', colon `':, commer-
	       cial at `@,' exclamation	mark `!', period `.' as	well as	"any
	       character that has the high bit set".  The dollar sign `$' may
	       be the last character.  The number sign may need	be quoted to
	       avoid misinterpretation as the shell comment character.

	       [v15 behaviour may differ] Unfortunately	the colon is currently
	       not supported, as it interferes with normal address parsing
	       rules.  [v15 behaviour may differ] Such high bit	characters
	       will likely cause warnings at the moment	for the	same reasons
	       why colon is unsupported; also, in the future locale dependent
	       character set validity checks will be performed.

     alternates, unalternates
	       [Only new quoting rules]	(alt) Manage a list of alternate ad-
	       dresses or names	of the active user, members of which will be
	       removed from recipient lists (except one).  There is a set of
	       implicit	alternates which is formed of the values of LOGNAME,
	       from, sender and	reply-to.  from	will not be used if sender is
	       set.  The latter	command	removes	the given list of alternates,
	       the special name	`*' will discard all existing alternate	names.

	       The former command manages the error number !.  It shows	the
	       current set of alternates when used without arguments; in this
	       mode only it also supports vput (see Command modifiers).	 Oth-
	       erwise the given	arguments (after being checked for validity)
	       are appended to the list	of alternate names; in posix mode they
	       replace that list instead.

     answered, unanswered
	       Take a message lists and	mark each message as (not) having been
	       answered.  Messages will	be marked answered when	being replyd
	       to automatically	if the markanswered variable is	set.  See the
	       section Message states.

     bind, unbind
	       [Option][Only new quoting rules]	The bind command extends the
	       MLE (see	On terminal control and	line editor) with freely con-
	       figurable key bindings.	The latter command removes from	the
	       given context the given key binding, both of which may be spec-
	       ified as	a wildcard `*',	so that	`unbind	* *' will remove all
	       bindings	of all contexts.  Due to initialization	order unbind-
	       ing will	not work for built-in key bindings upon	program
	       startup,	however: please	use line-editor-no-defaults for	this
	       purpose instead.

	       With zero arguments, or with a context name the former command
	       shows all key bindings (of the given context; an	asterisk `*'
	       will iterate over all contexts);	a more verbose listing will be
	       produced	if either of debug or verbose are set.	With two or
	       more arguments a	specific binding is shown, or (re)established:
	       the first argument is the context to which the binding shall
	       apply, the second argument is a comma-separated list of the
	       "keys" which form the binding.  Further arguments will be
	       joined to form the expansion, and cause the binding to be cre-
	       ated or updated.	 To indicate that a binding shall not be auto-
	       committed, but that the expansion shall instead be furtherly
	       editable	by the user, a commercial at `@' (that will be re-
	       moved) can be placed last in the	expansion, from	which leading
	       and trailing whitespace will finally be removed.	 Reverse
	       solidus cannot be used as the last character of expansion.  An
	       empty expansion will be rejected.

	       Contexts	define when a binding applies, i.e., a binding will
	       not be seen unless the context for which	it is defined for is
	       currently active.  This is not true for the shared binding
	       `base', which is	the foundation for all other bindings and as
	       such always applies, its	bindings, however, only	apply secon-
	       darily.	The available contexts are the shared `base', the
	       `default' context which is used in all not otherwise documented
	       situations, and `compose', which	applies	to compose mode	only.

	       Bindings	are specified as a comma-separated list	of byte-se-
	       quences,	where each list	entry corresponds to one "key"
	       (press).	 Byte sequence boundaries will be forcefully termi-
	       nated after bind-inter-byte-timeout milliseconds, whereas key
	       sequences can be	timed out via bind-inter-key-timeout.  A list
	       entry may, indicated by a leading colon character `:', also re-
	       fer to the name of a terminal capability; several dozen names
	       are compiled in and may be specified either by their
	       terminfo(5), or,	if existing, by	their termcap(5) name, regard-
	       less of the actually used [Option]al terminal control library.
	       But any capability may be used, as long as the name is resolv-
	       able by the [Option]al control library, or was defined via the
	       internal	variable termcap.  Input sequences are not case-nor-
	       malized,	an exact match is required to update or	remove a bind-
	       ing.  It	is advisable to	use an initial escape or other control
	       character (like `\cA') for user (as opposed to purely terminal
	       capability based) bindings in order to avoid ambiguities; it
	       also reduces search time.  Examples:

		     ? bind base a,b echo one
		     ? bind base $'\E',d mle-snarf-word-fwd # Esc(ape)
		     ? bind base $'\E',$'\c?' mle-snarf-word-bwd # Esc,Delete
		     ? bind default $'\cA',:khome,w 'echo Editable binding@'
		     ? bind default a,b,c rm -irf / @  # Also editable
		     ? bind default :kf1 File %
		     ? bind compose :kf1 ~v

	       Note that the entire comma-separated list is first parsed
	       (over) as a shell-token with whitespace as the field separator,
	       then parsed and expanded	for real with comma as the field sepa-
	       rator, therefore	whitespace needs to be properly	quoted,	see
	       Shell-style argument quoting.  Using Unicode reverse solidus
	       escape sequences	renders	a binding defunctional if the locale
	       does not	support	Unicode	(see Character sets), and using	termi-
	       nal capabilities	does so	if no (corresponding) terminal control
	       support is (currently) available.  Adding, deleting or modify-
	       ing a key binding invalidates the internal prebuilt lookup
	       tree, it	will be	recreated as necessary:	this process will be
	       visualized in most verbose as well as in	debug mode.

	       The following terminal capability names are built-in and	can be
	       used in terminfo(5) or (if available) the two-letter termcap(5)
	       notation.  See the respective manual for	a list of capabili-
	       ties.  The program infocmp(1) can be used to show all the capa-
	       bilities	of TERM	or the given terminal type; using the -x flag
	       will also show supported	(non-standard) extensions.

	       kbs or kb       Backspace.
	       kdch1 or	kD     Delete character.
	       kDC or *4       -- shifted variant.
	       kel or kE       Clear to	end of line.
	       kext or @9      Exit.
	       kich1 or	kI     Insert character.
	       kIC or #3       -- shifted variant.
	       khome or	kh     Home.
	       kHOM or #2      -- shifted variant.
	       kend or @7      End.
	       knp or kN       Next page.
	       kpp or kP       Previous	page.
	       kcub1 or	kl     Left cursor (with more modifiers: see below).
	       kLFT or #4      -- shifted variant.
	       kcuf1 or	kr     Right cursor (ditto).
	       kRIT or %i      -- shifted variant.
	       kcud1 or	kd     Down cursor (ditto).
	       kDN	       -- shifted variant (only	terminfo).
	       kcuu1 or	ku     Up cursor (ditto).
	       kUP	       -- shifted variant (only	terminfo).
	       kf0 or k0       Function	key 0.	Add one	for each function key
			       up to kf9 and k9, respectively.
	       kf10 or k;      Function	key 10.
	       kf11 or F1      Function	key 11.	 Add one for each function key
			       up to kf19 and F9, respectively.

	       Some terminals support key-modifier combination extensions,
	       e.g., `Alt+Shift+xy'.  For example, the delete key, kdch1: in
	       its shifted variant, the	name is	mutated	to kDC,	then a number
	       is appended for the states `Alt'	(kDC3),	`Shift+Alt' (kDC4),
	       `Control' (kDC5), `Shift+Control' (kDC6), `Alt+Control' (kDC7),
	       finally `Shift+Alt+Control' (kDC8).  The	same for the left cur-
	       sor key,	kcub1: KLFT, KLFT3, KLFT4, KLFT5, KLFT6, KLFT7,	KLFT8.

     call      [Only new quoting rules]	Calls the given	macro, which must have
	       been created via	define (see there for more), otherwise an
	       ^ERR-NOENT error	occurs.	 Calling macros	recursively will at
	       some time excess	the stack size limit, causing a	hard program
	       abortion; if recursively	calling	a macro	is the last command of
	       the current macro, consider to use the command xcall, which
	       will first release all resources	of the current macro before
	       replacing the current macro with	the called one.

     call_if   Identical to call if the	given macro has	been created via
	       define, but does	not fail nor warn if the macro does not	exist.

     cd	       Synonym for chdir.

     certsave  [Option]	Only applicable	to S/MIME signed messages.  Takes an
	       optional	message	list and a filename and	saves the certificates
	       contained within	the message signatures to the named file in
	       both human-readable and PEM format.  The	certificates can later
	       be used to send encrypted messages to the respective message
	       senders by setting smime-encrypt-USER@HOST variables.

     charsetalias, uncharsetalias
	       [Only new quoting rules]	Manage alias mappings for (conversion
	       of) Character sets.  Alias processing is	not performed for
	       INTERNAL	VARIABLES, for example charset-8bit, and mappings are
	       ineffective if character	set conversion is not available
	       (features does not announce `+iconv').  Expansion happens re-
	       cursively for cases where aliases point to other	aliases
	       (built-in loop limit: 8).

	       The latter command deletes all aliases given as arguments, or
	       all at once when	given the asterisk `*'.	 The former shows the
	       list of all currently defined aliases if	used without argu-
	       ments, or the target of the given single	argument; when given
	       two arguments, hyphen-minus `-' being the first,	the second is
	       instead expanded	recursively.  In all other cases the given ar-
	       guments are treated as pairs of character sets and their	de-
	       sired target alias name,	creating new or	updating already ex-
	       isting aliases.

     chdir     [Only new quoting rules](ch) Change the working directory to
	       HOME or the given argument.  Synonym for	cd.

     collapse, uncollapse
	       Only applicable to `thread'ed sort mode.	 Takes a message list
	       and makes all replies to	these messages invisible in header
	       summaries, except for `new' messages and	the "dot".  Also when
	       a message with collapsed	replies	is displayed, all of these are
	       automatically uncollapsed.  The latter command undoes collaps-
	       ing.

     colour, uncolour
	       [Option][Only new quoting rules]	Manage colour mappings of and
	       for a Coloured display.	Without	arguments the former shows all
	       currently defined mappings.  Otherwise a	colour type is ex-
	       pected (case-insensitively), it must be one of `256' for
	       256-colour terminals, `8', `ansi' or `iso' for the standard
	       8-colour	ANSI / ISO 6429	colour palette,	and `1'	or `mono' for
	       monochrome terminals, which only	support	(some) font at-
	       tributes.  Without further arguments the	list of	all currently
	       defined mappings	of the given type is shown (here the special
	       `all' or	`*' also show all currently defined mappings).

	       Otherwise the second argument defines the mappable slot,	the
	       third argument a	(comma-separated list of) colour and font at-
	       tribute specification(s), and the optionally supported fourth
	       argument	can be used to specify a precondition: if conditioned
	       mappings	exist they are tested in (creation) order unless a
	       (case-insensitive) match	has been found,	and the	default	map-
	       ping (if	any has	been established) will only be chosen as a
	       last resort.  The types of available preconditions depend on
	       the mappable slot, the following	of which exist:

	       Mappings	prefixed with `mle-' are used for the [Option]al
	       built-in	Mailx-Line-Editor (MLE,	see On terminal	control	and
	       line editor) and	do not support preconditions.

	       mle-position   This mapping is used for the position indicator
			      that is visible when a line cannot be fully dis-
			      played on	the screen.
	       mle-prompt     Used for the prompt.
	       mle-error      Used for the occasionally	appearing error	indi-
			      cator that is joined onto	prompt.	 [v15 behav-
			      iour may differ] Also used for error messages
			      written on standard error	.

	       Mappings	prefixed with `sum-' are used in header	summaries, and
	       they all	understand the preconditions `dot' (the	current	mes-
	       sage) and `older' for elder messages (only honoured in conjunc-
	       tion with datefield-markout-older).

	       sum-dotmark    This mapping is used for the "dotmark" that can
			      be created with the `%>' or `%<' formats of the
			      variable headline.
	       sum-header     For the complete header summary line except the
			      "dotmark"	and the	thread structure.
	       sum-thread     For the thread structure which can be created
			      with the `%i' format of the variable headline.

	       Mappings	prefixed with `view-' are used when displaying mes-
	       sages.

	       view-from_     This mapping is used for so-called `From_'
			      lines, which are MBOX file format	specific
			      header lines (also see mbox-rfc4155).
	       view-header    For header lines.	 A comma-separated list	of
			      headers to which the mapping applies may be
			      given as a precondition; if the [Option]al regu-
			      lar expression support is	available then if any
			      of the magic regular expression characters is
			      seen the precondition will be evaluated as (an
			      extended)	one.
	       view-msginfo   For the introductional message info line.
	       view-partinfo  For MIME part info lines.

	       The following (case-insensitive)	colour definitions and font
	       attributes are understood, multiple of which can	be specified
	       in a comma-separated list:

	       ft=  a font attribute: `bold', `reverse'	or `underline'.	 It is
		    possible (and often	applicable) to specify multiple	font
		    attributes for a single mapping.

	       fg=  foreground colour attribute: `black', `blue', `green',
		    `red', `brown', `magenta', `cyan' or `white'.  To specify
		    a 256-colour mode a	decimal	number colour specification in
		    the	range 0	to 255,	inclusive, is supported, and inter-
		    preted as follows:

		    0 -	7      the standard ISO	6429 colours, as above.
		    8 -	15     high intensity variants of the standard
			       colours.
		    16 - 231   216 colours in tuples of	6.
		    232	- 255  grayscale from black to white in	24 steps.

			  #!/bin/sh -
			  fg() { printf	"\033[38;5;${1}m($1)"; }
			  bg() { printf	"\033[48;5;${1}m($1)"; }
			  i=0
			  while	[ $i -lt 256 ];	do fg $i; i=$(($i + 1)); done
			  printf "\033[0m\n"
			  i=0
			  while	[ $i -lt 256 ];	do bg $i; i=$(($i + 1)); done
			  printf "\033[0m\n"

	       bg=  background colour attribute	(see fg= for possible values).

	       The command uncolour will remove	for the	given colour type (the
	       special type `*'	selects	all) the given mapping;	if the op-
	       tional precondition argument is given only the exact tuple of
	       mapping and precondition	is removed.  The special name `*' will
	       remove all mappings (no precondition allowed), thus `uncolour *
	       *' will remove all established mappings.

     commandalias, uncommandalias
	       [Only new quoting rules]	Define or list,	and remove, respec-
	       tively, command aliases.	 An (command)alias can be used every-
	       where a normal command can be used, but always takes prece-
	       dence: any arguments that are given to the command alias	are
	       joined onto the alias expansion,	and the	resulting string forms
	       the command line	that is, in effect, executed.  The latter com-
	       mand removes all	given aliases, the special name	asterisk `*'
	       will remove all existing	aliases.  When used without arguments
	       the former shows	a list of all currently	known aliases, with
	       one argument only the expansion of the given one.

	       With two	or more	arguments a command alias is defined or	up-
	       dated: the first	argument is the	name under which the remaining
	       command line should be accessible, the content of which can be
	       just about anything.  An	alias may itself expand	to another
	       alias, but to avoid expansion loops further expansion will be
	       prevented if an alias refers to itself or if an expansion depth
	       limit is	reached.  Explicit expansion prevention	is available
	       via reverse solidus \, one of the Command modifiers.

		     ? commandalias xx
		     s-nail: `commandalias': no	such alias: xx
		     ? commandalias xx echo hello,
		     ? commandalias xx
		     commandalias xx 'echo hello,'
		     ? xx
		     hello,
		     ? xx world
		     hello, world

     Copy      (C) Similar to copy, but	copy the messages to a file named af-
	       ter the local part of the sender	of the first message instead
	       of taking a filename argument; outfolder	is inspected to	decide
	       on the actual storage location.

     copy      (c) Copy	messages to the	named file and do not mark them	as be-
	       ing saved; otherwise identical to save.

     csop      [Only new quoting rules]	A multiplexer command which provides
	       C-style string operations on 8-bit bytes	without	a notion of
	       locale settings and character sets, effectively assuming	ASCII
	       data.  For numeric and other operations refer to	vexpr.	vput,
	       one of the Command modifiers, is	supported.  The	error result
	       is `-1' for usage errors	and numeric results, the empty string
	       otherwise; missing data errors, as for unsuccessful searches,
	       result in the ! error number being set to ^ERR-NODATA.  Where
	       the question mark `?' modifier suffix is	supported, a case-in-
	       sensitive (ASCII	mapping) operation mode	is supported; the key-
	       word `case' is optional so that `find?' and `find?case' are
	       identical.

	       length	 Queries the length of the given argument.

	       hash, hash32 Calculates a hash value of the given argument.
			 The latter will return	a 32-bit result	regardless of
			 host environment.  `?'	modifier suffix	is supported.
			 These use Chris Torek's hash algorithm, the resulting
			 hash value is bit mixed as shown by Bret Mulvey.

	       find	 Search	for the	second in the first argument.  Shows
			 the resulting 0-based offset shall it have been
			 found.	 `?' modifier suffix is	supported.

	       substring Creates a substring of	its first argument.  The op-
			 tional	second argument	is the 0-based starting	off-
			 set, a	negative one counts from the end; the optional
			 third argument	specifies the length of	the desired
			 result, a negative length leaves off the given	number
			 of bytes at the end of	the original string; by	de-
			 fault the entire string is used.  This	operation
			 tries to work around faulty arguments (set verbose
			 for error logs), but reports them via the error num-
			 ber ! as ^ERR-OVERFLOW.

	       trim	 Trim away whitespace characters from both ends	of the
			 argument.

	       trim-front Trim away whitespace characters from the begin of
			 the argument.

	       trim-end	 Trim away whitespace characters from the end of the
			 argument.

     cwd       Show the	name of	the current working directory, as reported by
	       getcwd(3).  Supports vput (see Command modifiers).  The return
	       status is tracked via ?.

     Decrypt   [Option]	For unencrypted	messages this command is identical to
	       Copy; Encrypted messages	are first decrypted, if	possible, and
	       then copied.

     decrypt   [Option]	For unencrypted	messages this command is identical to
	       copy; Encrypted messages	are first decrypted, if	possible, and
	       then copied.

     define, undefine
	       The latter command deletes the given macro, the special name
	       `*' will	discard	all existing macros.  Deletion of (a) macro(s)
	       can be performed	from within running (a)	macro(s), including
	       self-deletion.  Without arguments the former command prints the
	       current list of macros, including their content,	otherwise it
	       defines a macro,	replacing an existing one of the same name as
	       applicable.

	       A defined macro can be invoked explicitly by using the call,
	       call_if and xcall commands, or implicitly if a macro hook is
	       triggered, for example a	folder-hook.  Execution	of a macro
	       body can	be stopped from	within by calling return.

	       Temporary macro block-scope variables can be created or deleted
	       with the	local command modifier in conjunction with the com-
	       mands set and unset, respectively.  To enforce unrolling	of
	       changes made to (global)	INTERNAL VARIABLES the command
	       localopts can be	used instead; its covered scope	depends	on how
	       (i.e., "as what": normal	macro, folder hook, hook, account
	       switch) the macro is invoked.

	       Inside a	called macro, the given	positional parameters are im-
	       plicitly	local to the macro's scope, and	may be accessed	via
	       the variables *,	@, # and 1 and any other positive unsigned
	       decimal number less than	or equal to #.	Positional parameters
	       can be shifted, or become completely replaced, removed etc. via
	       vpospar.	 A helpful command for numeric computation and string
	       evaluations is vexpr, csop offers C-style byte string opera-
	       tions.

		     define name {
		       command1
		       command2
		       ...
		       commandN
		     }

		     define exmac {
		       echo Parameter 1	of ${#}	is ${1}, all: ${*} / ${@}
		       return 1000 0
		     }
		     call exmac	Hello macro exmac!
		     echo ${?}/${!}/${^ERRNAME}

     delete, undelete
	       (d, u) Marks the	given message list as being or not being
	       `deleted', respectively;	if no argument has been	specified then
	       the usual search	for a visible message is performed, as docu-
	       mented for Message list arguments, showing only the next	input
	       prompt if the search fails.  Deleted messages will neither be
	       saved in	the secondary mailbox MBOX nor will they be available
	       for most	other commands.	 If the	autoprint variable is set, the
	       new "dot" or the	last message restored, respectively, is	auto-
	       matically typed;	also see dp, dt.

     digmsg    [Only new quoting rules]	Digging	(information out of) messages
	       is possible through digmsg objects, which can be	created	for
	       the given message number; in compose mode the hyphen-minus `-'
	       will instead open the message that is being composed.  If a hy-
	       phen-minus is given as the optional third argument then output
	       will be generated on the	standard output	channel	instead	of be-
	       ing subject to consumation by the readsh	(here better than read
	       or readall) command.

	       The objects may be removed again	by giving the same identifier
	       used for	creation; this step could be omitted: objects will be
	       automatically closed when the active mailbox or the compose
	       mode is left, respectively.  In all other use cases the second
	       argument	is an object identifier, and the third and all follow-
	       ing arguments are interpreted as	via ~^ (see COMMAND ESCAPES):

		     ? vput = msgno; digmsg create $msgno
		     ? digmsg $msgno header list;   readall x;	 echon $x
		     210 Subject From To Message-ID References In-Reply-To
		     ? digmsg $msgno header show Subject;readall x;echon $x
		     212 Subject

		     ? digmsg remove $msgno

     discard   (di) Identical to ignore.  Superseded by	the multiplexer
	       headerpick.

     dp, dt    Delete the given	messages and automatically type	the new	"dot"
	       if one exists, regardless of the	setting	of autoprint.

     dotmove   Move the	"dot" up or down by one	message	when given `+' or `-'
	       argument, respectively.

     draft, undraft
	       Take message lists and mark each	given message as being draft,
	       or not being draft, respectively, as documented in the section
	       Message states.

     echo      [Only new quoting rules](ec) Echoes arguments to	standard out-
	       put and writes a	trailing newline, whereas the otherwise	iden-
	       tical echon does	not.  Shell-style argument quoting is used,
	       Filename	transformations	are applied to the expanded arguments.
	       This command also supports vput as documented in	Command
	       modifiers, and manages the error	number !: if data is stored in
	       a variable then the return value	reflects the length of the re-
	       sult string in case of success and is `-1' on error.

     echoerr   [Only new quoting rules]	Identical to echo, but the message is
	       written to standard error, and prefixed by log-prefix.  Also
	       see echoerrn.  In interactive sessions the [Option]al message
	       ring queue for errors will be used instead, if available	and
	       vput was	not used.

     echon     [Only new quoting rules]	Identical to echo, but does not	write
	       or store	a trailing newline.

     echoerrn  [Only new quoting rules]	Identical to echoerr, but does not
	       write or	store a	trailing newline.

     edit      (e) Point the text EDITOR at each message from the given	list
	       in turn.	 Modified contents are discarded unless	the
	       writebackedited variable	is set,	and are	not used unless	the
	       mailbox can be written to and the editor	returns	a successful
	       exit status.  visual can	be used	instead	for a more display
	       oriented	editor.

     elif      Part of the if (see there for more), elif, else,	endif condi-
	       tional -- if the	condition of a preceding if was	false, check
	       the following condition and execute the following block if it
	       evaluates true.

     else      (el) Part of the	if (see	there for more), elif, else, endif
	       conditional -- if none of the conditions	of the preceding if
	       and elif	commands was true, the else block is executed.

     endif     (en) Marks the end of an	if (see	there for more), elif, else,
	       endif conditional execution block.

     environ   [Only new quoting rules]	There is a strict separation in	be-
	       tween INTERNAL VARIABLES	and the	program	ENVIRONMENT, which is
	       inherited by child processes.  Some variables of	the latter are
	       however vivid for program operation, their purpose is known,
	       therefore they have been	integrated transparently into handling
	       of the former, as accessible via	set and	unset.	To integrate
	       any other environment variable, and/or to export	internal vari-
	       ables into the process environment where	they normally are not,
	       a link needs to become established with this command, for exam-
	       ple

		     environ link PERL5LIB TZ

	       Afterwards changing such	variables with set will	cause auto-
	       matic updates of	the environment, too.  Sufficient system sup-
	       port provided (it was in	BSD as early as	1987, and is standard-
	       ized since Y2K) removing	such variables with unset will remove
	       them also from the environment, but in any way the knowledge
	       they ever have been linked will be lost.	 This implies that
	       localopts may cause loss	of such	links.

	       The subcommand unlink removes an	existing link without other-
	       wise touching variables,	the set	and unset subcommands are
	       identical to set	and unset, but additionally update the program
	       environment accordingly;	removing a variable breaks any freely
	       established link.

     errors    [Option]	Since S-nail uses the console as a user	interface it
	       can happen that messages	scroll by too fast to become recog-
	       nized.  Therefore an error log queue is available which can be
	       managed by errors: show or no argument will display and clear
	       the queue, clear	will only clear	the queue.  The	queue is fi-
	       nite: if	its maximum size is reached any	new message replaces
	       the eldest.  There are also the variables ^ERRQUEUE-COUNT and
	       ^ERRQUEUE-EXISTS.

     eval      [Only new quoting rules]	Construct a command by concatenating
	       the arguments, separated	with a single space character, and
	       then evaluate the result.  This command passes through the exit
	       status ?	and error number ! of the evaluated command; also see
	       call.

		     define xxx	{
		       echo "xxx arg <$1>"
		       shift
		       if $# -gt 0
			 \xcall	xxx "$@"
		       endif
		     }
		     define yyy	{
		       eval "$@	' ball"
		     }
		     call yyy '\call xxx' "b\$'\t'u ' "
		     call xxx arg <b	  u>
		     call xxx arg <  >
		     call xxx arg <ball>

     exit      (ex or x) Exit from S-nail without changing the active mailbox
	       and skip	any saving of messages in the secondary	mailbox	MBOX,
	       as well as a possibly tracked line editor history-file.	A pos-
	       sibly set on-account-cleanup will be invoked, however.  The op-
	       tional status number argument will be passed through to
	       exit(3).	 [v15 behaviour	may differ] For	now it can happen that
	       the given status	will be	overwritten, later this	will only oc-
	       cur if a	later error needs to be	reported onto an otherwise
	       success indicating status.

     File      (Fi) Like folder, but open the mailbox read-only.

     file      (fi) See	folder.

     filetype, unfiletype
	       [Only new quoting rules]	Define,	list, and remove, respec-
	       tively, file handler hooks, which provide (shell) commands that
	       enable S-nail to	load and save MBOX files from and to files
	       with the	registered file	extensions, as shown and described for
	       folder.	The extensions are used	case-insensitively, yet	the
	       auto-completion feature of for example folder will only work
	       case-sensitively.  An intermediate temporary file will be used
	       to store	the expanded data.  The	latter command will remove
	       hooks for all given extensions, asterisk	`*' will remove	all
	       existing	handlers.

	       When used without arguments the former shows a list of all cur-
	       rently defined file hooks, with one argument the	expansion of
	       the given alias.	 Otherwise three arguments are expected, the
	       first specifying	the file extension for which the hook is
	       meant, and the second and third defining	the load- and save
	       commands	to deal	with the file type, respectively, both of
	       which must read from standard input and write to	standard out-
	       put.  Changing hooks will not affect already opened mailboxes
	       ([v15 behaviour may differ] except below).  [v15	behaviour may
	       differ] For now too much	work is	done, and files	are oftened
	       read in twice where once	would be sufficient: this can cause
	       problems	if a filetype is changed while such a file is opened;
	       this was	already	so with	the built-in support of	.gz etc. in
	       Heirloom, and will vanish in v15.  [v15 behaviour may differ]
	       For now all handler strings are passed to the SHELL for
	       evaluation purposes; in the future a `!'	prefix to load and
	       save commands may mean to bypass	this shell instance: placing a
	       leading space will avoid	any possible misinterpretations.

		     ? filetype	bz2 'bzip2 -dc'	'bzip2 -zc' \
			 gz 'gzip -dc' 'gzip -c'  xz 'xz -dc' 'xz -zc' \
			 zst 'zstd -dc'	'zstd -19 -zc' \
			 zst.pgp 'gpg -d | zstd	-dc' 'zstd -19 -zc | gpg -e'
		     ? set record=+sent.zst.pgp

     flag, unflag
	       Take message lists and mark the messages	as being flagged, or
	       not being flagged, respectively,	for urgent/special attention.
	       See the section Message states.

     Folder    (Fold) Like folder, but open the	mailbox	read-only.

     folder    (fold) Open a new, or show status information of	the current
	       mailbox.	 If an argument	is given, changes (such	as deletions)
	       will be written out, a new mailbox will be opened, the internal
	       variables mailbox-resolved and mailbox-display will be updated,
	       a set according folder-hook is executed,	and optionally a sum-
	       mary of headers is displayed if the variable header is set.

	       Filename	transformations	will be	applied	to the name argument,
	       and `protocol://' prefixes are, i.e., URL (see On URL syntax
	       and credential lookup) syntax is	understood, as in
	       `mbox:///tmp/somefolder'.  If a protocol	prefix is used the
	       mailbox type is fixated,	otherwise opening none-existing
	       folders uses the	protocol defined in newfolders.

	       For the protocols mbox and file (MBOX database),	as well	as eml
	       (electronic mail	message	[v15 behaviour may differ] read-only)
	       the list	of all registered filetypes is traversed to check
	       whether hooks shall be used to load (and	save) data from	(and
	       to) the given name.  Changing hooks will	not affect already
	       opened mailboxes.  For example, the following creates hooks for
	       the gzip(1) compression tool and	a combined compressed and en-
	       crypted format:

		     ? filetype	\
			 gzip 'gzip -dc' 'gzip -c' \
			 zst.pgp 'gpg -d | zstd	-dc' 'zstd -19 -zc | gpg -e'

	       For historic reasons filetypes provide limited (case-sensitive)
	       auto-completion capabilities.  For example `mbox.gz' will be
	       found for `? file mbox',	provided that corresponding handlers
	       are installed.  It will neither find `mbox.GZ' nor `mbox.Gz'
	       however,	but an explicit	`? file	mbox.GZ' will find and use the
	       handler for `gz'.  [v15 behaviour may differ] The latter	mode
	       can only	be used	for MBOX files.

	       EML files consist of only one mail message, [v15	behaviour may
	       differ] and can only be opened read-only.  When reading MBOX
	       files tolerant POSIX rules are used by default.	Invalid	mes-
	       sage boundaries that can	be found quite often in	historic MBOX
	       files will be complained	about (even more with debug ): in this
	       case the	method described for mbox-rfc4155 can be used to cre-
	       ate a valid MBOX	database from the invalid input.

	       MBOX databases and EML files will always	be protected via file-
	       region locks (fcntl(2)) during file operations to protect
	       against concurrent modifications.  [Option] An MBOX inbox
	       (MAIL) or primary system	mailbox	will also be protected by so-
	       called dotlock files, the traditional way of mail spool file
	       locking:	for any	file `x' a lock	file `x.lock' will be created
	       during the synchronization, in the same directory and with the
	       same user and group identities as the file of interest -- as
	       necessary created by an external	privileged dotlock helper.
	       dotlock-disable disables	dotlock	files.	Also see FAQ: Howto
	       handle stale dotlock files.

	       [Option]	If no protocol has been	fixated, and name refers to a
	       directory with the subdirectories `tmp',	`new' and `cur', then
	       it is treated as	a folder in "Maildir" format.  The maildir
	       format stores each message in its own file, and has been	de-
	       signed so that file locking is not necessary when reading or
	       writing files.

	       [Option]ally URLs can be	used to	access network resources, se-
	       curely via Encrypted network communication, if so supported.
	       Network communication socket timeouts are configurable via
	       socket-connect-timeout.	All network traffic may	be proxied
	       over a SOCKS server via socks-proxy.

		     [v15-compat]
		     protocol://[user[:password]@]host[:port][/path]
		     [no v15-compat] protocol://[user@]host[:port][/path]

	       [Option]ally supported network protocols	are pop3 (POP3)	and
	       pop3s (POP3 with	TLS encrypted transport), imap and imaps.  The
	       [/path] part is valid only for IMAP; there it defaults to
	       INBOX.  Network URLs require a special encoding as documented
	       in the section On URL syntax and	credential lookup.

     folders   Lists the names of all folders below the	given argument or
	       folder.	For file-based protocols LISTER	will be	used for dis-
	       play purposes.

     Followup, followup
	       (Compose	mode)(F,fo) Similar to Reply, and reply, respectively,
	       but save	the message in a file named after the local part of
	       the (first) recipient's address,	possibly overwriting record,
	       and honouring outfolder.	 Also see Copy and Save.

     Forward   (Compose	mode) Similar to forward, but saves the	message	in a
	       file named after	the local part of the recipient's address (in-
	       stead of	in record).

     forward   (Compose	mode) Take a message list and the address of a recipi-
	       ent, subject to fullnames, to whom the messages are sent.  The
	       text of the original message is included	in the new one,	en-
	       closed by the values of forward-inject-head and
	       forward-inject-tail.  content-description-forwarded-message is
	       inspected.  The list of included	headers	can be filtered	with
	       the `forward' slot of the white-	and blacklisting command
	       headerpick.  Only the first part	of a multipart message is in-
	       cluded but for forward-as-attachment.

	       This may	generate the errors ^ERR-DESTADDRREQ if	no receiver
	       has been	specified, or was rejected by expandaddr policy,
	       ^ERR-IO if an I/O error occurs, ^ERR-NOTSUP if a	necessary
	       character set conversion	fails, and ^ERR-INVAL for other	er-
	       rors.  It can also fail with errors of Specifying messages.
	       Any error stops processing of further messages.

     from      (f) Takes a list	of message specifications and displays a sum-
	       mary of their message headers, exactly as via headers, making
	       the first message of the	result the new "dot" (the last message
	       if showlast is set).  An	alias of this command is search.  Also
	       see Specifying messages.

     Fwd       [Obsolete] Alias	for Forward.

     fwd       [Obsolete] Alias	for forward.

     fwdignore
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     fwdretain
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     ghost, unghost
	       [Obsolete] Replaced by commandalias, uncommandalias.

     headerpick, unheaderpick
	       [Only new quoting rules]	Multiplexer command to manage white-
	       and blacklisting	selections of header fields for	a variety of
	       applications.  Without arguments	the set	of contexts that have
	       settings	is displayed.  When given arguments, the first argu-
	       ment is the context to which the	command	applies, one of	(case-
	       insensitive) `type' for display purposes	(for example type),
	       `save' for selecting which headers shall	be stored persistently
	       when save, copy,	move or	even decrypting	messages (note that
	       MIME related etc. header	fields should not be ignored in	order
	       to not destroy usability	of the message in this case),
	       `forward' for stripping down messages when forwarding message
	       (has no effect if forward-as-attachment is set),	and `top' for
	       defining	user-defined set of fields for the command top.

	       The current settings of the given context are displayed if it
	       is the only argument.  A	second argument	denotes	the type of
	       restriction that	is to be chosen, it may	be (a case-insensitive
	       prefix of) `retain' or `ignore' for white- and blacklisting
	       purposes, respectively.	Establishing a whitelist suppresses
	       inspection of the corresponding blacklist.

	       If no further argument is given the current settings of the
	       given type will be displayed, otherwise the remaining arguments
	       specify header fields, which [Option]ally may be	given as regu-
	       lar expressions,	to be added to the given type.	The special
	       wildcard	field (asterisk, `*') will establish a (fast) short-
	       hand setting which covers all fields.

	       The latter command always takes three or	more arguments and can
	       be used to remove selections, i.e., from	the given context, the
	       given type of list, all the given headers will be removed, the
	       special argument	`*' will remove	all headers.

     headers   (h) Show	the current group of headers, the size of which	de-
	       pends on	the variable screen in interactive mode, and the for-
	       mat of which can	be defined with	headline.  If a	message-speci-
	       fication	is given the group of headers containing the first
	       message therein is shown	and the	message	at the top of the
	       screen becomes the new "dot"; the last message is targeted if
	       showlast	is set.

     help      (hel) A synonym for ?.

     history   [Option]	Without	arguments or when given	show all history en-
	       tries are shown (this mode also supports	a more verbose out-
	       put).  load will	replace	the list of entries with the content
	       of history-file,	and save will dump the current list to said
	       file, replacing former content.	clear will delete all history
	       entries.	 The argument can also be a signed decimal NUMBER,
	       which will select and evaluate the respective history entry,
	       and move	it to the top of the history; a	negative number	is
	       used as an offset to the	current	command	so that	`-1' will se-
	       lect the	last command, the history top.	An entry may be
	       deleted by giving delete	followed by a NUMBER.  Also see	On
	       terminal	control	and line editor.

     hold      (ho, also preserve) Takes a message list	and marks each message
	       therein to be saved in the user's system	inbox instead of in
	       the secondary mailbox MBOX.  Does not override the delete com-
	       mand.  S-nail deviates from the POSIX standard with this	com-
	       mand, because a next command issued after hold will display the
	       following message, not the current one.

     if	       (i) Part	of the if, elif, else, endif conditional execution
	       construct -- if the given condition is true then	the encapsu-
	       lated block is executed.	 The POSIX standard only supports the
	       (case-insensitive) conditions `r'eceive and `s'end, the remain-
	       ing are non-portable extensions.	 [v15 behaviour	may differ] In
	       conjunction with	the wysh command prefix(es) Shell-style
	       argument	quoting	and more test operators	are available.

		     if	receive
		       commands	...
		     else
		       commands	...
		     endif

	       Further (case-insensitive) one-argument conditions are
	       `t'erminal which	evaluates to true in interactive terminal ses-
	       sions (running with standard input or standard output attached
	       to a terminal, and none of the "quickrun" command line options
	       -e, -H and -L have been used), as well as any boolean value
	       (see INTERNAL VARIABLES for textual boolean representations) to
	       mark an enwrapped block as "never execute" or "always execute".
	       (Remarks: condition syntax errors skip all branches until
	       endif.)

	       [no v15-compat] and without wysh: It is possible	to check
	       INTERNAL	VARIABLES as well as ENVIRONMENT variables for exis-
	       tence or	compare	their expansion	against	a user given value or
	       another variable	by using the `$' ("variable next") conditional
	       trigger character; a variable on	the right hand side may	be
	       signalled using the same	mechanism.  Variable names may be en-
	       closed in a pair	of matching braces.  When this mode has	been
	       triggered, several operators are	available ([v15-compat]	and
	       wysh: they are always available,	and there is no	trigger: vari-
	       ables will have been expanded by	the shell-compatible parser
	       before the if etc. command sees them).

	       [v15-compat] Two	argument conditions.  Variables	can be tested
	       for existence and expansion: `-N' will test whether the given
	       variable	exists,	so that	`-N editalong' will evaluate to	true
	       when editalong is set, whereas `-Z editalong' will if it	is
	       not.  `-n "$editalong"' will be true if the variable is set and
	       expands to a non-empty string, `-z $'\$editalong'' only if the
	       expansion is empty, whether the variable	exists or not.	The
	       remaining conditions take three arguments.

	       Integer operators treat the arguments on	the left and right
	       hand side of the	operator as integral numbers and compare them
	       arithmetically.	It is an error if any of the operands is not a
	       valid integer, an empty argument	(which implies it had been
	       quoted) is treated as if	it were	0.  Via	the question mark `?'
	       modifier	suffix a saturated operation mode is available where
	       numbers will linger at the minimum or maximum possible value,
	       instead of overflowing (or trapping), the keyword `saturated'
	       is optional, `==?', `==?satu' and `==?saturated'	are therefore
	       identical.  Available operators are `-lt' (less than), `-le'
	       (less than or equal to),	`-eq' (equal), `-ne' (not equal),
	       `-ge' (greater than or equal to), and `-gt' (greater than).

	       String and regular expression data operators compare the	left
	       and right hand side according to	their textual content.	Unset
	       variables are treated as	the empty string.  Via the question
	       mark `?'	modifier suffix	a case-insensitive operation mode is
	       available, the keyword `case' is	optional, `==?'	and `==?case'
	       are identical.

	       Available string	operators are `<' (less	than), `<=' (less than
	       or equal	to), `==' (equal), `!='	(not equal), `>=' (greater
	       than or equal to), `>' (greater than), `=%' (is substring of)
	       and `!%'	(is not	substring of).	By default these operators
	       work on bytes and (therefore) do	not take into account charac-
	       ter set specifics.  If the case-insensitivity modifier has been
	       used, case is ignored according to the rules of the US-ASCII
	       encoding, i.e., bytes are still compared.

	       When the	[Option]al regular expression support is available,
	       the additional string operators `=~' and	`!~' can be used.
	       They treat the right hand side as an extended regular expres-
	       sion that is matched according to the active locale (see
	       Character sets),	i.e., character	sets should be honoured	cor-
	       rectly.

	       Conditions can be joined	via AND-OR lists (where	the AND	opera-
	       tor is `&&' and the OR operator is `||'), which have equal
	       precedence and will be evaluated	with left associativity, thus
	       using the same syntax that is known for the sh(1).  It is also
	       possible	to form	groups of conditions and lists by enclosing
	       them in pairs of	brackets `[ ...	]', which may be interlocked
	       within each other, and also be joined via AND-OR	lists.

	       The results of individual conditions and	entire groups may be
	       modified	via unary operators: the unary operator	`!' will re-
	       verse the result.

		     wysh set v15-compat=yes # with value: automatic "wysh"!
		     if	-N debug;echo *debug* set;else;echo not;endif
		     if	[ "$ttycharset"	== UTF-8 ] || \
			 [ "$ttycharset" ==?case UTF8 ]
		       echo *ttycharset* is UTF-8, the former case-sensitive!
		     endif
		     set t1=one	t2=one
		     if	[ "${t1}" == "${t2}" ]
		       echo These two variables	are equal
		     endif
		     if	"$features" =% +regex && "$TERM" =~?case "^xterm.*"
		       echo ..in an X terminal
		     endif
		     if	[ [ true ] && [	[ "${debug}" !=	'' ] ||	\
			 [ "$verbose" != '' ] ]	]
		       echo Noisy, noisy
		     endif
		     if	true &&	[ -n "$debug" || -n "${verbose}" ]
		       echo Left associativity,	as is known from the shell
		     endif

     ignore    (ig) Identical to discard.  Superseded by the multiplexer
	       headerpick.

     list      Shows the names of all available	commands, in command lookup
	       order.  [Option]	In conjunction with a set variable verbose ad-
	       ditional	information will be provided for each command: the ar-
	       gument type will	be indicated, the documentation	string will be
	       shown, and the set of command flags will	show up:

	       ``local''    command supports the command modifier local.
	       ``vput''	    command supports the command modifier vput.
	       `*!*'	    the	error number is	tracked	in !.
	       `needs-box'  whether the	command	needs an active	mailbox, a
			    folder.
	       `ok:'	    indicators whether command is ...
			    `batch/interactive'
					  usable in interactive	or batch mode
					  (-#).
			    `send-mode'	  usable in send mode.
			    `subprocess'  allowed to be	used when running in a
					  subprocess instance, for example
					  from within a	macro that is called
					  via on-compose-splice.
	       `not ok:'    indicators whether command is not ...
			    `compose-mode'  available in compose mode.
			    `startup'	    available during program startup,
					    like in Resource files.
	       `gabby'	    The	command	produces history-gabby history en-
			    tries.

     localopts
	       Enforce change localization of environ (linked) ENVIRONMENT as
	       well as (global)	INTERNAL VARIABLES, meaning that their state
	       will be reverted	to the former one once the "covered scope" is
	       left.  Just like	the command modifier local, which provides
	       block-scope localization	for some commands (instead), it	can
	       only be used inside of macro definition blocks introduced by
	       account or define.  The covered scope of	an account is left
	       once a different	account	is activated, and some macros, notably
	       folder-hooks, use their own specific notion of covered scope,
	       here it will be extended	until the folder is left again.

	       This setting stacks up: i.e., if	`macro1' enables change	local-
	       ization and calls `macro2', which explicitly resets localiza-
	       tion, then any value changes within `macro2' will still be re-
	       verted when the scope of	`macro1' is left.  (Caveats: if	in
	       this example `macro2' changes to	a different account which sets
	       some variables that are already covered by localizations, their
	       scope will be extended, and in fact leaving the account will
	       (thus) restore settings in (likely) global scope	which actually
	       were defined in a local,	macro private context!)

	       This command takes one or two arguments,	the optional first one
	       specifies an attribute that may be one of scope,	which refers
	       to the current scope and	is thus	the default, call, which
	       causes any macro	that is	being called to	be started with	local-
	       ization enabled by default, as well as call-fixate, which (if
	       enabled)	disallows any called macro to turn off localization:
	       like this it can	be ensured that	once the current scope regains
	       control,	any changes made in deeper levels have been reverted.
	       The latter two are mutually exclusive, and neither affects
	       xcall.  The (second) argument is	interpreted as a boolean
	       (string,	see INTERNAL VARIABLES)	and states whether the given
	       attribute shall be turned on or off.

		     define temporary_settings {
		       set possibly_global_option1
		       localopts on
		       set localized_option1
		       set localized_option2
		       localopts scope off
		       set possibly_global_option2
		     }

     Lfollowup,	Lreply
	       (Compose	mode) Reply to messages	that come in via known (mlist)
	       or subscribed (mlsubscribe) mailing lists, or pretend to	do so
	       (see Mailing lists): on top of the usual	followup and reply,
	       respectively, functionality this	will actively resort and even
	       remove message recipients in order to generate a	message	that
	       is supposed to be sent to a mailing list.  For example it will
	       also implicitly generate	a `Mail-Followup-To:' header if	that
	       seems useful, regardless	of the setting of the variable
	       followup-to.  For more documentation please refer to On sending
	       mail, and non-interactive mode.

	       This may	generate the errors ^ERR-DESTADDRREQ if	no receiver
	       has been	specified, ^ERR-PERM if	some addressees	where rejected
	       by expandaddr, ^ERR-IO if an I/O	error occurs, ^ERR-NOTSUP if a
	       necessary character set conversion fails, and ^ERR-INVAL	for
	       other errors.  It can also fail with errors of Specifying
	       messages.  Occurrence of	some of	the errors depend on the value
	       of expandaddr.  Any error stops processing of further messages.

     Mail      (Compose	mode) Similar to mail, but saves the message in	a file
	       named after the local part of the first recipient's address
	       (instead	of in record).

     mail      (Compose	mode)(m) Takes a (list of) recipient address(es) as
	       (an) argument(s), or asks on standard input if none were	given;
	       then collects the remaining mail	content	and sends it out.  Un-
	       less the	internal variable fullnames is set recipient addresses
	       will be stripped	from comments, names etc.  For more documenta-
	       tion please refer to On sending mail, and non-interactive mode.

	       This may	generate the errors ^ERR-DESTADDRREQ if	no receiver
	       has been	specified, ^ERR-PERM if	some addressees	where rejected
	       by expandaddr, ^ERR-NOTSUP if multiple messages have been spec-
	       ified, ^ERR-IO if an I/O	error occurs, ^ERR-NOTSUP if a neces-
	       sary character set conversion fails, and	^ERR-INVAL for other
	       errors.	It can also fail with errors of	Specifying messages.
	       Occurrence of some of the errors	depend on the value of
	       expandaddr.

     mailcap   [Option]	When used without arguments or if show has been	given
	       the content of The Mailcap files	cache is shown,	(re-)initial-
	       izing it	first (as necessary.  If the argument is load then the
	       cache will only be (re-)initialized, and	clear will remove its
	       contents.  Note that S-nail will	try to load the	files only
	       once, use `mailcap clear' to unlock further attempts.  Loading
	       and parsing can be made more verbose.

     mbox      (mb) The	given message list is to be sent to the	secondary
	       mailbox MBOX when S-nail	is quit; this is the default action
	       unless the variable hold	is set.	 [v15 behaviour	may differ]
	       This command can	only be	used in	a primary system mailbox.

     mimetype, unmimetype
	       [Only new quoting rules]	Without	arguments the content of the
	       MIME type cache will displayed; a more verbose listing will be
	       produced	if either of debug or verbose are set.	When given ar-
	       guments they will be joined, interpreted	as shown in The
	       mime.types files	(also see HTML mail and	MIME attachments), and
	       the resulting entry will	be added (prepended) to	the cache.  In
	       any event MIME type sources are loaded first as necessary -
	       mimetypes-load-control can be used to fine-tune which sources
	       are actually loaded.

	       The latter command deletes all specifications of	the given MIME
	       type, thus `? unmimetype	text/plain' will remove	all registered
	       specifications for the MIME type	`text/plain'.  The special
	       name `*'	will discard all existing MIME types, just as will
	       `reset',	but which also reenables cache initialization via
	       mimetypes-load-control.

     mimeview  [v15 behaviour may differ] Only available in interactive	mode,
	       this command allows execution of	external MIME type handlers
	       which do	not integrate into the normal type output (see HTML
	       mail and	MIME attachments).  ([v15 behaviour may	differ]	No
	       syntax to directly address parts, this restriction may vanish.)
	       The user	will be	asked for each non-text	part of	the given mes-
	       sage in turn whether the	registered handler shall be used to
	       display the part.

     mlist, unmlist
	       [Only new quoting rules]	Manage the list	of known Mailing
	       lists; subscriptions are	controlled via mlsubscribe.  The lat-
	       ter command deletes all given arguments,	or all at once when
	       given the asterisk `*'.	The former shows the list of all cur-
	       rently known lists if used without arguments, otherwise the
	       given arguments will become known.  [Option] In the latter
	       case, arguments which contain any of the	magic regular
	       expression characters will be interpreted as one, possibly
	       matching	many addresses;	these will be sequentially matched via
	       linked lists instead of being looked up in a dictionary.

     mlsubscribe, unmlsubscribe
	       Building	upon the command pair mlist, unmlist, but only manag-
	       ing the subscription attribute of mailing lists.	 (The former
	       will also create	not yet	existing mailing lists.)

     Move      Similar to move,	but move the messages to a file	named after
	       the local part of the sender of the first message instead of
	       taking a	filename argument; outfolder is	inspected to decide on
	       the actual storage location.

     move      Acts like copy but marks	the messages for deletion if they were
	       transferred successfully.

     More      Like more, but also displays header fields which	would not pass
	       the headerpick selection, and all MIME parts.  Identical	to
	       Page.

     more      Invokes the PAGER on the	given messages,	even in	non-interac-
	       tive mode and as	long as	the standard output is a terminal.
	       Identical to page.

     mtaaliases
	       [Option]	When used without arguments or if show has been	given
	       the content of the mta-aliases cache is shown, (re-)initializ-
	       ing it first (as	necessary).  If	the argument is	load then the
	       cache will only be (re-)initialized, and	clear will remove its
	       contents.

     netrc     [Option]	When used without arguments, or	when the argument was
	       show the	content	of the ~/.netrc	cache is shown,	initializing
	       it as necessary.	 If the	argument is load then the cache	will
	       be (re)loaded, whereas clear removes it.	 Loading and parsing
	       can be made more	verbose.  lookup will query the	cache for the
	       URL given as the	second argument	(`[USER@]HOST').  See
	       netrc-lookup, netrc-pipe	and the	section	On URL syntax and
	       credential lookup; the section The .netrc file documents	the
	       file format in detail.

     newmail   Checks for new mail in the current folder without committing
	       any changes before.  If new mail	is present, a message is
	       shown.  If the header variable is set, the headers of each new
	       message are also	shown.	This command is	not available for all
	       mailbox types.

     next      (n) (like `+' or	"ENTER") Goes to the next message in sequence
	       and types it.  With an argument list, types the next matching
	       message.

     New       Same as Unread.

     new       Same as unread.

     noop      If the current folder is	accessed via a network connection, a
	       "NOOP" command is sent, otherwise no operation is performed.

     Page      Like page, but also displays header fields which	would not pass
	       the headerpick selection, and all MIME parts.  Identical	to
	       More.

     page      Invokes the PAGER on the	given messages,	even in	non-interac-
	       tive mode and as	long as	the standard output is a terminal.
	       Identical to more.

     Pipe      Like pipe but also pipes	header fields which would not pass the
	       headerpick selection, and all parts of MIME
	       `multipart/alternative' messages.

     pipe      (pi) Takes an optional message list and shell command (that de-
	       faults to cmd), and pipes the messages through the command.  If
	       the page	variable is set, every message is followed by a	form-
	       feed character.

     preserve  (pre) A synonym for hold.

     Print     (P) Alias for Type.

     print     (p) Research UNIX equivalent of type.

     quit      (q) Terminates the session, saving all undeleted, unsaved mes-
	       sages in	the current secondary mailbox MBOX, preserving all
	       messages	marked with hold or preserve or	never referenced in
	       the system inbox, and removing all other	messages from the
	       primary system mailbox.	If new mail has	arrived	during the
	       session,	the message "You have new mail"	will be	shown.	If
	       given while editing a mailbox file with the command line	option
	       -f, then	the edit file is rewritten.  A return to the shell is
	       effected, unless	the rewrite of edit file fails,	in which case
	       the user	can escape with	the exit command.  The optional	status
	       number argument will be passed through to exit(3).  [v15	behav-
	       iour may	differ]	For now	it can happen that the given status
	       will be overwritten, later this will only occur if a later er-
	       ror needs to be reported	onto an	otherwise success indicating
	       status.

     read      [Only new quoting rules]	Read a line from standard input, or
	       the channel set active via readctl, and assign the data,	which
	       will be split as	indicated by ifs, to the given variables.  The
	       variable	names are checked by the same rules as documented for
	       vput, and the same error	codes will be seen in !; the exit sta-
	       tus ? indicates the number of bytes read, it will be `-1' with
	       the error number	! set to ^ERR-BADF in case of I/O errors, or
	       ^ERR-NONE upon End-Of-File.  If there are more fields than
	       variables, assigns successive fields to the last	given vari-
	       able.  If there are less	fields than variables, assigns the
	       empty string to the remains.

		     ? read a b	c
			H  e  l	 l  o
		     ? echo "<$a> <$b> <$c>"
		     <H> <e> <l	 l  o>
		     ? wysh set	ifs=:; read a b	c;unset	ifs
		     hey2.0,:"'you    ",:world!:mars.:
		     ? echo $?/$^ERRNAME / <$a><$b><$c>
		     0/NONE / <hey2.0,><"'you	 ",><world!:mars.:><><>

     readsh    [Only new quoting rules]	Like read, but splits on shell token
	       boundaries (see Shell-style argument quoting) rather than at
	       ifs.  [v15 behaviour may	differ]	Could become a commandalias,
	       maybe `read --tokenize --'.

     readall   [Only new quoting rules]	Read anything from standard input, or
	       the channel set active via readctl, and assign the data to the
	       given variable.	The variable name is checked by	the same rules
	       as documented for vput, and the same error codes	will be	seen
	       in !; the exit status ? indicates the number of bytes read, it
	       will be `-1' with the error number ! set	to ^ERR-BADF in	case
	       of I/O errors, or ^ERR-NONE upon	End-Of-File.  [v15 behaviour
	       may differ] The input data length is restricted to 31-bits.

     readctl   [Only new quoting rules]	Manages	input channels for read,
	       readsh and readall, to be used to avoid complicated or imprac-
	       ticable code, like calling read from within a macro in non-in-
	       teractive mode.	Without	arguments, or when the first argument
	       is show,	a listing of all known channels	is printed.  Channels
	       can otherwise be	created, and existing channels can be set ac-
	       tive and	removed	by giving the string used for creation.

	       The channel name	is expected to be a file descriptor number,
	       or, if parsing the numeric fails, an input file name that un-
	       dergoes Filename	transformations.  For example (this example
	       requires	a modern shell):

		     $ printf 'echon "hey, "\nread a\nyou\necho	$a' |\
		       s-nail -R#
		     hey, you
		     $ LC_ALL=C	printf 'echon "hey, "\nread a\necho $a'	|\
		       LC_ALL=C	6<<< 'you' s-nail -R#X'readctl create 6'
		     hey, you

     remove    [Only new quoting rules]	Removes	the named files	or directo-
	       ries.  If a name	refers to a mailbox, say a Maildir mailbox,
	       then a mailbox type specific removal will be performed, delet-
	       ing the complete	mailbox.  In interactive mode the user is
	       asked for confirmation.

     rename    [Only new quoting rules]	Takes the name of an existing folder
	       and the name for	the new	folder and renames the first to	the
	       second one.  Filename transformations including shell pathname
	       wildcard	pattern	expansions (glob(7)) are performed on both ar-
	       guments.	 Both folders must be of the same type.

     Reply, Respond
	       (Compose	mode)(R) Identical to reply except that	it replies to
	       only the	sender of each message of the given list, by using the
	       first message as	the template to	quote, for the `Subject:'
	       etc.; setting flipr will	exchange this command with reply.

     reply, respond
	       (Compose	mode)(r) Take a	message	(list) and group-respond (to
	       each in turn) by	addressing the sender and all recipients, sub-
	       ject to fullnames and alternates	processing.  followup-to,
	       followup-to-honour, reply-to-honour as well as recipients-in-cc
	       influence response behaviour.  quote as well as
	       quote-as-attachment configure whether responded-to message
	       shall be	quoted etc., content-description-quote-attachment may
	       be used.	 Setting flipr will exchange this command with Reply.
	       The command Lreply offers special support for replying to mail-
	       ing lists.  For more documentation please refer to On sending
	       mail, and non-interactive mode.

	       This may	generate the errors ^ERR-DESTADDRREQ if	no receiver
	       has been	specified, or was rejected by expandaddr policy,
	       ^ERR-IO if an I/O error occurs, ^ERR-NOTSUP if a	necessary
	       character set conversion	fails, and ^ERR-INVAL for other	er-
	       rors.  It can also fail with errors of Specifying messages.
	       Any error stops processing of further messages.

     Resend    Like resend, but	does not add any header	lines.	This is	not a
	       way to hide the sender's	identity, but useful for sending a
	       message again to	the same recipients.

     resend    Takes a list of messages	and a name, and	sends each message to
	       the given addressee, which is subject to	fullnames.
	       `Resent-From:' and related header fields	are prepended to the
	       new copy	of the message.	 Saving	in record is only performed if
	       record-resent is	set.  [v15 behaviour may differ](Compose mode)
	       is not entered, the only	supported hooks	are on-resend-enter
	       and on-resend-cleanup.

	       This may	generate the errors ^ERR-DESTADDRREQ if	no receiver
	       has been	specified, or was rejected by expandaddr policy,
	       ^ERR-IO if an I/O error occurs, ^ERR-NOTSUP if a	necessary
	       character set conversion	fails, and ^ERR-INVAL for other	er-
	       rors.  It can also fail with errors of Specifying messages.
	       Any error stops processing of further messages.

     retain    (ret) Superseded	by the multiplexer headerpick.

     return    Only available inside of	a defined macro	or an account, this
	       command returns control of execution to the outer scope.	 The
	       two optional parameters are positive decimal numbers and	de-
	       fault to	0: the first specifies the 32-bit return value (stored
	       in ? [v15 behaviour may differ] and later extended to 64-bit),
	       the second the 32-bit error number (stored in !).  As docu-
	       mented for ? a non-0 exit status	may cause the program to exit.

     Save      (S) Similar to save, but	saves the messages in a	file named af-
	       ter the local part of the sender	of the first message instead
	       of taking a filename argument; outfolder	is inspected to	decide
	       on the actual storage location.

     save      (s) Takes a message list	and a filename and appends each	mes-
	       sage in turn to the end of the file.  Filename transformations
	       including shell pathname	wildcard pattern expansions (glob(7))
	       is performed on the filename.  If no filename is	given, the
	       secondary mailbox MBOX is used.	The filename in	quotes,	fol-
	       lowed by	the generated character	count is echoed	on the user's
	       terminal.  If editing a primary system mailbox the messages are
	       marked for deletion.  To	filter the saved header	fields to the
	       desired subset use the `save' slot of the white-	and blacklist-
	       ing command headerpick.	Also see Copy.

     savediscard
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     saveignore
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     saveretain
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     search    Takes a message specification (list) and	displays a header sum-
	       mary of all matching messages, as via headers.  This command is
	       an alias	of from.  Also see Specifying messages.

     seen      Takes a message list and	marks all messages as having been
	       read.

     set, unset
	       (se, [Only new quoting rules] uns) The latter command will
	       delete all given	global variables, or only block-scope local
	       ones if the local command modifier has been used.  The former,
	       when used without arguments, will show all currently known
	       variables, being	more verbose if	either of debug	or verbose is
	       set.  Remarks: this list	mode will not automatically link-in
	       known ENVIRONMENT variables, but	only explicit addressing will
	       do so, examples are varshow, using a variable in	an if condi-
	       tion or a string	passed to echo,	explicit setting, as well as
	       some program-internal use cases.

	       Otherwise the given variables (and arguments) are set or	ad-
	       justed.	Arguments are of the form `name=value' (no space be-
	       fore or after `='), or plain `name' if there is no value, i.e.,
	       a boolean variable.  If a name begins with `no',	as in `set
	       nosave',	the effect is the same as invoking the unset command
	       with the	remaining part of the variable (`unset save').	[v15
	       behaviour may differ] In	conjunction with the wysh (or local)
	       command prefix(es) Shell-style argument quoting can be used to
	       quote arguments as necessary.  [v15 behaviour may differ] Oth-
	       erwise quotation	marks may be placed around any part of the as-
	       signment	statement to quote blanks or tabs.

	       When operating in global	scope any `name' that is known to map
	       to an environment variable will automatically cause updates in
	       the program environment (unsetting a variable in	the environ-
	       ment requires corresponding system support) -- use the command
	       environ for further environmental control.  If the command mod-
	       ifier local has been used to alter the command to work in
	       block-scope all variables have values (may they be empty), and
	       creation	of names which shadow INTERNAL VARIABLES is actively
	       prevented ([v15 behaviour may differ] shadowing of linked
	       ENVIRONMENT variables and free-form versions of variable	chains
	       is not yet detected).  Also see varshow and the sections
	       INTERNAL	VARIABLES and ENVIRONMENT.

		     ? wysh set	indentprefix=' -> '
		     ? wysh set	atab=$'' aspace=' ' zero=0

     shcodec   Apply shell quoting rules to the	given raw-data arguments.
	       Supports	vput (see Command modifiers).  The first argument
	       specifies the operation:	[+]e[ncode] or d[ecode]	cause shell
	       quoting to be applied to	the remains of the line, and expanded
	       away thereof, respectively.  If the former is prefixed with a
	       plus-sign, the quoted result will not be	roundtrip enabled, and
	       thus can	be decoded only	in the very same environment that was
	       used to perform the encode; also	see mle-quote-rndtrip.	If the
	       coding operation	fails the error	number ! is set	to
	       ^ERR-CANCELED, and the unmodified input is used as the result;
	       the error number	may change again due to	output or result stor-
	       age errors.

     shell     [Only new quoting rules]	(sh) Invokes an	interactive version of
	       the shell, and returns its exit status.

     shortcut, unshortcut
	       [Only new quoting rules]	Manage the file- or pathname shortcuts
	       as documented for folder.  The latter command deletes all
	       shortcuts given as arguments, or	all at once when given the as-
	       terisk `*'.  The	former shows the list of all currently defined
	       shortcuts if used without arguments, the	target of the given
	       with a single argument.	Otherwise arguments are	treated	as
	       pairs of	shortcuts and their desired expansion, creating	new or
	       updating	already	existing ones.

     shift     [Only new quoting rules]	Shift the positional parameter stack
	       (starting at 1) by the given number (which must be a positive
	       decimal), or 1 if no argument has been given.  It is an error
	       if the value exceeds the	number of positional parameters.  If
	       the given number	is 0, no action	is performed, successfully.
	       The stack as such can be	managed	via vpospar.  Note this	com-
	       mand will fail in account and hook macros unless	the positional
	       parameter stack has been	explicitly created in the current con-
	       text via	vpospar.

     show      Like type, but performs neither MIME decoding nor decryption,
	       so that the raw message text is shown.

     size      (si) Shows the size in characters of each message of the	given
	       message list.

     sleep     [Only new quoting rules]	Sleep for the specified	number of sec-
	       onds (and optionally milliseconds), by default interruptible.
	       If a third argument is given the	sleep will be uninterruptible,
	       otherwise the error number ! will be set	to ^ERR-INTR if	the
	       sleep has been interrupted.  The	command	will fail and the er-
	       ror number will be ^ERR-OVERFLOW	if the given duration(s) over-
	       flow the	time datatype, and ^ERR-INVAL if the given durations
	       are no valid integers.

     sort, unsort
	       The latter command disables sorted or threaded mode, returns to
	       normal message order and, if the	header variable	is set,	dis-
	       plays a header summary.	The former command shows the current
	       sorting criterion when used without an argument,	but creates a
	       sorted representation of	the current folder otherwise, and
	       changes the next	command	and the	addressing modes such that
	       they refer to messages in the sorted order.  Message numbers
	       are the same as in regular mode.	 If the	header variable	is
	       set, a header summary in	the new	order is also displayed.  Au-
	       tomatic folder sorting can be enabled by	setting	the autosort
	       variable, as in `set autosort=thread'.  Possible	sorting	crite-
	       rions are:

	       date	Sort the messages by their `Date:' field, that is by
			the time they were sent.
	       from	Sort messages by the value of their `From:' field,
			that is	by the address of the sender.  If the showname
			variable is set, the sender's real name	(if any) is
			used.
	       size	Sort the messages by their size.
	       spam	[Option] Sort the message by their spam	score, as has
			been classified	by spamrate.
	       status	Sort the messages by their message status.
	       subject	Sort the messages by their subject.
	       thread	Create a threaded display.
	       to	Sort messages by the value of their `To:' field, that
			is by the address of the recipient.  If	the showname
			variable is set, the recipient's real name (if any) is
			used.

     source    [Only new quoting rules]	(so) The source	command	reads commands
	       from the	given file.  Filename transformations will be applied.
	       If the given expanded argument ends with	a vertical bar `|'
	       then the	argument will instead be interpreted as	a shell	com-
	       mand and	S-nail will read the output generated by it.  Depen-
	       dent on the settings of posix and errexit, and also dependent
	       on whether the command modifier ignerr had been used, encoun-
	       tering errors will stop sourcing	of the given input.  [v15 be-
	       haviour may differ] Note	that source cannot be used from	within
	       macros that execute as folder-hooks or accounts,	i.e., it can
	       only be called from macros that were called.

     source_if
	       [Only new quoting rules]	The difference to source (beside not
	       supporting pipe syntax aka shell	command	input) is that this
	       command will not	generate an error nor warn if the given	file
	       argument	cannot be opened successfully.

     spamclear
	       [Option]	Takes a	list of	messages and clears their `is-spam'
	       flag.

     spamforget
	       [Option]	Takes a	list of	messages and causes the	spam-interface
	       to forget it has	ever used them to train	its Bayesian filter.
	       Unless otherwise	noted the `is-spam' flag of the	message	is in-
	       spected to chose	whether	a message shall	be forgotten to	be
	       "ham" or	"spam".

     spamham   [Option]	Takes a	list of	messages and informs the Bayesian fil-
	       ter of the spam-interface that they are "ham".  This also
	       clears the `is-spam' flag of the	messages in question.

     spamrate  [Option]	Takes a	list of	messages and rates them	using the con-
	       figured spam-interface, without modifying the messages, but
	       setting their `is-spam' flag as appropriate; because the	spam
	       rating headers are lost the rate	will be	forgotten once the
	       mailbox is left.	 Refer to the manual section Handling spam for
	       the complete picture of spam handling in	S-nail.

     spamset   [Option]	Takes a	list of	messages and sets their	`is-spam'
	       flag.

     spamspam  [Option]	Takes a	list of	messages and informs the Bayesian fil-
	       ter of the spam-interface that they are "spam".	This also sets
	       the `is-spam' flag of the messages in question.

     thread    [Obsolete] The same as `sort thread' (consider using a
	       `commandalias' as necessary).

     tls       [Only new quoting rules]	TLS information	and management command
	       multiplexer to aid in Encrypted network communication, mostly
	       available only if the term `+sockets' is	included in features.
	       Commands	support	vput if	so documented (see Command modifiers).
	       The result that is shown	in case	of errors is always the	empty
	       string, errors can be identified	via the	error number !.	 For
	       example,	string length overflows	are caught and set ! to
	       ^ERR-OVERFLOW.  The TLS configuration is	honoured, especially
	       tls-verify.

		     ? vput tls	result fingerprint pop3s://ex.am.ple
		     ? echo $?/$!/$^ERRNAME: $result

	       certchain Show the complete verified peer certificate chain.
			 Includes informational	fields in conjunction with
			 verbose.

	       certificate Show	only the peer certificate, without any sign-
			 ers.  Includes	informational fields in	conjunction
			 with verbose.

	       fingerprint Show	the tls-fingerprint-digested fingerprint of
			 the certificate of the	given HOST (`server:port',
			 where the port	defaults to the	HTTPS port, 443).
			 tls-fingerprint is actively ignored for the runtime
			 of this command.

     Top       Like top	but always uses	the headerpick `type' slot for white-
	       and blacklisting	header fields.

     top       (to) Takes a message list and types out the first toplines
	       lines of	each message on	the user's terminal.  Unless a special
	       selection has been established for the `top' slot of the
	       headerpick command, the only header fields that are displayed
	       are `From:', `To:', `Cc:', and `Subject:'.  Top will always use
	       the `type' headerpick selection instead.	 It is possible	to ap-
	       ply compression to what is displayed by setting topsqueeze.
	       Messages	are decrypted and converted to the terminal character
	       set if necessary.

     touch     (tou) Takes a message list and marks the	messages for saving in
	       the secondary mailbox MBOX.  S-nail deviates from the POSIX
	       standard	with this command, as a	following next command will
	       display the following message instead of	the current one.

     Type      (T) Like	type but also displays header fields which would not
	       pass the	headerpick selection, and all visualizable parts of
	       MIME `multipart/alternative' messages.

     type      (t) Takes a message list	and types out each message on the
	       user's terminal.	 The display of	message	headers	is selectable
	       via headerpick.	For MIME multipart messages, all parts with a
	       content type of `text', all parts which have a registered MIME
	       type handler (see HTML mail and MIME attachments) which pro-
	       duces plain text	output,	and all	`message' parts	are shown,
	       others are hidden except	for their headers.  Messages are de-
	       crypted and converted to	the terminal character set if neces-
	       sary.  The command mimeview can be used to display parts	which
	       are not displayable as plain text.

     unaccount
	       See account.

     unalias   (una) See alias.

     unanswered
	       See answered.

     unbind    See bind.

     uncollapse
	       See collapse.

     uncolour  See colour.

     undefine  See define.

     undelete  See delete.

     undraft   See draft.

     unflag    See flag.

     unfwdignore
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     unfwdretain
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     unignore  Superseded by the multiplexer headerpick.

     unmimetype
	       See mimetype.

     unmlist   See mlist.

     unmlsubscribe
	       See mlsubscribe.

     Unread    Same as unread.

     unread    Takes a message list and	marks each message as not having been
	       read.

     unretain  Superseded by the multiplexer headerpick.

     unsaveignore
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     unsaveretain
	       [Obsolete] Superseded by	the multiplexer	headerpick.

     unset     [Only new quoting rules]	(uns) See set.

     unshortcut
	       See shortcut.

     unsort    See short.

     unthread  [Obsolete] Same as unsort.

     urlcodec  Perform URL percent codec operations on the raw-data argument,
	       rather according	to RFC 3986.  The first	argument specifies the
	       operation: e[ncode] or d[ecode] perform plain URL percent en-
	       and decoding, respectively.  p[ath]enc[ode] and p[ath]dec[ode]
	       perform a slightly modified operation which should be better
	       for pathnames: it does not allow	a tilde	`~', and will neither
	       accept hyphen-minus `-' nor dot `'.  as an initial character.
	       The remains of the line form the	URL data which is to be	con-
	       verted.	This is	a character set	agnostic operation, and	it may
	       thus decode bytes which are invalid in the current ttycharset.

	       Supports	vput (see Command modifiers), and manages the error
	       number !.  If the coding	operation fails	the error number ! is
	       set to ^ERR-CANCELED, and the unmodified	input is used as the
	       result; the error number	may change again due to	output or re-
	       sult storage errors.  [v15 behaviour may	differ]	This command
	       does not	know about URLs	beside what is documented.  (vexpr of-
	       fers a makeprint	subcommand, shall the URL be displayed.)

     varshow   [Only new quoting rules]	This command produces the same output
	       as the listing mode of set, including verboseity	adjustments,
	       but only	for the	given variables.

     verify    [Option]	Takes a	message	list and verifies each message.	 If a
	       message is not a	S/MIME signed message, verification will fail
	       for it.	The verification process checks	if the message was
	       signed using a valid certificate, if the	message	sender's email
	       address matches one of those contained within the certificate,
	       and if the message content has been altered.

     version   Shows the version and features of S-nail, optionally in a more
	       verbose form which also includes	the build and running system
	       environment.  This command supports vput	(see Command
	       modifiers).

     vexpr     [Only new quoting rules]	A multiplexer command which offers
	       signed 64-bit numeric calculations, as well as other, mostly
	       string-based operations.	 C-style byte string operations	are
	       available via csop.  The	first argument defines the number,
	       type, and meaning of the	remaining arguments.  An empty number
	       argument	is treated as 0.  Supports vput	(see Command
	       modifiers).  The	result shown in	case of	errors is `-1' for us-
	       age errors and numeric operations, the empty string otherwise;
	       "soft" errors, like when	a search operation failed, will	also
	       set the ! error number to ^ERR-NODATA.  Except when otherwise
	       noted numeric arguments are parsed as signed 64-bit numbers,
	       and errors will be reported in the error	number ! as the	nu-
	       meric error ^ERR-RANGE.

	       Numeric operations work on one or two signed 64-bit integers.
	       Numbers prefixed	with `0x' or `0X' are interpreted as hexadeci-
	       mal (base 16) numbers, whereas `0' indicates octal (base	8),
	       and `0b'	as well	as `0B'	denote binary (base 2) numbers.	 It is
	       possible	to use any base	in between 2 and 36, inclusive,	with
	       the `BASE#number' notation, where the base is given as an un-
	       signed decimal number, so `16#AFFE' is a	different way of spec-
	       ifying a	hexadecimal number.  Unsigned interpretation of	a num-
	       ber can be enforced by prefixing	an `u' (case-insensitively),
	       as in `u-110'; this is not necessary for	power-of-two bases (2,
	       4, 8, 16	and 32), which will be interpreted as unsigned by de-
	       fault, but it still makes a difference regarding	overflow de-
	       tection and overflow constant.  It is possible to enforce
	       signed interpretation by	(instead) prefixing a `s' (case-insen-
	       sitively).  The number sign notation uses a permissive parse
	       mode and	as such	supports complicated conditions	out of the
	       box:

		     ? wysh set	ifs=:;read i;unset ifs;echo $i;vexpr pb	2 10#$i
			-009
		     <	 -009>
		     0b1001

	       One integer is expected by assignment (equals sign `='),	which
	       does nothing but	parsing	the argument, thus detecting validity
	       and possible overflow conditions, unary not (tilde `~'),	which
	       creates the bitwise complement, and unary plus and minus.  Two
	       integers	are used by addition (plus sign	`+'), subtraction (hy-
	       phen-minus `-'),	multiplication (asterisk `*'), division
	       (solidus	`/') and modulo	(percent sign `%'), as well as for the
	       bitwise operators logical or (vertical bar `|', to be quoted) ,
	       bitwise and (ampersand `&', to be quoted) , bitwise xor (cir-
	       cumflex `^'), the bitwise signed	left- and right	shifts (`<<',
	       `>>'), as well as for the unsigned right	shift `>>>'.

	       Another numeric operation is pbase, which takes a number	base
	       in between 2 and	36, inclusive, and will	act on the second num-
	       ber given just the same as what equals sign `=' does, but the
	       number result will be formatted in the base given, as a signed
	       64-bit number unless unsigned interpretation of the input num-
	       ber had been forced (with an u prefix).

	       Numeric operations support a saturated mode via the question
	       mark `?'	modifier suffix; the keyword `saturated' is optional,
	       `+?', `+?satu', and `+?saturated' are therefore identical.  In
	       saturated mode overflow errors and division and modulo by zero
	       are no longer reported via the exit status, but the result will
	       linger at the minimum or	maximum	possible value,	instead	of
	       overflowing (or trapping).  This	is true	also for the argument
	       parse step.  For	the bitwise shifts, the	saturated maximum is
	       63.  Any	caught overflow	will be	reported via the error number
	       ! as ^ERR-OVERFLOW.

		     ? vput vexpr res -? +1 -9223372036854775808
		     ? echo $?/$!/$^ERRNAME:$res
		     0/75/OVERFLOW:-9223372036854775808

	       Character set agnostic string functions have no notion of lo-
	       cale settings and character sets.

	       date-utc	 Outputs the current date and time in UTC (Coordinated
			 Universal Time) with values named such	that `vput
			 vexpr x date-utc; eval	wysh set $x' creates accessi-
			 ble variables.

	       date-stamp-utc Outputs a	RFC 3339 internet date/time format of
			 UTC.

	       epoch	 The seconds and nanoseconds since the Unix epoch
			 (1970-01-01T00:00:00) named `epoch_sec' and
			 `epoch_nsec' such that	`vput vexpr x epoch; eval wysh
			 set $x' creates accessible variables.

	       file-expand Performs the	usual Filename transformations on its
			 argument.

	       file-stat, file-lstat Perform the usual Filename
			 transformations on the	argument, then call stat(2)
			 and lstat(2), respectively, and output	values such
			 that `vput vexpr x file-stat FILE; eval wysh set $x'
			 creates accessible variables.	The variable `st_type'
			 uses solidus `/' to denote directories, commercial at
			 `@' for links,	number sign `#'	for block devices,
			 percent sign `%' for for character devices, vertical
			 bar `|' for FIFOs, equal sign `=' for sockets,	and
			 the period `.'	for the	rest.

	       random	 Generates a random string of the given	length,	or of
			 PATH_MAX bytes	(a constant from /usr/include) if the
			 value 0 is given; the random string will be base64url
			 encoded according to RFC 4648,	and thus be usable as
			 a (portable) filename.

	       String operations work, sufficient support provided, according
	       to the active user's locale encoding and	character set (see
	       Character sets).	 Where the question mark `?' modifier suffix
	       is supported, a case-insensitive	operation mode is available;
	       the keyword `case' is optional, `regex?'	and `regex?case' are
	       therefore identical.

	       makeprint (One-way) Converts the	argument to something safely
			 printable on the terminal.

	       regex	 [Option] A string operation that will try to match
			 the first argument with the regular expression	given
			 as the	second argument.  `?' modifier suffix is sup-
			 ported.  If the optional third	argument has been
			 given then instead of showing the match offset	a re-
			 placement operation is	performed: the third argument
			 is treated as if specified within dollar-single-quote
			 (see Shell-style argument quoting), and any occur-
			 rence of a positional parameter, for example 0, 1
			 etc. is replaced with the according match group of
			 the regular expression:

			       ? vput vexpr res	regex bananarama \
				   (.*)NanA(.*)	'\${1}au\$2'
			       ? echo $?/$!/$^ERRNAME:$res:
			       1/61/NODATA::
			       ? vput vexpr res	regex?case bananarama \
				   (.*)NanA(.*)	'\${1}uauf\$2'
			       ? echo $?/$!/$^ERRNAME:$res:
			       0/0/NONE:bauauframa:

     vpospar   [Only new quoting rules]	Manage the positional parameter	stack
	       (see 1, #, *, @ as well as shift).  If the first	argument is
	       `clear',	then the positional parameter stack of the current
	       context,	or the global one, if there is none, is	cleared.  If
	       it is `set', then the remaining arguments will be used to
	       (re)create the stack, if	the parameter stack size limit is ex-
	       cessed an ^ERR-OVERFLOW error will occur.

	       If the first argument is	`quote', a round-trip capable repre-
	       sentation of the	stack contents is created, with	each quoted
	       parameter separated from	each other with	the first character of
	       ifs, and	followed by the	first character	of if-ws, if that is
	       not empty and not identical to the first.  If that results in
	       no separation at	all a space character is used.	This mode sup-
	       ports vput (see Command modifiers).  I.e., the subcommands
	       `set' and `quote' can be	used (in conjunction with eval)	to
	       (re)create an argument stack from and to	a single variable
	       losslessly.

		     ? vpospar set hey,	"'you	 ", world!
		     ? echo $#:	<${1}><${2}><${3}>
		     ? vput vpospar x quote
		     ? vpospar clear
		     ? echo $#:	<${1}><${2}><${3}>
		     ? eval vpospar set	${x}
		     ? echo $#:	<${1}><${2}><${3}>

     visual    (v) Takes a message list	and invokes the	VISUAL display editor
	       on each message.	 Modified contents are discarded unless	the
	       writebackedited variable	is set,	and are	not used unless	the
	       mailbox can be written to and the editor	returns	a successful
	       exit status.  edit can be used instead for a less display ori-
	       ented editor.

     write     (w) For conventional messages the body without all headers is
	       written.	 The original message is never marked for deletion in
	       the originating mail folder.  The output	is decrypted and con-
	       verted to its native format as necessary.  If the output	file
	       exists, the text	is appended.  If a message is in MIME multi-
	       part format its first part is written to	the specified file as
	       for conventional	messages, handling of the remains depends on
	       the execution mode.  No special handling	of compressed files is
	       performed.

	       In interactive mode the user is consecutively asked for the
	       filenames of the	processed parts.  For convenience saving of
	       each part may be	skipped	by giving an empty value, the same re-
	       sult as writing it to /dev/null.	 Shell piping the part content
	       by specifying a leading vertical	bar `|'	character for the
	       filename	is supported.  Other user input	undergoes the usual
	       Filename	transformations, including shell pathname wildcard
	       pattern expansions (glob(7)) and	shell variable expansion for
	       the message as such, not	the individual parts, and contents of
	       the destination file are	overwritten if the file	previously ex-
	       isted.  Character set conversion	to ttycharset is performed
	       when saving text	data.

	       [v15 behaviour may differ] In non-interactive mode any part
	       which does not specify a	filename is ignored, and suspicious
	       parts of	filenames of the remaining parts are URL percent en-
	       coded (as via urlcodec) to prevent injection of malicious char-
	       acter sequences,	resulting in a filename	that will be written
	       into the	current	directory.  Existing files will	not be over-
	       written,	instead	the part number	or a dot are appended after a
	       number sign `#' to the name until file creation succeeds	(or
	       fails due to other reasons).

     xcall     [Only new quoting rules]	The sole difference to call is that
	       the new macro is	executed in place of the current one, which
	       will not	regain control:	all resources of the current macro
	       will be released	first.	This implies that any setting covered
	       by localopts will be forgotten and covered variables will be-
	       come cleaned up.	 If this command is not	used from within a
	       called macro it will silently be	(a more	expensive variant of)
	       call.

     xit       (x) A synonym for exit.

     z	       [Only new quoting rules]	S-nail presents	message	headers	in
	       screenfuls as described under the headers command.  Without ar-
	       guments this command scrolls to the next	window of messages,
	       likewise	if the argument	is `+'.	 An argument of	`-' scrolls to
	       the last, `^' scrolls to	the first, and `$' to the last screen
	       of messages.  A number argument prefixed	by `+' or `-' indi-
	       cates that the window is	calculated in relation to the current
	       position, and a number without a	prefix specifies an absolute
	       position.

     Z	       [Only new quoting rules]	Similar	to z, but scrolls to the next
	       or previous window that contains	at least one `new' or flagged
	       message.

COMMAND	ESCAPES
     When composing messages command escapes are available in interactive
     mode, when	explicitly requested via -~, as	well as	in batch mode (-#).
     They perform special functions, like editing headers of the message being
     composed, calling normal COMMANDS,	yielding a shell, etc.	Command	es-
     capes are only recognized at the beginning	of lines, and consist of an
     escape followed by	a command character.  The default escape character is
     the tilde `~'.

     Unless otherwise documented command escapes ensure	proper updates of the
     error number ! and	the exit status	?.  The	variable errexit controls
     whether a failed operation	errors out message compose mode	and causes
     program exit.  Escapes may	be prefixed by none to multiple	single charac-
     ter command modifiers, interspersed whitespace is ignored:

     +o	 An effect equivalent to the command modifier ignerr can be achieved
	 with hyphen-minus `-',	overriding errexit.

     +o	 The modifier dollar `$' evaluates the remains of the line; also see
	 Shell-style argument quoting.	[v15 behaviour may differ] For now the
	 entire	input line is evaluated	as a whole; to avoid that control op-
	 erators like semicolon	; are interpreted unintentionally, they	must
	 be quoted.

     Addition of the command line to the [Option]al history can	be prevented
     by	placing	whitespace directly after escape.  The [Option]al key bindings
     support a compose mode specific context.  The following command escapes
     are supported:

     ~~	string
	       Insert the string of text in the	message	prefaced by a single
	       `~'.  (If the escape character has been changed,	that character
	       must be doubled instead.)

     ~!	command
	       Execute the indicated shell command which follows, replacing
	       unescaped exclamation marks with	the previously executed	com-
	       mand if the internal variable bang is set, then return to the
	       message.

     ~.	       End compose mode	and send the message.  The hooks
	       on-compose-splice-shell and on-compose-splice, in order,	will
	       be called when set, after which,	in interactive mode askatend
	       (leading	to askcc, askbcc) and askattach	will be	checked	as
	       well as asksend,	after which a set on-compose-leave hook	will
	       be called, autocc and autobcc will be joined in if set, finally
	       a given message-inject-tail will	be incorporated, after which
	       the compose mode	is left.

     ~:	S-nail-command or ~_ S-nail-command
	       Can be used to execute COMMANDS (which are allowed in compose
	       mode).

     ~<	filename
	       Identical to ~r.

     ~<! command
	       command is executed using the shell.  Its standard output is
	       inserted	into the message.

     ~?	       [Option]	Write a	summary	of command escapes.

     ~@	[filename...]
	       Append or edit the list of attachments.	Does not manage	the
	       error number ! and the exit status ? (please use	~^ if error
	       handling	is necessary).	The append mode	expects	a list of
	       filename	arguments as shell tokens (see Shell-style argument
	       quoting;	token-separating commas	are ignored, too), to be in-
	       terpreted as documented for the command line option -a, with
	       the message number exception as below.

	       Without filename	arguments the attachment list is edited, entry
	       by entry; if a filename is left empty, that attachment is
	       deleted from the	list; once the end of the list is reached ei-
	       ther new	attachments may	be entered or the session can be quit
	       by committing an	empty "new" attachment.	 In non-interactive
	       mode or in batch	mode (-#) the list of attachments is effec-
	       tively not edited but instead recreated;	again, an empty	input
	       ends list creation.

	       For all modes, if a given filename solely consists of the num-
	       ber sign	`#' followed by	either a valid message number of the
	       currently active	mailbox, or by a period	`.', referring to the
	       current message of the active mailbox, the so-called "dot",
	       then the	given message is attached as a `message/rfc822'	MIME
	       message part.  The number sign must be quoted to	avoid misin-
	       terpretation as a shell comment character.

     ~|	command
	       Pipe the	message	text through the specified filter command.  If
	       the command gives no output or terminates abnormally, retain
	       the original text of the	message.  The command fmt(1) is	often
	       used as a rejustifying filter.

	       If the first character of the command is	a vertical bar,	then
	       the entire message including header fields is subject to	the
	       filter command, so `~|| echo Fcc: /tmp/test; cat' will prepend
	       a file-carbon-copy message header.  Also	see ~e,	~v.

     ~^	cmd [subcmd [arg3 [arg4]]]
	       Low-level compose mode command which shares semantics with
	       digmsg, and therefore evaluates its command line	as documented
	       in Shell-style argument quoting.	 Does not manage the error
	       number !	and the	exit status ?: errors are handled via the pro-
	       tocol, and hard errors like I/O failures	cannot be handled.

	       The protocol consists of	command	lines followed by (a) response
	       line(s).	 The first field of the	response line represents a
	       status code which specifies whether a command was successful or
	       not, whether result data	is to be expected, and if, the format
	       of the result data.  Response data will be shell	quoted as nec-
	       essary for consumption by readsh, or eval and vpospar, to name
	       a few.  Error status code lines may optionally contain addi-
	       tional context:

	       `210'	 Status	ok; the	remains	of the line are	the result.
	       `211'	 Status	ok; the	rest of	the line is optionally used
			 for more status.  What	follows	are lines of result
			 addresses, terminated by an empty line.  All the in-
			 put, including	the empty line,	must be	consumed be-
			 fore further commands can be issued.  Address lines
			 consist of two	token, first the plain network ad-
			 dress,	e.g., `bob@exam.ple', followed by the (quoted)
			 full address as known:	`'(Lovely) Bob
			 <bob@exam.ple>''.  Non-network	addresses use the
			 first field to	indicate the type (hyphen-minus	`-'
			 for files, vertical bar `|' for pipes,	and number
			 sign `#' for names which will undergo alias process-
			 ing) instead, the actual value	will be	in the second
			 field.
	       `212'	 Status	ok; the	rest of	the line is optionally used
			 for more status.  What	follows	are lines of furtherly
			 unspecified (quoted) string content, terminated by an
			 empty line.  All the input, including the empty line,
			 must be consumed before further commands can be is-
			 sued.
	       `500'	 Syntax	error; invalid command.
	       `501'	 Syntax	error in parameters or arguments.
	       `505'	 Error:	an argument fails verification.	 For example
			 an invalid address has	been specified (also see
			 expandaddr), or an attempt was	made to	modify any-
			 thing in S-nail's own namespace, or a modifying sub-
			 command has been used on a read-only message.
	       `506'	 Error:	an otherwise valid argument is rendered	in-
			 valid due to context.	For example, a second address
			 is added to a header which may	consist	of a single
			 address only.

	       If a command indicates failure then the message will have re-
	       mained unmodified.  Most	commands can fail with `500' if	re-
	       quired arguments	are missing, or	excessive arguments have been
	       given (false command usage).  ([v15 behaviour may differ] The
	       latter does not yet occur regulary, because as stated in
	       Shell-style argument quoting our	argument parser	is not yet
	       smart enough to work on subcommand base;	for example one	might
	       get excess argument error for a three argument subcommand that
	       receives	four arguments,	but not	for a four argument subcommand
	       which receives six arguments: here excess will be joined.)  The
	       following (case-insensitive) commands are supported:

	       attachment This command allows listing, removal and addition of
			message	attachments.  The second argument specifies
			the subcommand to apply, one of:

			attribute This uses the	same search mechanism as de-
				  scribed for remove and prints	any known at-
				  tributes of the first	found attachment via
				  `212'	upon success or	`501' if no such at-
				  tachment can be found.  The attributes are
				  written as lines with	a keyword and a	value
				  token.

			attribute-at This uses the same	search mechanism as
				  described for	remove-at and is otherwise
				  identical to attribute.

			attribute-set This uses	the same search	mechanism as
				  described for	remove,	and will set the at-
				  tribute given	as the fourth to the value
				  given	as the fifth token argument.  If the
				  value	is an empty token, then	the given at-
				  tribute is removed, or reset to a default
				  value	if existence of	the attribute is cru-
				  cial.

				  It returns via `210' upon success, with the
				  index	of the found attachment	following,
				  `505'	for message attachments	or if the
				  given	keyword	is invalid, and	`501' if no
				  such attachment can be found.	 The following
				  keywords may be used (case-insensitively):

				  `filename'  Sets the filename	of the MIME
					      part, i.e., the name that	is
					      used for display and when	(sug-
					      gesting a	name for) saving (pur-
					      poses).
				  `content-description'	Associate some de-
					      scriptive	information to the at-
					      tachment's content, used in
					      favour of	the plain filename by
					      some MUAs.
				  `content-id' May be used for uniquely	iden-
					      tifying MIME entities in several
					      contexts;	this expects a special
					      reference	address	format as de-
					      fined in RFC 2045	and generates
					      a	`505' upon address content
					      verification failure.
				  `content-type' Defines the media type/sub-
					      type of the part,	which is man-
					      aged automatically, but can be
					      overwritten.
				  `content-disposition'	Automatically set to
					      the string `attachment'.

			attribute-set-at This uses the same search mechanism
				  as described for remove-at and is otherwise
				  identical to attribute-set.

			insert	  Adds the attachment given as the third argu-
				  ment,	specified exactly as documented	for
				  the command line option -a, and supporting
				  the message number extension as documented
				  for ~@.  This	reports	`210' upon success,
				  with the index of the	new attachment follow-
				  ing, `505' if	the given file cannot be
				  opened, `506'	if an on-the-fly performed
				  character set	conversion fails, otherwise
				  `501'	is reported; this is also reported if
				  character set	conversion is requested	but
				  not available.

			list	  List all attachments via `212', or report
				  `501'	if no attachments exist.  This command
				  is the default command of attachment if no
				  second argument has been given.

			remove	  This will remove the attachment given	as the
				  third	argument, and report `210' upon	suc-
				  cess or `501'	if no such attachment can be
				  found.  If there exists any path component
				  in the given argument, then an exact match
				  of the path which has	been used to create
				  the attachment is used directly, but if only
				  the basename of that path matches then all
				  attachments are traversed to find an exact
				  match	first, and the removal occurs after-
				  wards; if multiple basenames match, a	`506'
				  error	occurs.	 Message attachments are
				  treated as absolute pathnames.

				  If no	path component exists in the given ar-
				  gument, then all attachments will be
				  searched for `filename=' parameter matches
				  as well as for matches of the	basename of
				  the path which has been used when the	at-
				  tachment has been created; multiple matches
				  result in a `506'.

			remove-at This will interpret the third	argument as a
				  number and remove the	attachment at that
				  list position	(counting from one!), report-
				  ing `210' upon success or `505' if the argu-
				  ment is not a	number or `501'	if no such at-
				  tachment exists.

	       header	This command allows listing, inspection, and editing
			of message headers.  Header name case is not normal-
			ized, so that case-insensitive comparison should be
			used when matching names.  The second argument speci-
			fies the subcommand to apply, one of:

			insert	  Create a new or an additional	instance of
				  the header given in the third	argument, with
				  the header body content as given in the
				  fourth token.	 It may	return `501' if	the
				  third	argument specifies a free-form header
				  field	name that is invalid, or if body con-
				  tent extraction fails	to succeed, `505' if
				  any extracted	address	does not pass syntax
				  and/or security checks or on S-nail name-
				  space	violations, and	`506' to indicate pre-
				  vention of excessing a single-instance
				  header -- note that `Subject:' can be	ap-
				  pended to (a space separator will be added
				  automatically	first).	 `To:',	`Cc:' and
				  `Bcc:' support the `?single' modifier	to en-
				  force	treatment as a single addressee, for
				  example `header insert To?single: 'exa,
				  <m@ple>''; the word `single' is optional.

				  `210'	is returned upon success, followed by
				  the name of the header and the list position
				  of the newly inserted	instance.  The list
				  position is always 1 for single-instance
				  header fields.  All free-form	header fields
				  are managed in a single list.

			list	  Without a third argument a list of all yet
				  existing headers is given via	`210'; this
				  command is the default command of header if
				  no second argument has been given.  A	third
				  argument restricts output to the given
				  header only, which may fail with `501' if no
				  such field is	defined.

			remove	  This will remove all instances of the	header
				  given	as the third argument, reporting `210'
				  upon success,	`501' if no such header	can be
				  found, and `505' on S-nail namespace viola-
				  tions.

			remove-at This will remove from	the header given as
				  the third argument the instance at the list
				  position (counting from one!)	given with the
				  fourth argument, reporting `210' upon	suc-
				  cess or `505'	if the list position argument
				  is not a number or on	S-nail namespace vio-
				  lations, and `501' if	no such	header in-
				  stance exists.

			show	  Shows	the content of the header given	as the
				  third	argument.  Dependent on	the header
				  type this may	respond	with `211' or `212';
				  any failure results in `501'.

			In compose-mode	read-only access to optional pseudo
			headers	in the S-nail private namespace	is available:

			`Mailx-Command:'
				  The name of the command that generates the
				  message, one of `forward', `Lreply', `mail',
				  `Reply', `reply', `resend'.  This pseudo
				  header always	exists (in compose-mode).
			`Mailx-Raw-To:'
			`Mailx-Raw-Cc:'
			`Mailx-Raw-Bcc:'
				  Represent the	frozen initial state of	these
				  headers before any transformation (alias,
				  alternates, recipients-in-cc etc.) took
				  place.
			`Mailx-Orig-Sender:'
			`Mailx-Orig-From:'
			`Mailx-Orig-To:'
			`Mailx-Orig-Cc:'
			`Mailx-Orig-Bcc:'
				  The values of	said headers of	the original
				  message which	has been addressed by any of
				  reply, forward, resend.  The sender field is
				  special as it	is filled in with the sole
				  sender according to RFC 5322 rules, it may
				  thus be equal	to the from field.

	       help, ?	Show an	abstract of the	above commands via `211'.

	       version	This command will print	the protocol version via
			`210'.

     ~A	       The same	as `~i Sign'.

     ~a	       The same	as `~i sign'.

     ~b	name ...
	       Add the given names to the list of blind	carbon copy recipi-
	       ents.

     ~c	name ...
	       Add the given names to the list of carbon copy recipients.

     ~d	       Read the	file specified by the DEAD variable into the message.

     ~e	       Invoke the text EDITOR on the message collected so far, then
	       return to compose mode.	~v can be used for a more display ori-
	       ented editor, and ~|| offers a pipe-based editing approach.

     ~F	messages
	       Read the	named messages into the	message	being sent, including
	       all message headers and MIME parts, and honouring
	       forward-add-cc as well as forward-inject-head and
	       forward-inject-tail.  If	no messages are	specified, read	in the
	       current message,	the "dot".

     ~f	messages
	       Read the	named messages into the	message	being sent.  If	no
	       messages	are specified, read in the current message, the	"dot".
	       Strips down the list of header fields according to the
	       `forward' (with posix: `type') white- and blacklist selection
	       of headerpick, and honours forward-add-cc as well as
	       forward-inject-head and forward-inject-tail.  For MIME multi-
	       part messages, only the first displayable part is included.

     ~H	       In interactive mode, edit the message header fields `From:',
	       `Reply-To:' and `Sender:' by typing each	one in turn and	allow-
	       ing the user to edit the	field.	The default values for these
	       fields originate	from the from, reply-to	and sender variables.
	       In non-interactive mode this sets ^ERR-NOTTY.

     ~h	       In interactive mode, edit the message header fields `To:',
	       `Cc:', `Bcc:' and `Subject:' by typing each one in turn and al-
	       lowing the user to edit the field.  In non-interactive mode
	       this sets ^ERR-NOTTY.

     ~I	variable
	       Insert the value	of the specified variable into the message.
	       The message remains unaltered if	the variable is	unset or
	       empty.  Any embedded character sequences	`\t' horizontal	tabu-
	       lator and `\n' line feed	are expanded in	posix mode; otherwise
	       the expansion should occur at set time ([v15 behaviour may dif-
	       fer] by using the command modifier wysh).

     ~i	variable
	       Like ~I,	but appends a newline character.

     ~M	messages
	       Read the	named messages into the	message	being sent, indented
	       by indentprefix.	 If no messages	are specified, read the	cur-
	       rent message, the "dot".	 Honours forward-add-cc	as well	as
	       forward-inject-head and forward-inject-tail.

     ~m	messages
	       Read the	named messages into the	message	being sent, indented
	       by indentprefix.	 If no messages	are specified, read the	cur-
	       rent message, the "dot".	 Strips	down the list of header	fields
	       according to the	`type' white- and blacklist selection of
	       headerpick.  Honours forward-add-cc as well as
	       forward-inject-head and forward-inject-tail.  For MIME multi-
	       part messages, only the first displayable part is included.

     ~p	       Display the message collected so	far, prefaced by the message
	       header fields and followed by the attachment list, if any.

     ~Q	       Read in the given / current message(s) using the	algorithm of
	       quote (except that is implicitly	assumed, even if not set),
	       honouring quote-add-cc.

     ~q	       Abort the message being sent, copying it	to the file specified
	       by the DEAD variable if save is set.

     ~R	filename
	       Identical to ~r,	but indent each	line that has been read	by
	       indentprefix.

     ~r	filename [HERE-delimiter]
	       Read the	named file, object to Filename transformations exclud-
	       ing shell globs and variable expansions,	into the message; if
	       filename	is the hyphen-minus `-'	then standard input is used
	       (for pasting, for example).  Only in this latter	mode
	       HERE-delimiter may be given: if it is data will be read in un-
	       til the given HERE-delimiter is seen on a line by itself, and
	       encountering EOF	is an error; the HERE-delimiter	is a required
	       argument	in non-interactive mode; if it is single-quote quoted
	       then the	pasted content will not	be expanded, [v15 behaviour
	       may differ] otherwise a future version of S-nail	may perform
	       shell-style expansion on	the content.

     ~s	string
	       Cause the named string to become	the current subject field.
	       Newline (NL) and	carriage-return	(CR) bytes are invalid and
	       will be normalized to space (SP)	characters.

     ~t	name ...
	       Add the given name(s) to	the direct recipient list.

     ~U	messages
	       Read in the given / current message(s) excluding	all headers,
	       indented	by indentprefix.  Honours forward-add-cc as well as
	       forward-inject-head and forward-inject-tail.

     ~u	messages
	       Read in the given / current message(s), excluding all headers.
	       Honours forward-add-cc as well as forward-inject-head and
	       forward-inject-tail.

     ~v	       Invoke the VISUAL editor	on the message collected so far, then
	       return to compose mode.	~e can be used for a less display ori-
	       ented editor, and ~|| offers a pipe-based editing approach.

     ~w	filename
	       Write the message onto the named	file, which is object to the
	       usual Filename transformations.	If the file exists, the	mes-
	       sage is appended	to it.

     ~x	       Same as ~q, except that the message is not saved	at all.

INTERNAL VARIABLES
     Internal S-nail variables are controlled via the set and unset commands;
     prefixing a variable name with the	string `no' and	calling	set has	the
     same effect as using unset: `unset	crt' and `set nocrt' do	the same
     thing.  varshow will give more insight on the given variable(s), and set,
     when called without arguments, will show a	listing	of all variables.
     Both commands support a more verbose listing mode.	 Some well-known vari-
     ables will	also become inherited from the program ENVIRONMENT implicitly,
     others can	be imported explicitly with the	command	environ	and henceforth
     share said	properties.

     Two different kinds of internal variables exist, and both of which	can
     also form chains.	There are boolean variables, which can only be in one
     of	the two	states "set" and "unset", and value variables with a(n op-
     tional) string value.  For	the latter proper quoting is necessary upon
     assignment	time, the introduction of the section COMMANDS documents the
     supported quoting rules.

	   ? wysh set one=val\ 1 two="val 2" \
	       three='val "3"' four=$'val \'4\''; \
	       varshow one two three four; \
	       unset one two three four

     Dependent upon the	actual option string values may	become interpreted as
     colour names, command specifications, normal text,	etc.  They may be
     treated as	numbers, in which case decimal values are expected if so docu-
     mented, but otherwise any numeric format and base that is valid and un-
     derstood by the vexpr command may be used,	too.

     There also	exists a special kind of string	value, the "boolean string",
     which must	either be a decimal integer (in	which case `0' is false	and
     `1' and any other value is	true) or any of	the (case-insensitive) strings
     `off', `no', `n' and `false' for a	false boolean and `on',	`yes', `y' and
     `true' for	a true boolean;	a special kind of boolean string is the
     "quadoption": it can optionally be	prefixed with the (case-insensitive)
     term `ask-', as in	`ask-yes'; in interactive mode the user	will be
     prompted, otherwise the actual boolean is used.

     Variable chains extend a plain `variable' with `variable-HOST' and
     `variable-USER@HOST' variants.  Here `HOST' will be converted to all low-
     ercase when looked	up (but	not when the variable is set or	unset!), [Op-
     tion]ally IDNA converted, and indeed means	`server:port' if a `port' had
     been specified in the contextual Uniform Resource Locator URL, see	On URL
     syntax and	credential lookup.  Even though	this mechanism is based	on
     URLs no URL percent encoding may be applied to neither of `USER' nor
     `HOST', variable chains need to be	specified using	raw data; the men-
     tioned section contains examples.	Variables which	support	chains are ex-
     plicitly documented as such, and S-nail treats the	base name of any such
     variable special, meaning that users should not create custom names like
     `variable-xyz' in order to	avoid false classifications and	treatment of
     such variables.

   Initial settings
     The standard POSIX	2008/Cor 2-2016	mandates the following initial vari-
     able settings: noallnet, noappend,	asksub,	noaskbcc, noautoprint, nobang,
     nocmd, nocrt, nodebug, nodot, escape set to `~', noflipr, nofolder,
     header, nohold, noignore, noignoreeof, nokeep, nokeepsave,	nometoo,
     nooutfolder, nopage, prompt set to	`? ', noquiet, norecord, save,
     nosendwait, noshowto, noSign, nosign, toplines set	to `5'.

     However, S-nail has built-in some initial (and some default) settings
     which (may) diverge, others may become adjusted by	one of the Resource
     files.  Displaying	the former is accomplished via set: `$ s-nail -:/ -v
     -Xset -Xx'.  In general this implementation sets (and has extended	the
     meaning of) sendwait, and does not	support	the noonehop variable -	use
     command line options or mta-arguments to pass options through to a	mta.
     The default global	resource file sets, among others, the variables	hold,
     keep and keepsave,	establishes a default headerpick selection etc., and
     should thus be taken into account.

   Variables
     ?	       (Read-only) The exit status of the last command,	or the return
	       value of	the macro called last.	This status has	a meaning in
	       the state machine: in conjunction with errexit any non-0	exit
	       status will cause a program exit, and in	posix mode any error
	       while loading (any of the) resource files will have the same
	       effect.	ignerr,	one of the Command modifiers, can be used to
	       instruct	the state machine to ignore errors.

     !	       (Read-only) The current error number (errno(3)),	which is set
	       after an	error occurred;	it is also available via ^ERR, and the
	       error name and documentation string can be queried via ^ERRNAME
	       and ^ERRDOC.  [v15 behaviour may	differ]	This machinery is new
	       and the error number is only really usable if a command explic-
	       itly states that	it manages the variable	!, for others errno
	       will be used in case of errors, or ^ERR-INVAL if	that is	0: it
	       thus may	or may not reflect the real error.  The	error number
	       may be set with the command return.

     ^	       (Read-only) This	is a multiplexer variable which	performs dy-
	       namic expansion of the requested	state or condition, of which
	       there are:

	       ^ERR, ^ERRDOC, ^ERRNAME
			 The number, documentation, and	name of	the current
			 errno(3), respectively, which is usually set after an
			 error occurred.  The documentation is an [Option],
			 the name is used if not available.  [v15 behaviour
			 may differ] This machinery is new and is usually re-
			 liable	only if	a command explicitly states that it
			 manages the variable !, which is effectively identi-
			 cal to	^ERR.  Each of those variables can be suffixed
			 with a	hyphen minus followed by a name	or number, in
			 which case the	expansion refers to the	given error.
			 Note this is a	direct mapping of (a subset of)	the
			 system	error values:

			       define work {
				 eval echo \$1:	\$^ERR-$1:\
				   \$^ERRNAME-$1: \$^ERRDOC-$1
				 vput vexpr i +	"$1" 1
				 if [ $i -lt 16	]
				   \xcall work $i
				 end
			       }
			       call work 0

	       ^ERRQUEUE-COUNT,	^ERRQUEUE-EXISTS
			 The number of messages	present	in the [Option]al log
			 queue of errors, and a	boolean	which indicates
			 whether the queue is not empty, respectively; both
			 are always 0 unless features indicates	`+errors'.

     *	       (Read-only) Expands all positional parameters (see 1), sepa-
	       rated by	the first character of the value of ifs.  [v15 behav-
	       iour may	differ]	The special semantics of the equally named
	       special parameter of the	sh(1) are not yet supported.

     @	       (Read-only) Expands all positional parameters (see 1), sepa-
	       rated by	a space	character.  If placed in double	quotation
	       marks, each positional parameter	is properly quoted to expand
	       to a single parameter again.

     #	       (Read-only) Expands to the number of positional parameters,
	       i.e., the size of the positional	parameter stack	in decimal.

     0	       (Read-only) Inside the scope of a defined and called macro this
	       expands to the name of the calling macro, or to the empty
	       string if the macro is running from top-level.  For the [Op-
	       tion]al regular expression search and replace operator of vexpr
	       this expands to the entire matching expression.	It represents
	       the program name	in global context.

     1	       (Read-only) Access of the positional parameter stack.  All fur-
	       ther parameters can be accessed with this syntax, too, `2', `3'
	       etc.; positional	parameters can be shifted off the stack	by
	       calling shift.  The parameter stack contains, for example, the
	       arguments of a called defined macro, the	matching groups	of the
	       [Option]al regular expression search and	replace	expression of
	       vexpr, and can be explicitly created or overwritten with	the
	       command vpospar.

     account   (Read-only) Is set to the active	account.

     add-file-recipients
	       (Boolean) When file or pipe recipients have been	specified,
	       mention them in the corresponding address fields	of the message
	       instead of silently stripping them from their recipient list.
	       By default such addressees are not mentioned.

     allnet    (Boolean) Causes	only the local part to be evaluated when com-
	       paring addresses.

     append    (Boolean) Causes	messages saved in the secondary	mailbox	MBOX
	       to be appended to the end rather	than prepended.	 This should
	       always be set.

     askatend  (Boolean) Causes	the prompts for	`Cc:' and `Bcc:' lists to ap-
	       pear after the message has been edited.

     askattach
	       (Boolean) If set, S-nail	asks an	interactive user for files to
	       attach at the end of each message; An empty line	finalizes the
	       list.

     askcc     (Boolean) Causes	the interactive	user to	be prompted for	carbon
	       copy recipients (at the end of each message if askatend or
	       bsdcompat are set).

     askbcc    (Boolean) Causes	the interactive	user to	be prompted for	blind
	       carbon copy recipients (at the end of each message if askatend
	       or bsdcompat are	set).

     asksend   (Boolean) Causes	the interactive	user to	be prompted for	con-
	       firmation to send the message or	reenter	compose	mode after
	       having been shown an envelope summary.  This is by default en-
	       abled.

     asksign   (Boolean)[Option] Causes	the interactive	user to	be prompted if
	       the message is to be signed at the end of each message.	The
	       smime-sign variable is ignored when this	variable is set.

     asksub    (Boolean) Causes	S-nail to prompt the interactive user for the
	       subject upon entering compose mode unless a subject already ex-
	       ists.

     attrlist  A sequence of characters	to display in the `attribute' column
	       of the headline as shown	in the display of headers; each	for
	       one type	of messages (see Message states), with the default be-
	       ing `NUROSPMFAT+-$~' or `NU  *HMFAT+-$~'	if the bsdflags	vari-
	       able is set, in the following order:

	       `N'	 new.
	       `U'	 unread	but old.
	       `R'	 new but read.
	       `O'	 read and old.
	       `S'	 saved.
	       `P'	 preserved.
	       `M'	 mboxed.
	       `F'	 flagged.
	       `A'	 answered.
	       `T'	 draft.
	       `+'	 [v15 behaviour	may differ] start of a (collapsed)
			 thread	in threaded mode (see autosort,	thread);
	       `-'	 [v15 behaviour	may differ] an uncollapsed thread in
			 threaded mode;	only used in conjunction with -L.
	       `$'	 classified as spam.
	       `~'	 classified as possible	spam.

     autobcc   Specifies a list	of recipients to which a blind carbon copy of
	       each outgoing message will be sent automatically.

     autocc    Specifies a list	of recipients to which a carbon	copy of	each
	       outgoing	message	will be	sent automatically.

     autocollapse
	       (Boolean) Causes	threads	to be collapsed	automatically when .Ql
	       thread Ns ed sort mode is entered (see the collapse command).

     autoprint
	       (Boolean) Enable	automatic typeing of a(n existing)
	       "successive" message after delete and undelete commands:	the
	       message that becomes the	new "dot" is shown automatically, as
	       via dp or dt.

     autosort  Causes sorted mode (see the sort	command) to be entered auto-
	       matically with the value	of this	variable as sorting method
	       when a folder is	opened,	for example `set autosort=thread'.

     bang      (Boolean) Enables the substitution of all not (reverse-solidus)
	       escaped exclamation mark	`!' characters by the contents of the
	       last executed command for the ! shell escape command and	~!,
	       one of the compose mode COMMAND ESCAPES.	 If this variable is
	       not set no reverse solidus stripping is performed.

     bind-timeout
	       [Obsolete] Predecessor of bind-inter-byte-timeout.  [v15	behav-
	       iour may	differ]	Setting	this automatically sets	the successor.

     bind-inter-byte-timeout
	       [Option]	Terminals may generate multi-byte sequences for	spe-
	       cial function keys, for example,	but these sequences may	not
	       become read as a	unit.  And multi-byte sequences	can be defined
	       freely via bind.	 This variable specifies the timeout in	mil-
	       liseconds that the MLE (see On terminal control and line
	       editor) waits for more bytes to arrive unless it	considers a
	       sequence	"complete".  The default is 200, the maximum is	about
	       10 seconds.  In the following example the comments state	which
	       sequences are affected by this timeout:

		     ? bind base abc echo 0 # abc
		     ? bind base ab,c echo 1 # ab
		     ? bind base abc,d echo 2 #	abc
		     ? bind base ac,d echo 3 # ac
		     ? bind base a,b,c echo 4
		     ? bind base a,b,c,d echo 5
		     ? bind base a,b,cc,dd echo	6 # cc and dd

     bind-inter-key-timeout
	       [Option]	Multi-key bind sequences do not	time out by default.
	       If this variable	is set,	then the current key sequence is
	       forcefully terminated once the timeout (in milliseconds)	trig-
	       gers.  The value	should be (maybe significantly)	larger than
	       bind-inter-byte-timeout,	but may	not excess the maximum,	too.

     bsdcompat
	       (Boolean) Sets some cosmetical features to traditional BSD
	       style; has the same affect as setting askatend and all other
	       variables prefixed with `bsd'; it also changes the behaviour of
	       emptystart (which does not exist	in BSD).

     bsdflags  (Boolean) Changes the letters shown in the first	column of a
	       header summary to traditional BSD style.

     bsdheadline
	       (Boolean) Changes the display of	columns	in a header summary to
	       traditional BSD style.

     bsdmsgs   (Boolean) Changes some informational messages to	traditional
	       BSD style.

     bsdorder  (Boolean) Causes	the `Subject:' field to	appear immediately af-
	       ter the `To:' field in message headers and with the ~h COMMAND
	       ESCAPES.

     build-cc, build-ld, build-os, build-rest
	       (Read-only) The build environment, including the	compiler, the
	       linker, the operating system S-nail has been build for, usually
	       taken from uname(1) via `uname -s', and then lowercased,	as
	       well as all the possibly	interesting rest of the	configuration
	       and build environment.  This information	is also	available in
	       the verbose output of the command version.

     charset-7bit
	       The value that should appear in the `charset=' parameter	of
	       `Content-Type:' MIME header fields when no character set	con-
	       version of the message data was performed.  This	defaults to
	       US-ASCII, and the chosen	character set should be	US-ASCII com-
	       patible.

     charset-8bit
	       [Option]	The default 8-bit character set	that is	used as	an im-
	       plicit last member of the variable sendcharsets.	 This defaults
	       to UTF-8	if character set conversion capabilities are avail-
	       able, and to ISO-8859-1 otherwise (unless the operating system
	       environment is known to always and exclusively support UTF-8
	       locales), in which case the only	supported character set	is
	       ttycharset and this variable is effectively ignored.

     charset-unknown-8bit
	       [Option]	RFC 1428 specifies conditions when internet mail gate-
	       ways shall "upgrade" the	content	of a mail message by using a
	       character set with the name `unknown-8bit'.  Because of the un-
	       classified nature of this character set S-nail will not be ca-
	       pable to	convert	this character set to any other	character set.
	       If this variable	is set any message part	which uses the charac-
	       ter set `unknown-8bit' is assumed to really be in the character
	       set given in the	value, otherwise the (final) value of
	       charset-8bit is used for	this purpose.

	       This variable will also be taken	into account if	a MIME type
	       (see The	mime.types files) of a MIME message part that uses the
	       `binary'	character set is forcefully treated as text.

     cmd       The default value for the pipe command.

     colour-disable
	       (Boolean)[Option] Forcefully disable usage of colours.  Also
	       see the section Coloured	display.

     colour-pager
	       (Boolean)[Option] Whether colour	shall be used for output that
	       is paged	through	PAGER.	Note that pagers may need special com-
	       mand line options, for example less(1) requires the option -R
	       and lv(1) the option -c in order	to support colours.  Often do-
	       ing manual adjustments is unnecessary since S-nail may perform
	       adjustments dependent on	the value of the environment variable
	       PAGER (see there	for more).

     contact-mail, contact-web
	       (Read-only) Addresses for contact per email and web, respec-
	       tively, for bug reports,	suggestions, or	anything else regard-
	       ing S-nail.  The	former can be used directly: `?	eval mail
	       $contact-mail'.

     content-description-forwarded-message,
	       content-description-quote-attachment,
	       content-description-smime-message,
	       content-description-smime-signature
	       [Option](partially) Strings which will be placed	in according
	       `Content-Description:' headers if non-empty.  They all have de-
	       fault values, for example `Forwarded message'.

     crt       In a(n interactive) terminal session, then if this valued vari-
	       able is set it will be used as a	threshold to determine how
	       many lines the given output has to span before it will be dis-
	       played via the configured PAGER;	Usage of the PAGER can be
	       forced by setting this to the value `0',	setting	it without a
	       value will deduce the current height of the terminal screen to
	       compute the threshold (see LINES, screen	and stty(1)).  [v15
	       behaviour may differ] At	the moment this	uses the count of
	       lines of	the message in wire format, which, dependent on	the
	       mime-encoding of	the message, is	unrelated to the number	of
	       display lines.  (The software is	old and	historically the rela-
	       tion was	a given	thing.)

     customhdr
	       Define a	set of custom headers to be injected into newly	com-
	       posed or	forwarded messages.  A custom header consists of the
	       field name followed by a	colon `:' and the field	content	body.
	       Standard	header field names cannot be overwritten by a custom
	       header.	Different to the command line option -C	the variable
	       value is	interpreted as a comma-separated list of custom	head-
	       ers: to include commas in header	bodies they need to become es-
	       caped with reverse solidus `\'.	Headers	can be managed more
	       freely in compose mode via ~^.

		     ? set customhdr='Hdr1: Body1-1\, Body1-2, Hdr2: Body2'

     datefield
	       Controls	the appearance of the `%d' date	and time format	speci-
	       fication	of the headline	variable, that is used,	for example,
	       when viewing the	summary	of headers.  If	unset, then the	local
	       receiving date is used and displayed unformatted, otherwise the
	       message sending `Date:'.	 It is possible	to assign a
	       strftime(3) format string and control formatting, but embedding
	       newlines	via the	`%n' format is not supported, and will result
	       in display errors.  The default is `%Y-%m-%d %H:%M', and	also
	       see datefield-markout-older.

     datefield-markout-older
	       Only used in conjunction	with datefield.	 Can be	used to	create
	       a visible distinction of	messages dated more than a day in the
	       future, or older	than six months, a concept comparable to the
	       -l option of the	POSIX utility ls(1).  If set to	the empty
	       string, then the	plain month, day and year of the `Date:' will
	       be displayed, but a strftime(3) format string to	control	for-
	       matting can be assigned.	 The default is	`%Y-%m-%d'.

     debug     (Boolean) (Almost) Enter	a debug-only sandbox mode which	gener-
	       ates many log messages, disables	the actual delivery of mes-
	       sages, and also implies norecord	as well	as nosave.  Also see
	       verbose.

     disposition-notification-send
	       (Boolean)[Option] Emit a	`Disposition-Notification-To:' header
	       (RFC 3798) with the message.  This requires the from variable
	       to be set.

     dot       (Boolean) When dot is set, a period `.' on a line by itself
	       during message input in (interactive or batch -#) compose mode
	       will be treated as end-of-message (in addition to the normal
	       end-of-file condition).	This behaviour is implied in posix
	       mode with a set ignoreeof.

     dotlock-disable
	       (Boolean)[Option] Disable creation of dotlock files for MBOX
	       databases.

     dotlock-ignore-error
	       [Obsolete](Boolean)[Option] Ignore failures when	creating
	       dotlock files.  Please use dotlock-disable instead.

     editalong
	       If this variable	is set then the	editor is started automati-
	       cally when a message is composed	in interactive mode.  If the
	       value starts with the letter `v'	then this acts as if ~v, oth-
	       erwise as if ~e (see COMMAND ESCAPES) had been specified.  The
	       editheaders variable is implied for this	automatically spawned
	       editor session.

     editheaders
	       (Boolean) When a	message	is edited while	being composed,	its
	       header is included in the editable text.

     emptystart
	       (Boolean) When entering interactive mode	S-nail normally	writes
	       "No mail	for user" and exits immediately	if a mailbox is	empty
	       or does not exist.  If this variable is set S-nail starts even
	       with an empty or	non-existent mailbox (the latter behaviour
	       furtherly depends upon bsdcompat, though).

     errexit   (Boolean) Let each command with a non-0 exit status, including
	       every called macro which	returns	a non-0	status,	cause a	pro-
	       gram exit unless	prefixed by ignerr (see	Command	modifiers).
	       This also affects COMMAND ESCAPES, but which use	a different
	       modifier	for ignoring the error.	 Please	refer to the variable
	       ? for more on this topic.

     escape    The first character of this value defines the escape character
	       for COMMAND ESCAPES in compose mode.  The default value is the
	       character tilde `~'.  If	set to the empty string, command es-
	       capes are disabled.

     expandaddr
	       If unset	then file and command pipeline address targets are not
	       allowed,	and any	such address will be filtered out, giving a
	       warning message.	 If set	then all possible recipient address
	       specifications will be accepted,	unless the optional value is
	       more specific (also see On sending mail,	and non-interactive
	       mode).  If the value contains `restrict'	then behaviour equals
	       the former unless in interactive	mode, or when tilde commands
	       were enabled explicitly via -~ or -#, in	which case it equals
	       the latter, and thus allows all addressees.  `restrict' really
	       acts like `restrict,-all,+name,+addr', so care for ordering is-
	       sues must be taken.

	       Indeed the value	is interpreted as a comma-separated list of
	       case-insensitive	strings.  Hard send errors can be enforced for
	       disallowed address types	by setting `fail'; by default these
	       are only	filtered out.  User name receivers addressing valid
	       local users can be expanded to a	network	address	(also see
	       hostname) by setting `nametoaddr'.  Address targets can be
	       added and removed with a	plus sign `+' or hyphen-minus `-' pre-
	       fix, respectively: the value `all' addresses all	possible spec-
	       ifications, `fcc' whitelists targets specified via `Fcc:' head-
	       ers regardless of other settings, `file'	file targets (it in-
	       cludes `fcc'), `pipe' command pipeline targets, `name' plain
	       user names left for further expansion by	the MTA	(implicitly
	       disallowed for the SMTP based mta), and `addr' network ad-
	       dresses.	 Targets are interpreted in the	given order, so	that
	       `restrict,fail,+file,-all,+addr'	will cause hard	errors for any
	       non-network address recipient address unless running interac-
	       tively or having	been started with the option -~	or -#; in the
	       latter case(s) any address may be used, then.

	       Historically invalid network addressees were silently stripped
	       off -- shall they cause hard errors instead it must be ensured
	       that `failinvaddr' is an	entry of the list (it really acts like
	       `failinvaddr,+addr').  Likewise,	`domaincheck' (actually
	       `domaincheck,+addr') compares address domain names against a
	       whitelist and strips off	(`fail'	for hard errors) addressees
	       which fail this test; the domain	name `localhost' and the non-
	       empty value of hostname (the real hostname otherwise) are al-
	       ways whitelisted, expandaddr-domaincheck	can be set to extend
	       this list.  Finally some	address	providers (for example -b, -c
	       and all other command line recipients) will be evaluated	as if
	       specified within	dollar-single-quotes (see Shell-style argument
	       quoting)	if the value list contains the string `shquote'.

     expandaddr-domaincheck
	       Can be set to a comma-separated list of domain names which
	       should be whitelisted for the evaluation	of the `domaincheck'
	       mode of expandaddr.  IDNA encoding is not automatically per-
	       formed, addrcodec can be	used to	prepare	the domain (of an ad-
	       dress).

     expandargv
	       Unless this variable is set additional mta (Mail-Transfer-
	       Agent) arguments	from the command line, as can be given after a
	       -- separator, results in	a program termination with failure
	       status.	The same can be	accomplished by	using the special
	       (case-insensitive) value	`fail'.	 A lesser strict variant is
	       the otherwise identical `restrict', which does accept such ar-
	       guments in interactive mode, or if tilde	commands were enabled
	       explicitly by using one of the command line options -~ or -#.
	       The empty value will allow unconditional	usage.

     features  (Read-only) String giving a list	of optional features.  Fea-
	       tures are preceded with a plus sign `+' if they are available,
	       with a hyphen-minus `-' otherwise.  To ease substring matching
	       the string starts and ends with a comma.	 The output of the
	       command version includes	this information in a more pleasant
	       output.

     flipr     (Boolean) This setting reverses the meanings of a set of	reply
	       commands, turning the lowercase variants, which by default ad-
	       dress all recipients included in	the header of a	message
	       (reply, respond,	followup) into the uppercase variants, which
	       by default address the sender only (Reply, Respond, Followup)
	       and vice	versa.

     folder    The default path	under which mailboxes are to be	saved: file-
	       names that begin	with the plus sign `+' will have the plus sign
	       replaced	with the value of this variable	if set,	otherwise the
	       plus sign will remain unchanged when doing Filename
	       transformations;	also see folder	for more on this topic,	and
	       know about standard imposed implications	of outfolder.  The
	       value supports a	subset of transformations itself, and if the
	       non-empty value does not	start with a solidus `/', then the
	       value of	HOME will be prefixed automatically.  Once the actual
	       value is	evaluated first, the internal variable folder-resolved
	       will be updated for caching purposes.

     folder-hook-FOLDER, folder-hook
	       Names a defined macro which will	be called whenever a folder is
	       opened.	The macro will also be invoked when new	mail arrives,
	       but message lists for commands executed from the	macro only in-
	       clude newly arrived messages then.  localopts are activated by
	       default in a folder hook, causing the covered settings to be
	       reverted	once the folder	is left	again.

	       The specialized form will override the generic one if `FOLDER'
	       matches the file	that is	opened.	 Unlike	other folder specifi-
	       cations,	the fully expanded name	of a folder, without metachar-
	       acters, is used to avoid	ambiguities.  However, if the mailbox
	       resides under folder then the usual `+' specification is	tried
	       in addition, so that if folder is "mail"	(and thus relative to
	       the user's home directory) then /home/usr1/mail/sent will be
	       tried as	`folder-hook-/home/usr1/mail/sent' first, but then
	       followed	by `folder-hook-+sent'.

     folder-resolved
	       (Read-only) Set to the fully resolved path of folder once that
	       evaluation has occurred;	rather internal.

     followup-to
	       (Boolean) Controls whether a `Mail-Followup-To:'	header is gen-
	       erated when sending messages to known mailing lists.  The user
	       as determined via from (or, if that contains multiple ad-
	       dresses,	sender)	will be	placed in there	if any list addressee
	       is not a	subscribed list.  Also see followup-to-honour and the
	       commands	mlist, mlsubscribe, reply and Lreply.

     followup-to-add-cc
	       (Boolean) Controls whether the user will	be added to the	mes-
	       sages' `Cc:' list in addition to	placing	an entry in
	       `Mail-Followup-To:' (see	followup-to).

     followup-to-honour
	       Controls	whether	a `Mail-Followup-To:' header is	honoured when
	       group-replying to a message via reply or	Lreply.	 This is a
	       quadoption; if set without a value it defaults to "yes",	and
	       see followup-to.

     forward-add-cc
	       (Boolean) Whether the sender of a message quoted	via ~Q shall
	       be added	to the messages' `Cc:' list.

     forward-as-attachment
	       (Boolean) Original messages are normally	sent as	inline text
	       with the	forward	command, and only the first part of a multi-
	       part message is included.  With this setting enabled messages
	       are sent	as unmodified MIME `message/rfc822' attachments	with
	       all of their parts included.

     forward-inject-head, forward-inject-tail
	       The strings to put before and after the text of a message with
	       the forward command, respectively.  The former defaults to
	       `-------- Original Message --------\n'.	Special	format direc-
	       tives in	these strings will be expanded if possible, and	if so
	       configured the output will be folded according to quote-fold;
	       for more	please refer to	quote-inject-head.  Injections will
	       not be performed	by forward if the variable
	       forward-as-attachment is	set -- the COMMAND ESCAPES ~F, ~f, ~M,
	       ~m, ~U, ~u always inject.

     from      The address (or a list of addresses) to put into	the `From:'
	       field of	the message header, quoting RFC	5322: the author(s) of
	       the message, that is, the mailbox(es) of	the person(s) or sys-
	       tem(s) responsible for the writing of the message.  According
	       to that RFC setting the sender variable is required if from
	       contains	more than one address.	[v15 behaviour may differ]
	       Please expect automatic management of the from and sender rela-
	       tionship.  Dependent on the context these addresses are handled
	       as if they were in the list of alternates.

	       If a file-based MTA is used, then from (or, if that contains
	       multiple	addresses, sender) can nonetheless be used as the en-
	       velope sender address at	the MTA	protocol level (the RFC	5321
	       reverse-path), either via the -r	command	line option (without
	       argument; see there for more), or by setting r-option-implicit.

	       If the machine's	hostname is not	valid at the Internet (for ex-
	       ample at	a dialup machine), then	either this variable or
	       hostname	([v15-compat] a	SMTP-based mta adds even more fine-
	       tuning capabilities with	smtp-hostname) have to be set: if so
	       the message and MIME part related unique	ID fields
	       `Message-ID:' and `Content-ID:' will be created (except when
	       disallowed by message-id-disable	or stealthmua).

     fullnames
	       (Boolean) Due to	historical reasons comments and	name parts of
	       email addresses are removed by default when sending mail, re-
	       plying to or forwarding a message.  If this variable is set
	       such stripping is not performed.

     fwdheading
	       [Obsolete] Predecessor of forward-inject-head.

     header    (Boolean) Causes	the header summary to be written at startup
	       and after commands that affect the number of messages or	the
	       order of	messages in the	current	folder.	 Unless	in posix mode
	       a header	summary	will also be displayed on folder changes.  The
	       command line option -N can be used to set noheader.

     headline  A format	string to use for the summary of headers.  Format
	       specifiers in the given string start with a percent sign	`%'
	       and may be followed by an optional decimal number indicating
	       the field width -- if that is negative, the field is to be
	       left-aligned.  Names and	addresses are subject to modifications
	       according to showname and showto.  Valid	format specifiers are:

	       `%%'	 A plain percent sign.
	       `%>'	 "Dotmark": a space character but for the current mes-
			 sage ("dot"), for which it expands to `>' (dependent
			 on headline-plain).
	       `%<'	 "Dotmark": a space character but for the current mes-
			 sage ("dot"), for which it expands to `<' (dependent
			 on headline-plain).
	       `%$'	 [Option] The spam score of the	message, as has	been
			 classified via	the command spamrate.  Shows only a
			 replacement character if there	is no spam support.
	       `%a'	 Message attribute character (status flag); the	actual
			 content can be	adjusted by setting attrlist.
	       `%d'	 The date found	in the `Date:' header of the message
			 when datefield	is set (the default), otherwise	the
			 date when the message was received.  Formatting can
			 be controlled by assigning a strftime(3) format
			 string	to datefield (and datefield-markout-older).
	       `%e'	 The indenting level in	`thread'ed sort	mode.
	       `%f'	 The address of	the message sender.
	       `%i'	 The message thread tree structure.  (Note that	this
			 format	does not support a field width,	and honours
			 headline-plain.)
	       `%L'	 Mailing list status: is the addressee of the message
			 a known `l' (mlist) or	`L' mlsubscribed mailing list?
			 The letter `P'	announces the presence of a RFC	2369
			 `List-Post:' header, which makes a message a valuable
			 target	of Lreply.
	       `%l'	 The number of lines of	the message, if	available.
	       `%m'	 Message number.
	       `%o'	 The number of octets (bytes) in the message, if
			 available.
	       `%S'	 Message subject (if any) in double quotes.
	       `%s'	 Message subject (if any).
	       `%t'	 The position in threaded/sorted order.
	       `%U'	 The value 0 except in an IMAP mailbox,	where it ex-
			 pands to the UID of the message.

	       The default is `%>%a%m %-18f %16d %4l/%-5o %i%-s', or
	       `%>%a%m %20-f  %16d %3l/%-5o %i%-S' if bsdcompat	is set.	 Also
	       see attrlist, headline-plain and	headline-bidi.

     headline-bidi
	       Bidirectional text requires special treatment when displaying
	       headers,	because	numbers	(in dates or for file sizes etc.) will
	       not affect the current text direction, in effect	resulting in
	       ugly line layouts when arabic or	other right-to-left text is to
	       be displayed.  On the other hand	only a minority	of terminals
	       is capable to correctly handle direction	changes, so that user
	       interaction is necessary	for acceptable results.	 Note that ex-
	       tended host system support is required nonetheless, e.g., de-
	       tection of the terminal character set is	one precondition; and
	       this feature only works in an Unicode (i.e., UTF-8) locale.

	       In general setting this variable	will cause S-nail to encapsu-
	       late text fields	that may occur when displaying headline	(and
	       some other fields, like dynamic expansions in prompt) with spe-
	       cial Unicode control sequences; it is possible to fine-tune the
	       terminal	support	level by assigning a value: no value (or any
	       value other than	`1', `2' and `3') will make S-nail assume that
	       the terminal is capable to properly deal	with Unicode version
	       6.3, in which case text is embedded in a	pair of	U+2068 (FIRST
	       STRONG ISOLATE) and U+2069 (POP DIRECTIONAL ISOLATE) charac-
	       ters.  In addition no space on the line is reserved for these
	       characters.

	       Weaker support is chosen	by using the value `1' (Unicode	6.3,
	       but reserve the room of two spaces for writing the control se-
	       quences onto the	line).	The values `2' and `3' select Unicode
	       1.1 support (U+200E, LEFT-TO-RIGHT MARK); the latter again re-
	       serves room for two spaces in addition.

     headline-plain
	       (Boolean) On Unicode (UTF-8) aware terminals enhanced graphical
	       symbols are used	by default for certain entries of headline.
	       If this variable	is set only basic US-ASCII symbols will	be
	       used.

     history-file
	       [Option]	The (expandable) location of a permanent history file
	       for the MLE line	editor (On terminal control and	line editor).
	       Also see	history-size.

     history-gabby
	       [Option]	Add more entries to the	MLE history as is normally
	       done.  A	comma-separated	list of	case-insensitive strings can
	       be used to fine-tune which gabby	entries	shall be allowed.  If
	       it contains `errors', erroneous commands	will also be added.
	       `all' adds all optional entries,	and is the fallback chattiness
	       identifier of on-history-addition.

     history-gabby-persist
	       (Boolean)[Option] The history-gabby entries will	not be saved
	       in persistent storage unless this variable is set.  The knowl-
	       edge of whether a persistent entry was gabby is not lost.  Also
	       see history-file.

     history-size
	       [Option]	Setting	this variable imposes a	limit on the number of
	       concurrent history entries.  If set to the value	0 then no fur-
	       ther history entries will be added, and loading and incorpora-
	       tion of the history-file	upon program startup can also be sup-
	       pressed by doing	this.  Runtime changes will not	be reflected
	       before the history is saved or loaded (again).

     hold      (Boolean) This setting controls whether messages	are held in
	       the system inbox, and it	is set by default.

     hostname  Used instead of the value obtained from uname(3)	and
	       getaddrinfo(3) as the hostname when expanding local addresses,
	       for example in `From:' (also see	On sending mail, and non-
	       interactive mode, for expansion of addresses that have a	valid
	       user-, but no domain name in angle brackets).  If either	of
	       from or this variable is	set the	message	and MIME part related
	       unique ID fields	`Message-ID:' and `Content-ID:'	will be	cre-
	       ated (except when disallowed by message-id-disable or
	       stealthmua).  If	the [Option]al IDNA support is available (see
	       idna-disable) variable assignment is aborted when a necessary
	       conversion fails.

	       Setting it to the empty string will cause the normal hostname
	       to be used, but nonetheless enables creation of said ID fields.
	       [v15-compat] in conjunction with	the built-in SMTP mta
	       smtp-hostname also influences the results: one should produce
	       some test messages with the desired combination of hostname,
	       and/or from, sender etc.	first.

     idna-disable
	       (Boolean)[Option] Can be	used to	turn off the automatic conver-
	       sion of domain names according to the rules of IDNA (interna-
	       tionalized domain names for applications).  Since the IDNA code
	       assumes that domain names are specified with the	ttycharset
	       character set, an UTF-8 locale charset is required to represent
	       all possible international domain names (before conversion,
	       that is).

     ifs       The input field separator that is used ([v15 behaviour may dif-
	       fer] by some functions) to determine where to split input data.

	       1.	 Unsetting is treated as assigning the default value,
			 ` \t\n'.
	       2.	 If set	to the empty value, no field splitting will be
			 performed.
	       3.	 If set	to a non-empty value, all whitespace charac-
			 ters are extracted and	assigned to the	variable
			 ifs-ws.

	       a.	 ifs-ws	will be	ignored	at the beginning and end of
			 input.	 Diverging from	POSIX shells default white-
			 space is removed in addition, which is	owed to	the
			 entirely different line content extraction rules.
	       b.	 Each occurrence of a character	of ifs will cause
			 field-splitting, any adjacent ifs-ws characters will
			 be skipped.

     ifs-ws    (Read-only) Automatically deduced from the whitespace charac-
	       ters in ifs.

     ignore    (Boolean) Ignore	interrupt signals from the terminal while en-
	       tering messages;	instead	echo them as `@' characters and	dis-
	       card the	current	line.

     ignoreeof
	       (Boolean) Ignore	end-of-file conditions (`control-D') in	com-
	       pose mode on message input and in interactive command input.
	       If set an interactive command input session can only be left by
	       explicitly using	one of the commands exit and quit, and message
	       input in	compose	mode can only be terminated by entering	a pe-
	       riod `.'	on a line by itself or by using	the ~. COMMAND
	       ESCAPES;	Setting	this implies the behaviour that	dot describes
	       in posix	mode.

     inbox     If this is set to a non-empty string it will specify the	user's
	       primary system mailbox, overriding MAIL and the system-depen-
	       dent default, and (thus)	be used	to replace `%' when doing
	       Filename	transformations; also see folder for more on this
	       topic.  The value supports a subset of transformations itself.

     indentprefix
	       String used by the ~m, ~M and ~R	COMMAND	ESCAPES	and by the
	       quote option for	indenting messages, in place of	the POSIX man-
	       dated default tabulator character `\t'.	Also see quote-chars.

     keep      (Boolean) If set, an empty primary system mailbox file is not
	       removed.	 Note that, in conjunction with	posix mode any empty
	       file will be removed unless this	variable is set.  This may im-
	       prove the interoperability with other mail user agents when us-
	       ing a common folder directory, and prevents malicious users
	       from creating fake mailboxes in a world-writable	spool direc-
	       tory.  [v15 behaviour may differ] Only local regular (MBOX)
	       files are covered, Maildir and other mailbox types will never
	       be removed, even	if empty.

     keep-content-length
	       (Boolean) When (editing messages	and) writing MBOX mailbox
	       files S-nail can	be told	to keep	the `Content-Length:' and
	       `Lines:'	header fields that some	MUAs generate by setting this
	       variable.  Since	S-nail does neither use	nor update these non-
	       standardized header fields (which in itself shows one of	their
	       conceptual problems), stripping them should increase interoper-
	       ability in between MUAs that work with with same	mailbox	files.
	       Note that, if this is not set but writebackedited, as below,
	       is, a possibly performed	automatic stripping of these header
	       fields already marks the	message	as being modified.  [v15 be-
	       haviour may differ] At some future time S-nail will be capable
	       to rewrite and apply an mime-encoding to	modified messages, and
	       then those fields will be stripped silently.

     keepsave  (Boolean) When a	message	is saved it is usually discarded from
	       the originating folder when S-nail is quit.  This setting
	       causes all saved	message	to be retained.

     line-editor-cpl-word-breaks
	       [Option]	List of	bytes which are	used by	the mle-complete tabu-
	       lator completion	to decide where	word boundaries	exist, by de-
	       fault `"'@=;|:' [v15 behaviour may differ] This mechanism is
	       yet restricted.

     line-editor-disable
	       (Boolean) Turn off any line editing capabilities	(from S-nails
	       POW, see	On terminal control and	line editor for	more).

     line-editor-no-defaults
	       (Boolean)[Option] Do not	establish any default key binding.

     log-prefix
	       Error log message prefix	string (`s-nail: ').

     mailbox-display
	       (Read-only) The name of the current mailbox (folder), possibly
	       abbreviated for display purposes.

     mailbox-resolved
	       (Read-only) The fully resolved path of the current mailbox.

     mailcap-disable
	       (Boolean)[Option] Turn off consideration	of MIME	type handlers
	       from, and implicit loading of The Mailcap files.

     mailx-extra-rc
	       An additional startup file that is loaded as the	last of	the
	       Resource	files.	Use this file for commands that	are not	under-
	       stood by	other POSIX mailx(1) implementations, i.e., mostly
	       anything	which is not covered by	Initial	settings.

     markanswered
	       (Boolean) When a	message	is replied to and this variable	is
	       set, it is marked as having been	answered.  See the section
	       Message states.

     mbox-fcc-and-pcc
	       (Boolean) By default all	file and pipe message receivers	(see
	       expandaddr) will	be fed valid MBOX database entry message data
	       (see folder, mbox-rfc4155), and existing	file targets will be-
	       come extended in	compliance to RFC 4155.	 If this variable is
	       unset then a plain standalone RFC 5322 message will be written,
	       and existing file targets will be overwritten.

     mbox-rfc4155
	       (Boolean) When opening MBOX mailbox databases, and in order to
	       achieve compatibility with old software,	the very tolerant
	       POSIX standard rules for	detecting message boundaries (so-
	       called `From_' lines) are used instead of the stricter rules
	       from the	standard RFC 4155.  This behaviour can be switched by
	       setting this variable.

	       This may	temporarily be handy when S-nail complains about in-
	       valid `From_' lines when	opening	a MBOX:	in this	case setting
	       this variable and re-opening the	mailbox	in question may	cor-
	       rect the	result.	 If so,	copying	the entire mailbox to some
	       other file, as in `copy * SOME-FILE', will perform proper, all-
	       compatible `From_' quoting for all detected messages, resulting
	       in a valid MBOX mailbox.	 ([v15 behaviour may differ] The bet-
	       ter and non-destructive approach	is to re-encode	invalid	mes-
	       sages, as if it would be	created	anew, instead of mangling the
	       `From_' lines; this requires the	structural code	changes	of the
	       v15 rewrite.)  Finally the variable can be unset	again:

		     define mboxfix {
		       localopts yes; wysh set mbox-rfc4155;\
			 wysh File "${1}"; copy	* "${2}"
		     }
		     call mboxfix /tmp/bad.mbox	/tmp/good.mbox

     memdebug  (Boolean) Internal development variable.	 (Keeps	memory debug
	       enabled even if debug is	not set.)

     message-id-disable
	       (Boolean) By setting this variable the generation of
	       `Message-ID:' and `Content-ID:' message and MIME	part headers
	       can be completely suppressed, effectively leaving this task up
	       to the mta (Mail-Transfer-Agent)	or the SMTP server.  Note that
	       according to RFC	5321 a SMTP server is not required to add this
	       field by	itself,	so it should be	ensured	that it	accepts	mes-
	       sages without `Message-ID'.

     message-inject-head
	       A string	to put at the beginning	of each	new message, followed
	       by a newline.  [Obsolete] The escape sequences tabulator	`\t'
	       and newline `\n'	are understood (use the	wysh prefix when
	       setting the variable(s) instead).

     message-inject-tail
	       A string	to put at the end of each new message, followed	by a
	       newline.	 [Obsolete] The	escape sequences tabulator `\t'	and
	       newline `\n' are	understood (use	the wysh prefix	when setting
	       the variable(s) instead).  Also see on-compose-leave.

     metoo     (Boolean) Usually, when an alias	expansion contains the sender,
	       the sender is removed from the expansion.  Setting this option
	       suppresses these	removals.  Note	that a set metoo also causes a
	       `-m' option to be passed	through	to the mta (Mail-Transfer-
	       Agent); though most of the modern MTAs no longer	document this
	       flag, no	MTA is known which does	not support it (for historical
	       compatibility).

     mime-allow-text-controls
	       (Boolean) When sending messages,	each part of the message is
	       MIME-inspected in order to classify the `Content-Type:' and
	       `Content-Transfer-Encoding:' (see mime-encoding)	that is	re-
	       quired to send this part	over mail transport, i.e., a computa-
	       tion rather similar to what the file(1) command produces	when
	       used with the `--mime' option.

	       This classification however treats text files which are encoded
	       in UTF-16 (seen for HTML	files) and similar character sets as
	       binary octet-streams, forcefully	changing any `text/plain' or
	       `text/html' specification to `application/octet-stream':	If
	       that actually happens a yet unset charset MIME parameter	is set
	       to `binary', effectively	making it impossible for the receiving
	       MUA to automatically interpret the contents of the part.

	       If this variable	is set,	and the	data was unambiguously identi-
	       fied as text data at first glance (by a `.txt' or `.html' file
	       extension), then	the original `Content-Type:' will not be over-
	       written.

     mime-alternative-favour-rich
	       (Boolean) If this variable is set then rich MIME	alternative
	       parts (e.g., HTML) will be preferred in favour of included
	       plain text versions when	displaying messages, provided that a
	       handler exists which produces output that can be	(re)integrated
	       into S-nail's normal visual display.

     mime-counter-evidence
	       Normally	the `Content-Type:' field is used to decide how	to
	       handle MIME parts.  Some	MUAs, however, do not use The
	       mime.types files	(also see HTML mail and	MIME attachments) or a
	       similar mechanism to correctly classify content,	but specify an
	       unspecific MIME type (`application/octet-stream') even for
	       plain text attachments.	If this	variable is set	then S-nail
	       will try	to re-classify such MIME message parts,	if possible,
	       for example via a possibly existing attachment filename.	 A
	       non-empty value may also	be given, in which case	a number is
	       expected, actually a carrier of bits, best specified as a bi-
	       nary value, like	`0b1111'.

	       +o   If bit two is set (counting from 1, decimal 2) then the de-
		   tected mimetype will	be carried along with the message and
		   be used for deciding	which MIME handler is to be used, for
		   example; when displaying such a MIME	part the part-info
		   will	indicate the overridden	content-type by	showing	a plus
		   sign	`+'.
	       +o   If bit three	is set (decimal	4) then	the counter-evidence
		   is always produced and a positive result will be used as
		   the MIME type, even forcefully overriding the parts given
		   MIME	type.
	       +o   If bit four is set (decimal 8) as a last resort the actual
		   content of `application/octet-stream' parts will be in-
		   spected, so that data which looks like plain	text can be
		   treated as such.  This mode is even more relaxed when data
		   is to be displayed to the user or used as a message quote
		   (data consumers which mangle	data for display purposes,
		   which includes masking of control characters, for example).

     mime-encoding
	       The MIME	`Content-Transfer-Encoding' to use in outgoing text
	       messages	and message parts, where applicable (7-bit clean text
	       messages	are without an encoding	if possible):

	       `8bit'	 (Or `8b'.)  8-bit transport effectively causes	the
			 raw data be passed through unchanged, but may cause
			 problems when transferring mail messages over chan-
			 nels that are not ESMTP (RFC 1869) compliant.	Also,
			 several input data constructs are not allowed by the
			 specifications	and may	cause a	different transfer-en-
			 coding	to be used.  By	established rules and popular
			 demand	occurrences of `^From_'	(see mbox-rfc4155)
			 will be MBOXO quoted (prefixed	with greater-than sign
			 `>') instead of causing a non-destructive encoding
			 like `quoted-printable' to be chosen, unless context
			 (like message signing)	requires otherwise.
	       `quoted-printable'
			 (Or `qp'.)  Quoted-printable encoding is 7-bit	clean
			 and has the property that ASCII characters are	passed
			 through unchanged, so that an english message can be
			 read as-is; it	is also	acceptable for other single-
			 byte locales that share many characters with ASCII,
			 for example ISO-8859-1.  The encoding will cause a
			 large overhead	for messages in	other character	sets:
			 for example it	will require up	to twelve (12) bytes
			 to encode a single UTF-8 character of four (4)	bytes.
			 It is the default encoding.
	       `base64'	 (Or `b64'.)  This encoding is 7-bit clean and will
			 always	be used	for binary data.  This encoding	has a
			 constant input:output ratio of	3:4, regardless	of the
			 character set of the input data it will encode	three
			 bytes of input	to four	bytes of output.  This trans-
			 fer-encoding is not human readable without performing
			 a decoding step.

     mime-force-sendout
	       (Boolean)[Option] Whenever it is	not acceptable to fail sending
	       out messages because of non-convertible character content this
	       variable	may be set.  It	will, as a last	resort,	classify the
	       part content as `application/octet-stream'.  Please refer to
	       the section Character sets for the complete picture of charac-
	       ter set conversion in S-nail.

     mimetypes-load-control
	       Can be used to control which of The mime.types files are
	       loaded: if the letter `u' is part of the	option value, then the
	       user's personal ~/.mime.types file will be loaded (if it	ex-
	       ists); likewise the letter `s' controls loading of the system
	       wide /usr/local/etc/mime.types; directives found	in the user
	       file take precedence, letter matching is	case-insensitive.  If
	       this variable is	not set	S-nail will try	to load	both files.
	       Incorporation of	the S-nail-built-in MIME types cannot be sup-
	       pressed,	but they will be matched last (the order can be	listed
	       via mimetype).

	       More sources can	be specified by	using a	different syntax: if
	       the value string	contains an equals sign	`=' then it is instead
	       parsed as a comma-separated list	of the described letters plus
	       `f=FILENAME' pairs; the given filenames will be expanded	and
	       loaded, and their content may use the extended syntax that is
	       described in the	section	The mime.types files.  Directives
	       found in	such files always take precedence (are prepended to
	       the MIME	type cache).

     mta       Select an alternate Mail-Transfer-Agent by either specifying
	       the full	pathname of an executable (a `file://' prefix may be
	       given), or [Option]ally a SMTP aka SUBMISSION protocol URL
	       [v15-compat]:

		     submissions://[user[:password]@]server[:port]

	       ([no v15-compat]: `[smtp://]server[:port]'.)  The default has
	       been chosen at compile time.  MTA data transfers	are always
	       performed in asynchronous child processes, and without supervi-
	       sion unless either the sendwait or the verbose variable is set.
	       `Bcc:' headers are not passed through to	MTAs as	part of	mes-
	       sages unless mta-bcc-ok is set (see there); corresponding re-
	       ceivers are addressed by	protocol-specific means	or MTA command
	       line options only until then.  [Option]ally expansion of	the
	       well-known mta-aliases (aliases(5)) can also be directly	per-
	       formed by S-nail.

	       For testing purposes there is the `test'	pseudo-MTA, which
	       dumps to	standard output	or optionally to a file, and honours
	       mbox-fcc-and-pcc:

		     $ echo text | s-nail -:/ -Smta=test -s ubject ex@am.ple
		     $ </dev/null s-nail -:/ -Smta=test://./xy ex@am.ple

	       For a file-based	MTA it may be necessary	to set mta-argv0 in in
	       order to	choose the right target	of a modern mailwrapper(8) en-
	       vironment.  It will be passed command line arguments from sev-
	       eral possible sources: from the variable	mta-arguments if set,
	       from the	command	line if	given and the variable expandargv al-
	       lows their use.	Argument processing of the MTA will be termi-
	       nated with a -- separator.

	       The otherwise occurring implicit	usage of the following MTA
	       command line arguments can be disabled by setting the boolean
	       variable	mta-no-default-arguments (which	will also disable
	       passing -- to the MTA): -i (for not treating a line with	only a
	       dot `.' character as the	end of input), -m (shall the variable
	       metoo be	set) and -v (if	the verbose variable is	set); in con-
	       junction	with the -r command line option	S-nail will also (not)
	       pass -f as well as possibly -F.

	       [Option]ally S-nail can send mail over SMTP aka SUBMISSION net-
	       work connections	to a single defined smart host by setting this
	       variable	to a SMTP or SUBMISSION	URL (see On URL	syntax and
	       credential lookup).  An authentication scheme can be specified
	       via the variable	chain smtp-auth.  Encrypted network connec-
	       tions are [Option]ally available, the section Encrypted network
	       communication should give an overview and provide links to more
	       information on this.  Note that with some mail providers	it may
	       be necessary to set the smtp-hostname variable in order to use
	       a specific combination of from, hostname	and mta.  Network com-
	       munication socket timeouts are configurable via
	       socket-connect-timeout.	All generated network traffic may be
	       proxied over a SOCKS socks-proxy, it can	be logged by setting
	       verbose twice.  The following SMTP variants may be used:

	       +o   The plain SMTP protocol (RFC	5321) that normally lives on
		   the server port 25 and requires setting the
		   smtp-use-starttls variable to enter a TLS encrypted session
		   state.  Assign a value like [v15-compat]
		   `smtp://[user[:password]@]server[:port]' ([no v15-compat]
		   `smtp://server[:port]') to choose this protocol.

	       +o   The so-called SMTPS which is	supposed to live on server
		   port	465 and	is automatically TLS secured.  Unfortunately
		   it never became a standardized protocol and may thus	not be
		   supported by	your hosts network service database - in fact
		   the port number has already been reassigned to other	proto-
		   cols!

		   SMTPS is nonetheless	a commonly offered protocol and	thus
		   can be chosen by assigning a	value like [v15-compat]
		   `smtps://[user[:password]@]server[:port]' ([no v15-compat]
		   `smtps://server[:port]'); due to the	mentioned problems it
		   is usually necessary	to explicitly specify the port as
		   `:465', however.

	       +o   The SUBMISSION protocol (RFC	6409) lives on server port 587
		   and is identically to the SMTP protocol from	S-nail's point
		   of view; it requires	setting	smtp-use-starttls to enter a
		   TLS secured session state; e.g., [v15-compat]
		   `submission://[user[:password]@]server[:port]'.

	       +o   The SUBMISSIONS protocol (RFC 8314) that lives on server
		   port	465 and	is TLS secured by default.  It can be chosen
		   by assigning	a value	like [v15-compat]
		   `submissions://[user[:password]@]server[:port]'.  Due to
		   the problems	mentioned for SMTPS above and the fact that
		   SUBMISSIONS is new and a successor that lives on the	same
		   port	as the historical engineering mismanagement named
		   SMTPS, it is	usually	necessary to explicitly	specify	the
		   port	as `:465'.

     mta-aliases
	       [Option]	If set to a path pointing to a text file in valid MTA
	       (Postfix) aliases(5) format, the	file is	loaded and cached
	       (manageable with	mtaaliases), and henceforth plain `name' (see
	       expandaddr) message receiver names are recursively expanded as
	       a last expansion	step, after the	distribution lists which can
	       be created with alias.  Constraints on aliases(5) content sup-
	       port: only local	addresses (names) which	are valid usernames
	       (`[a-z_][a-z0-9_-]*[$]?') are treated as	expandable aliases,
	       and [v15	behaviour may differ] `:include:/file/name' directives
	       are not supported.  By including	`-name'	in expandaddr it can
	       be asserted that	only expanded names (mail addresses) are
	       passed through to the MTA.

     mta-arguments
	       Arguments to pass through to a file-based mta can be given via
	       this variable, which is parsed according	to Shell-style
	       argument	quoting	into an	array of arguments, and	which will be
	       joined onto MTA options from other sources, and then passed in-
	       dividually to the MTA: `? wysh set mta-arguments='-t -X
	       "/tmp/my	log"''.

     mta-no-default-arguments
	       (Boolean) Unless	this variable is set S-nail will pass some
	       well known standard command line	options	to a file-based	mta
	       (Mail-Transfer-Agent), see there	for more.

     mta-no-receiver-arguments
	       (Boolean) By default a file-based mta will be passed all	re-
	       ceiver addresses	on the command line.  Some MTAs	impose special
	       behaviour on such arguments, so setting this variable will sup-
	       press them altogether.  This can	make it	necessary to pass a -t
	       via mta-arguments.

     mta-argv0
	       Many systems use	a so-called mailwrapper(8) environment to en-
	       sure compatibility with sendmail(1).  This works	by inspecting
	       the name	that was used to invoke	the mail delivery system.  If
	       this variable is	set then the mailwrapper (the program that is
	       actually	executed when calling the file-based mta) will treat
	       its contents as that name.

     mta-bcc-ok
	       (Boolean) By default `Bcc:' header lines	are not	passed through
	       since some MTAs do not remove them before sending them over the
	       wire, in	violation of RFC 5322.	(For example Exim and Courier
	       would need to be	started	with the -t command line option	to
	       force stripping.)  Setting this enables pass-through, therefore
	       avoids generation of mutilated message versions,	and [v15 be-
	       haviour may differ] improves performance.

     netrc-lookup-USER@HOST, netrc-lookup-HOST,	netrc-lookup
	       (Boolean)[v15-compat][Option] Used to control usage of the
	       user's ~/.netrc file for	lookup of account credentials, as doc-
	       umented in the section On URL syntax and	credential lookup and
	       for the command netrc; the section The .netrc file documents
	       the file	format.	 Also see netrc-pipe.

     netrc-pipe
	       [v15-compat][Option] When ~/.netrc is loaded (see netrc and
	       netrc-lookup) then S-nail will read the output of a shell pipe
	       instead of the user's ~/.netrc file if this variable is set (to
	       the desired shell command).  This can be	used to, for example,
	       store ~/.netrc in encrypted form: `? set	netrc-pipe='gpg	-qd
	       ~/.netrc.pgp''.

     newfolders
	       [Option]	If this	variable has the value `maildir', newly	cre-
	       ated local folders will be in Maildir instead of	MBOX format.

     newmail   Checks for new mail in the current folder each time the prompt
	       is shown.  A Maildir folder must	be re-scanned to determine if
	       new mail	has arrived.  If this variable is set to the special
	       value `nopoll' then a Maildir folder will not be	rescanned com-
	       pletely,	but only timestamp changes are detected.  Maildir
	       folders are [Option]al.

     outfolder
	       (Boolean) Causes	a non-absolute filename	specified in record,
	       as well as the sender-based filenames of	the Copy, Save,
	       Followup	and followup commands to be interpreted	relative to
	       the folder directory rather than	relative to the	current	direc-
	       tory.

     on-account-cleanup-ACCOUNT, on-account-cleanup
	       Macro hook which	will be	called once an account is left,	as the
	       very last step before unrolling per-account localopts.  This
	       hook is run even	in case	of fatal errors, including those gen-
	       erated by switching to the account as such, and it is advisable
	       to perform only absolutely necessary actions, like cleaning up
	       alternates, for example.	 The specialized form is used in
	       favour of the generic one if found.

     on-compose-cleanup
	       Macro hook which	will be	called after the message has been sent
	       (or not,	in case	of failures), as the very last step before un-
	       rolling compose mode localopts.	This hook is run even in case
	       of fatal	errors,	and it is advisable to perform only absolutely
	       necessary actions, like cleaning	up alternates, for example.

	       For compose mode	hooks that may affect the message content
	       please see on-compose-enter, on-compose-leave,
	       on-compose-splice.  [v15	behaviour may differ] This hook	exists
	       because alias, alternates, commandalias,	shortcut, to name a
	       few, are	neither	covered	by localopts nor by local: changes ap-
	       plied in	compose	mode will continue to be in effect thereafter.

     on-compose-enter, on-compose-leave
	       Macro hooks which will be called	once compose mode is entered,
	       and after composing has been finished, respectively; the	exact
	       order of	the steps taken	is documented for ~., one of the
	       COMMAND ESCAPES.	 Context about the message being worked	on can
	       be queried via digmsg.  localopts are enabled for these hooks,
	       and changes on variables	will be	forgotten after	the message
	       has been	sent.  on-compose-cleanup can be used to perform other
	       necessary cleanup steps.

	       Here is an example that injects a signature via
	       message-inject-tail; instead using on-compose-splice to simply
	       inject the file of desire via ~<	or ~<! may be a	better ap-
	       proach.

		     define t_ocl {
		       vput ! i	cat ~/.mysig
		       if $? -eq 0
			  vput csop message-inject-tail	trim-end $i
		       end

		       # Alternatively
		       readctl create ~/.mysig
		       if $? -eq 0
			 readall i
			 if $? -eq 0
			   vput	csop message-inject-tail trim-end $i
			 end
			 readctl remove	~/.mysig
		       end
		     }
		     set on-compose-leave=t_ocl

     on-compose-splice,	on-compose-splice-shell
	       These hooks run once the	normal compose mode is finished, but
	       before the on-compose-leave macro hook is called	etc.  Both
	       hooks will be executed in a subprocess, with their input	and
	       output connected	to S-nail such that they can act as if they
	       would be	an interactive user.  The difference in	between	them
	       is that the latter is a SHELL command, whereas the former is a
	       normal defined macro, but which is restricted to	a small	set of
	       commands	(the verbose output of for example list	will indicate
	       said capability).  localopts are	enabled	for these hooks	(in
	       the parent process), causing any	setting	to be forgotten	after
	       the message has been sent; on-compose-cleanup can be used to
	       perform other cleanup as	necessary.

	       During execution	of these hooks S-nail will temporarily forget
	       whether it has been started in interactive mode,	(a restricted
	       set of) COMMAND ESCAPES will always be available, and for guar-
	       anteed reproducibilities	sake escape and	ifs will be set	to
	       their defaults.	The compose mode command ~^ has	been espe-
	       cially designed for scriptability (via these hooks).  The first
	       line the	hook will read on its standard input is	the protocol
	       version of said command escape, currently "0 0 2": backward in-
	       compatible protocol changes have	to be expected.

	       Care must be taken to avoid deadlocks and other false control
	       flow: if	both involved processes	wait for more input to happen
	       at the same time, or one	does not expect	more input but the
	       other is	stuck waiting for consumption of its output, etc.
	       There is	no automatic synchronization of	the hook: it will not
	       be stopped automatically	just because it, e.g., emits `~x'.
	       The hooks will however receive a	termination signal if the par-
	       ent enters an error condition.  [v15 behaviour may differ] Pro-
	       tection against and interaction with signals is not yet given;
	       it is likely that in the	future these scripts will be placed in
	       an isolated session, which is signalled in its entirety as nec-
	       essary.

		     define ocs_signature {
		       read version
		       echo '~<	~/.mysig' # '~<! fortune pathtofortunefile'
		     }
		     set on-compose-splice=ocs_signature

		     wysh set on-compose-splice-shell=$'\
		       read version;\
		       printf "hello $version!	Headers: ";\
		       echo \'~^header list\';\
		       read status result;\
		       echo "status=$status result=$result";\
		       '

		     define ocsm {
		       read version
		       echo Splice protocol version is $version
		       echo '~^h l'; read hl; vput csop	es subs	"${hl}"	0 1
		       if "$es"	!= 2
			 echoerr 'Cannot read header list'; echo '~x'; xit
		       endif
		       if "$hl"	!%?case	' cc'
			 echo '~^h i cc	"Diet is your <mirr.or>"'; read	es;\
			   vput	csop es	substring "${es}" 0 1
			 if "$es" != 2
			   echoerr 'Cannot insert Cc: header'; echo '~x'
			   # (no xit, macro finishes anyway)
			 endif
		       endif
		     }
		     set on-compose-splice=ocsm

     on-history-addition
	       This hook will be called	if an entry is about to	be added to
	       the history of the MLE, as documented in	On terminal control
	       and line	editor.	 It will be called with	three arguments: the
	       first is	the name of the	input context (see bind), the second
	       is either an empty string or the	matching history-gabby type,
	       and the third being the complete	command	line to	be added.  The
	       entry will not be added to history if the hook uses a non-0
	       return.	[v15 behaviour may differ] A future version will give
	       the expanded command name as the	third argument,	followed by
	       the tokenized command line as parsed in the remaining argu-
	       ments, the first	of which is the	original unexpanded command
	       name; i.e., one may do `shift 4'	and will then be able to ac-
	       cess the	positional parameters as usual via *, #, 1 etc.

     on-main-loop-tick
	       This hook will be called	whenever the program's main event loop
	       is about	to read	the next input line.  Note variable and	other
	       changes it performs are not scoped as via localopts!

     on-program-exit
	       This hook will be called	when the program exits,	whether	via
	       exit or quit, or	because	the send mode is done.

     on-resend-cleanup
	       [v15 behaviour may differ] Identical to on-compose-cleanup, but
	       is only triggered by resend.

     on-resend-enter
	       [v15 behaviour may differ] Identical to on-compose-enter, but
	       is only triggered by resend; currently there is no digmsg sup-
	       port, for example.

     page      (Boolean) If set, each message feed through the command given
	       for pipe	is followed by a formfeed character `\f'.

     password-USER@HOST, password-HOST,	password
	       [v15-compat] Variable chain that	sets a password, which is used
	       in case none has	been given in the protocol and account-spe-
	       cific URL; as a last resort S-nail will ask for a password on
	       the user's terminal if the authentication method	requires a
	       password.  Specifying passwords in a startup file is generally
	       a security risk;	the file should	be readable by the invoking
	       user only.

     password-USER@HOST
	       [no v15-compat] (see the	chain above for	[v15-compat]) Set the
	       password	for `USER' when	connecting to `HOST'.  If no such
	       variable	is defined for a host, the user	will be	asked for a
	       password	on standard input.  Specifying passwords in a startup
	       file is generally a security risk; the file should be readable
	       by the invoking user only.

     piperaw   (Boolean) Send messages to the pipe command without performing
	       MIME and	character set conversions.

     pipe-TYPE/SUBTYPE
	       When a MIME message part	of type	`TYPE/SUBTYPE' (case-insensi-
	       tive) is	displayed or quoted, its text is filtered through the
	       value of	this variable interpreted as a shell command.  Note
	       that only parts which can be displayed inline as	plain text
	       (see copiousoutput) are displayed unless	otherwise noted, other
	       MIME parts will only be considered by and for the command
	       mimeview.

	       The special value question mark `?' forces interpretation of
	       the message part	as plain text, for example `set
	       pipe-application/xml=?' will henceforth display XML "as is".
	       (The same could also be achieved	by adding a MIME type marker
	       with the	mimetype command.  And [Option]ally MIME type handlers
	       may be defined via The Mailcap files -- these directives,
	       copiousoutput has already been used, should be referred to for
	       further documentation.

	       The question mark `?' can in fact be used as a trigger charac-
	       ter to adjust usage and behaviour of a following	shell command
	       specification more thoroughly by	appending more special charac-
	       ters which refer	to further mailcap directives, for example the
	       following hypothetical command specification could be used:

		     ? set pipe-X/Y='?!++=? vim	${MAILX_FILENAME_TEMPORARY}'

	       `*'	 The command produces plain text to be integrated in
			 S-nails output: copiousoutput.
	       `#'	 If set	the handler will not be	invoked	when a message
			 is to be quoted, but only when	it will	be displayed:
			 x-mailx-noquote.
	       `&'	 Run the command asynchronously, i.e., without block-
			 ing S-nail: x-mailx-async.  The standard output of
			 the command will go to	/dev/null.
	       `!'	 The command must be run on an interactive terminal,
			 S-nail	will temporarily release the terminal to it:
			 needsterminal.
	       `+'	 Request creation of a zero-sized temporary file, the
			 absolute pathname of which will be made accessible
			 via the environment variable
			 MAILX_FILENAME_TEMPORARY: x-mailx-tmpfile.  If	given
			 twice then the	file will be unlinked automatically by
			 S-nail	when the command loop is entered again at lat-
			 est: x-mailx-tmpfile-unlink; it is an error to	use
			 automatic deletion in conjunction with	x-mailx-async.
	       `='	 Normally the MIME part	content	is passed to the han-
			 dler via standard input; if this flag is set then the
			 data will instead be written into
			 MAILX_FILENAME_TEMPORARY (x-mailx-tmpfile-fill), the
			 creation of which is implied; in order	to cause auto-
			 matic deletion	of the temporary file two plus signs
			 `++' still have to be used.
	       `?'	 To avoid ambiguities with normal shell	command	con-
			 tent another question mark can	be used	to forcefully
			 terminate interpretation of remaining characters.
			 (Any character	not in this list will have the same
			 effect.)

	       Some information	about the MIME part to be displayed is embed-
	       ded into	the environment	of the shell command:

	       MAILX_CONTENT		The MIME content-type of the part, if
					known, the empty string	otherwise.
	       MAILX_CONTENT_EVIDENCE	If mime-counter-evidence includes the
					carry-around-bit (2), then this	will
					be set to the detected MIME content-
					type; not only then identical to
					MAILX_CONTENT otherwise.
	       MAILX_EXTERNAL_BODY_URL	MIME parts of type
					`message/external-body
					access-type=url' will store the	access
					URL in this variable, it is empty oth-
					erwise.	 URL targets should not	be ac-
					tivated	automatically, without super-
					vision.
	       MAILX_FILENAME		The filename, if any is	set, the empty
					string otherwise.
	       MAILX_FILENAME_GENERATED
					A random string.
	       MAILX_FILENAME_TEMPORARY
					If temporary file creation has been
					requested through the command prefix
					this variable will be set and contain
					the absolute pathname of the temporary
					file.

     pipe-EXTENSION
	       This is identical to pipe-TYPE/SUBTYPE except that `EXTENSION'
	       (normalized to lowercase	using character	mappings of the	ASCII
	       charset)	names a	file extension,	for example `xhtml'.  Handlers
	       registered using	this method take precedence.

     pop3-auth-USER@HOST, pop3-auth-HOST, pop3-auth
	       [Option][v15-compat] Variable chain that	sets the POP3 authen-
	       tication	method.	 Supported are the default `plain', [v15-com-
	       pat] `oauthbearer' (see FAQ entry But, how about	XOAUTH2	/
	       OAUTHBEARER?), as well as [v15-compat] `external' and
	       `externanon' for	TLS secured connections	which pass a client
	       certificate via tls-config-pairs.  There	may be the [Option]al
	       method [v15-compat] `gssapi'.  `externanon' does	not need any
	       user credentials, `external' and	`gssapi' need a	user, the re-
	       mains also require a password.  `externanon' solely builds upon
	       the credentials passed via a client certificate,	and is usually
	       the way to go since tested servers do not actually follow RFC
	       4422, and fail if additional credentials	are actually passed.
	       Unless pop3-no-apop is set the `plain' method will [Option]ally
	       be replaced with	APOP if	possible (see there).

     pop3-bulk-load-USER@HOST, pop3-bulk-load-HOST, pop3-bulk-load
	       (Boolean)[Option] When accessing	a POP3 server S-nail loads the
	       headers of the messages,	and only requests the message bodies
	       on user request.	 For the POP3 protocol this means that the
	       message headers will be downloaded twice.  If this variable is
	       set then	S-nail will download only complete messages from the
	       given POP3 server(s) instead.

     pop3-keepalive-USER@HOST, pop3-keepalive-HOST, pop3-keepalive
	       [Option]	POP3 servers close the connection after	a period of
	       inactivity; the standard	requires this to be at least 10	min-
	       utes, but practical experience may vary.	 Setting this variable
	       to a numeric value greater than `0' causes a `NOOP' command to
	       be sent each value seconds if no	other operation	is performed.

     pop3-no-apop-USER@HOST, pop3-no-apop-HOST,	pop3-no-apop
	       (Boolean)[Option] Unless	this variable is set the MD5 based
	       `APOP' authentication method will be used instead of a chosen
	       `plain' pop3-auth when connecting to a POP3 server that adver-
	       tises support.  The advantage of	`APOP' is that only a single
	       packet is sent for the user/password tuple.  (Originally	also
	       that the	password is not	sent in	clear text over	the wire, but
	       for one MD5 does	not any	longer offer sufficient	security, and
	       then today transport is almost ever TLS secured.)  Note that
	       pop3-no-apop-HOST requires [v15-compat].

     pop3-use-starttls-USER@HOST, pop3-use-starttls-HOST, pop3-use-starttls
	       (Boolean)[Option] Causes	S-nail to issue	a `STLS' command to
	       make an unencrypted POP3	session	TLS encrypted.	This function-
	       ality is	not supported by all servers, and is not used if the
	       session is already encrypted by the POP3S method.  Note that
	       pop3-use-starttls-HOST requires [v15-compat].

     posix     (Boolean) This flag enables POSIX mode, which changes behaviour
	       of S-nail where that deviates from standardized behaviour.  It
	       is automatically	squared	with the environment variable
	       POSIXLY_CORRECT,	changing the one will adjust the other.	 The
	       following behaviour is covered and enforced by this mechanism:

	       +o   In non-interactive mode, any	error encountered while	load-
		   ing resource	files during program startup will cause	a pro-
		   gram	exit, whereas in interactive mode such errors will
		   stop	loading	of the currently loaded	(stack of) file(s,
		   i.e., recursively).	These exits can	be circumvented	on a
		   per-command base by using ignerr, one of the	Command
		   modifiers, for each command which shall be allowed to fail.
	       +o   alternates will replace the list of alternate addresses in-
		   stead of appending to it.  In addition alternates will only
		   be honoured for any sort of message reply, and for aliases.
	       +o   The variable	inserting COMMAND ESCAPES ~A, ~a, ~I and ~i
		   will	expand embedded	character sequences `\t' horizontal
		   tabulator and `\n' line feed.  [v15 behaviour may differ]
		   For compatibility reasons this step will always be per-
		   formed.
	       +o   Reading in messages via ~f (COMMAND ESCAPES)	will use the
		   `type' not the `forward' headerpick selection.
	       +o   Upon	changing the active folder no summary of headers will
		   be displayed	even if	header is set.
	       +o   Setting ignoreeof implies the behaviour described by	dot.
	       +o   The variable	keep is	extended to cover any empty mailbox,
		   not only empty primary system mailboxes: they will be re-
		   moved when they are left in empty state otherwise.

     print-alternatives
	       (Boolean) When a	MIME message part of type
	       `multipart/alternative' is displayed and	it contains a subpart
	       of type `text/plain', other parts are normally discarded.  Set-
	       ting this variable causes all subparts to be displayed, just as
	       if the surrounding part was of type `multipart/mixed'.

     prompt    The string used as a prompt in interactive mode.	 Whenever the
	       variable	is evaluated the value is treated as if	specified
	       within dollar-single-quotes (see	Shell-style argument quoting).
	       This (post-assignment, i.e., second) expansion can be used to
	       embed status information, for example ?,	!, account or
	       mailbox-display.

	       In order	to embed characters which should not be	counted	when
	       calculating the visual width of the resulting string, enclose
	       the characters of interest in a pair of reverse solidus escaped
	       brackets: `\[\E[0m\]'; a	slot for coloured prompts is also
	       available with the [Option]al command colour.  Prompting	may be
	       prevented by setting this to the	null string (aka `set
	       noprompt').

     prompt2   This string is used for secondary prompts, but is otherwise
	       identical to prompt.  The default is `..	'.

     quiet     (Boolean) Suppresses the	printing of the	version	when first in-
	       voked.

     quote     If set messages processed by followup, reply and	variants will
	       be prefixed with	the quoted original message, the lines of
	       which prefixed by indentprefix, taking into account quote-chars
	       and quote-fold.	No headers will	be quoted when set without
	       value or	if the value is	`noheading', if	it is `headers'	the
	       `type' headerpick selection will	be included in the quotation,
	       whereas all headers and all MIME	parts are included for
	       `allheaders'.  The quoted message will be enclosed by the ex-
	       pansions	of quote-inject-head and quote-inject-tail.  Also see
	       quote-add-cc, quote-as-attachment and ~Q, one of	the COMMAND
	       ESCAPES.

     quote-add-cc
	       (Boolean) Whether the sender of a message quoted	via ~Q shall
	       be added	to the messages' `Cc:' list.

     quote-as-attachment
	       (Boolean) Add the original message in its entirety as a
	       `message/rfc822'	MIME attachment	when replying to a message.
	       Note this works regardless of the setting of quote.

     quote-chars
	       Can be set to a string consisting of non-whitespace ASCII char-
	       acters which shall be treated as	quotation leaders, the default
	       being `>|}:'.

     quote-fold
	       [Option]	Can be set in addition to indentprefix,	and creates a
	       more fancy quotation in that leading quotation characters
	       (quote-chars) are compressed and	overlong lines are folded.
	       quote-fold can be set to	either one, two	or three (space	sepa-
	       rated) numeric values, which are	interpreted as the maximum
	       (goal) and the minimum line length, respectively, in a spirit
	       rather equal to the fmt(1) program, but line- instead of	para-
	       graph-based.  The third value is	used as	the maximum line
	       length instead of the first if no better	break point can	be
	       found; it is ignored unless it is larger	than the minimum and
	       smaller than the	maximum.  If not set explicitly	the minimum
	       will reflect the	goal algorithmically.  The goal	cannot be
	       smaller than the	length of indentprefix plus some additional
	       pad; necessary adjustments take place silently.

     quote-inject-head,	quote-inject-tail
	       The strings to put before and after the text of a quoted	mes-
	       sage, if	non-empty, and respectively.  The former defaults to
	       `%f wrote:\n\n'.	 Special format	directives will	be expanded if
	       possible, and if	so configured the output will be folded	ac-
	       cording to quote-fold.  Format specifiers in the	given strings
	       start with a percent sign `%' and expand	values of the original
	       message,	unless noted otherwise.	 Note that names and addresses
	       are not subject to the setting of showto.  Valid	format speci-
	       fiers are:

	       `%%'	 A plain percent sign.
	       `%a'	 The address(es) of the	sender(s).
	       `%d'	 The date found	in the `Date:' header of the message
			 when datefield	is set (the default), otherwise	the
			 date when the message was received.  Formatting can
			 be controlled by assigning a strftime(3) format
			 string	to datefield (and datefield-markout-older).
	       `%f'	 The full name(s) (name	and address, as	given) of the
			 sender(s).
	       `%i'	 The `Message-ID:'.
	       `%n'	 The real name(s) of the sender(s) if there is one and
			 showname allows usage,	the address(es)	otherwise.
	       `%r'	 The senders real name(s) if there is one, the ad-
			 dress(es) otherwise.

     r-option-implicit
	       (Boolean) Setting this option evaluates the contents of from
	       (or, if that contains multiple addresses, sender) and passes
	       the results onto	the used (file-based) MTA as described for the
	       -r option (empty	argument case).

     recipients-in-cc
	       (Boolean) When doing a reply, the original `From:' and `To:' as
	       well as addressees which	possibly came in via `Reply-To:' and
	       `Mail-Followup-To:' are by default merged into the new `To:'.
	       If this variable	is set a sensitive algorithm tries to place in
	       `To:' only the sender of	the message being replied to, others
	       are placed in `Cc:'.

     record    Unless this variable is defined,	no copies of outgoing mail
	       will be saved.  If defined it gives the pathname, subject to
	       the usual Filename transformations, of a	folder where all new,
	       replied-to or forwarded messages	are saved: when	saving to this
	       folder fails the	message	is not sent, but instead saved to
	       DEAD.  The standard defines that	relative (fully	expanded)
	       paths are to be interpreted relative to the current directory
	       (cwd), to force interpretation relative to folder outfolder
	       needs to	be set in addition.

     record-files
	       (Boolean) If this variable is set the meaning of	record will be
	       extended	to cover messages which	target only file and pipe re-
	       cipients	(see expandaddr).  These address types will not	appear
	       in recipient lists unless add-file-recipients is	also set.

     record-resent
	       (Boolean) If this variable is set the meaning of	record will be
	       extended	to also	cover the resend and Resend commands.

     reply-in-same-charset
	       (Boolean) If this variable is set S-nail	first tries to use the
	       same character set of the original message for replies.	If
	       this fails, the mechanism described in Character	sets is	evalu-
	       ated as usual.

     reply-strings
	       Can be set to a comma-separated list of (case-insensitive ac-
	       cording to ASCII	rules) strings which shall be recognized in
	       addition	to the built-in	strings	as `Subject:' reply message
	       indicators - built-in are `Re:',	which is mandated by RFC 5322,
	       as well as the german `Aw:', `Antw:', and the `Wg:' which often
	       has been	seen in	the wild; I.e.,	the separating colon has to be
	       specified explicitly.

     reply-to  A list of addresses to put into the `Reply-To:' field of	the
	       message header.	Members	of this	list are handled as if they
	       were in the alternates list.

     replyto   [Obsolete] Variant of reply-to.

     reply-to-honour
	       Controls	whether	a `Reply-To:' header is	honoured when replying
	       to a message via	reply or Lreply.  This is a quadoption;	if set
	       without a value it defaults to "yes".

     reply-to-swap-in
	       Standards like DKIM and (in conjunction with) DMARC caused many
	       Mailing lists to	use sender address rewriting in	the style of
	       `Name via List <list@address>', where the original sender ad-
	       dress often being placed	in `Reply-To:'.	 If this is set	and a
	       `Reply-To:' exists then that is used in place of	the pretended
	       sender.	This works independently from reply-to-honour.	The
	       optional	value, a comma-separated list of strings, offers more
	       fine-grained control on when swapping shall be used; for	now
	       supported is mlist, here	swapping occurs	if the sender is a
	       mailing-list as defined by mlist.

     rfc822-body-from_
	       (Boolean) This variable can be used to force displaying a so-
	       called `From_' line for messages	that are embedded into an en-
	       velope mail via the `message/rfc822' MIME mechanism, for	more
	       visual convenience, also	see mbox-rfc4155.

     save      (Boolean) Enable	saving of (partial) messages in	DEAD upon in-
	       terrupt or delivery error.

     screen    The number of lines that	represents a "screenful" of lines,
	       used in headers summary display,	from searching,	message
	       topline display and scrolling via z.  If	this variable is not
	       set S-nail falls	back to	a calculation based upon the detected
	       terminal	window size and	the baud rate: the faster the termi-
	       nal, the	more will be shown.  Overall screen dimensions and
	       pager usage is influenced by the	environment variables COLUMNS
	       and LINES and the variable crt.

     searchheaders
	       (Boolean) Expand	message	list specifiers	in the form `/x:y' to
	       all messages containing the substring "y" in the	header field
	       `x'.  The string	search is case insensitive.

     sendcharsets
	       [Option]	A comma-separated list of character set	names that can
	       be used in outgoing internet mail.  The value of	the variable
	       charset-8bit is automatically appended to this list of charac-
	       ter sets.  If no	character set conversion capabilities are com-
	       piled into S-nail then the only supported charset is
	       ttycharset.  Also see sendcharsets-else-ttycharset and refer to
	       the section Character sets for the complete picture of charac-
	       ter set conversion in S-nail.

     sendcharsets-else-ttycharset
	       (Boolean)[Option] If this variable is set, but sendcharsets is
	       not, then S-nail	acts as	if sendcharsets	had been set to	the
	       value of	the variable ttycharset.  In effect this combination
	       passes through the message data in the character	set of the
	       current locale encoding:	therefore mail message text will be
	       (assumed	to be) in ISO-8859-1 encoding when send	from within a
	       ISO-8859-1 locale, and in UTF-8 encoding	when send from within
	       an UTF-8	locale.

	       The 8-bit fallback charset-8bit never comes into	play as
	       ttycharset is implicitly	assumed	to be 8-bit and	capable	to
	       represent all files the user may	specify	(as is the case	when
	       no character set	conversion support is available	in S-nail and
	       the only	supported character set	is ttycharset, see Character
	       sets).  This might be a problem for scripts which use the sug-
	       gested `LC_ALL=C' setting, since	in this	case the character set
	       is US-ASCII by definition, so that it is	better to also over-
	       ride ttycharset,	then; and/or do	something like the following
	       in the resource file:

		     if	[ "$LC_ALL" == C ] || [	"$LC_CTYPE" == C ]
		       unset sendcharsets-else-ttycharset
		     end

     sender    An address that is put into the `Sender:' field of outgoing
	       messages, quoting RFC 5322: the mailbox of the agent responsi-
	       ble for the actual transmission of the message.	This field
	       should normally not be used unless the from field contains more
	       than one	address, on which case it is required.	[v15 behaviour
	       may differ] Please expect automatic management of the from and
	       sender relationship.  Dependent on the context this address is
	       handled as if it	were in	the list of alternates.	 Also see -r,
	       r-option-implicit.

     sendmail  [Obsolete] Predecessor of mta.

     sendmail-arguments
	       [Obsolete] Predecessor of mta-arguments.

     sendmail-no-default-arguments
	       [Obsolete](Boolean) Predecessor of mta-no-default-arguments.

     sendmail-progname
	       [Obsolete] Predecessor of mta-argv0.

     sendwait  Sending messages	to the chosen mta or to	command-pipe receivers
	       (see On sending mail, and non-interactive mode) will be per-
	       formed asynchronously.  This means that only startup errors of
	       the respective program will be recognizable, but	no delivery
	       errors.	Also, no guarantees can	be made	as to when the respec-
	       tive program will actually run, as well as to when they will
	       have produced output.

	       If this variable	is set then child program exit is waited for,
	       and its exit status code	is used	to decide about	success.  Re-
	       marks: in conflict with the POSIX standard this variable	is
	       built-in	to be initially	set.  Another difference is that it
	       can have	a value, which is interpreted as a comma-separated
	       list of case-insensitive	strings	naming specific	subsystems for
	       which synchronousness shall be ensured (only).  Possible	values
	       are `mta' for mta delivery, and `pcc' for command-pipe re-
	       ceivers.

     showlast  (Boolean) This setting causes S-nail to start at	the last mes-
	       sage instead of the first one when opening a mail folder, as
	       well as with from and headers.

     showname  (Boolean) Causes	S-nail to use the sender's real	name instead
	       of the plain address in the header field	summary	and in message
	       specifications.

     showto    (Boolean) Causes	the recipient of the message to	be shown in
	       the header summary if the message was sent by the user.

     Sign      The value backing ~A, one of the	COMMAND	ESCAPES.  Also see
	       message-inject-tail, on-compose-leave and on-compose-splice.

     sign      The value backing ~a, one of the	COMMAND	ESCAPES.  Also see
	       message-inject-tail, on-compose-leave and on-compose-splice.

     signature
	       [Obsolete] Please use on-compose-splice or
	       on-compose-splice-shell or on-compose-leave and (if necessary)
	       message-inject-tail instead!

     skipemptybody
	       (Boolean) If an outgoing	message	does not contain any text in
	       its first or only message part, do not send it but discard it
	       silently	(see also the command line option -E).

     smime-ca-dir, smime-ca-file
	       [Option]	Specify	the location of	trusted	CA certificates	in PEM
	       (Privacy	Enhanced Mail) for the purpose of verification of
	       S/MIME signed messages.	tls-ca-dir documents the necessary
	       preparation steps to use	the former.  The set of	CA certifi-
	       cates which are built into the TLS library can be explicitly
	       turned off by setting smime-ca-no-defaults, and further fine-
	       tuning is possible via smime-ca-flags.

     smime-ca-flags
	       [Option]	Can be used to fine-tune behaviour of the X509 CA cer-
	       tificate	storage, and the certificate verification that is
	       used.  The actual values	and their meanings are documented for
	       tls-ca-flags.

     smime-ca-no-defaults
	       (Boolean)[Option] Do not	load the default CA locations that are
	       built into the used to TLS library to verify S/MIME signed mes-
	       sages.

     smime-cipher-USER@HOST, smime-cipher
	       [Option]	Specifies the cipher to	use when generating S/MIME en-
	       crypted messages	(for the specified account).  RFC 5751 man-
	       dates a default of `aes128' (AES-128 CBC).  Possible values are
	       (case-insensitive and) in decreasing cipher strength: `aes256'
	       (AES-256	CBC), `aes192' (AES-192	CBC), `aes128' (AES-128	CBC),
	       `des3' (DES EDE3	CBC, 168 bits; default if `aes128' is not
	       available) and `des' (DES CBC, 56 bits).

	       The actually available cipher algorithms	depend on the crypto-
	       graphic library that S-nail uses.  [Option] Support for more
	       cipher algorithms may be	available through dynamic loading via
	       EVP_get_cipherbyname(3) (OpenSSL) if S-nail has been compiled
	       to support this.

     smime-crl-dir
	       [Option]	Specifies a directory that contains files with CRLs in
	       PEM format to use when verifying	S/MIME messages.

     smime-crl-file
	       [Option]	Specifies a file that contains a CRL in	PEM format to
	       use when	verifying S/MIME messages.

     smime-encrypt-USER@HOST
	       [Option]	If this	variable is set, messages send to the given
	       receiver	are encrypted before sending.  The value of the	vari-
	       able must be set	to the name of a file that contains a certifi-
	       cate in PEM format.

	       If a message is sent to multiple	recipients, each of them for
	       whom a corresponding variable is	set will receive an individu-
	       ally encrypted message; other recipients	will continue to re-
	       ceive the message in plain text unless the
	       smime-force-encryption variable is set.	It is recommended to
	       sign encrypted messages,	i.e., to also set the smime-sign vari-
	       able.  content-description-smime-message	will be	inspected for
	       messages	which become encrypted.

     smime-force-encryption
	       (Boolean)[Option] Causes	S-nail to refuse sending unencrypted
	       messages.

     smime-sign
	       (Boolean)[Option] S/MIME	sign outgoing messages with the	user's
	       (from) private key and include the users	certificate as a MIME
	       attachment.  Signing a message enables a	recipient to verify
	       that the	sender used a valid certificate, that the email	ad-
	       dresses in the certificate match	those in the message header
	       and that	the message content has	not been altered.  It does not
	       change the message text,	and people will	be able	to read	the
	       message as usual.  content-description-smime-signature will be
	       inspected.  Also	see smime-sign-cert, smime-sign-include-certs
	       and smime-sign-digest.

     smime-sign-cert-USER@HOST,	smime-sign-cert
	       [Option]	Points to a file in PEM	format.	 For the purpose of
	       signing and decryption this file	needs to contain the user's
	       private key, followed by	his certificate.

	       For message signing `USER@HOST' is always derived from the
	       value of	from (or, if that contains multiple addresses,
	       sender).	 For the purpose of encryption the recipients public
	       encryption key (certificate) is expected; the command certsave
	       can be used to save certificates	of signed messages (the	sec-
	       tion Signed and encrypted messages with S/MIME gives some de-
	       tails).	This mode of operation is usually driven by the	spe-
	       cialized	form.

	       When decrypting messages	the account is derived from the	recip-
	       ient fields (`To:' and `Cc:') of	the message, which are
	       searched	for addresses for which	such a variable	is set.
	       S-nail always uses the first address that matches, so if	the
	       same message is sent to more than one of	the user addresses us-
	       ing different encryption	keys, decryption might fail.

	       Password-encrypted keys may be used for signing and decryption.
	       Automated password lookup is possible via the "pseudo-hosts"
	       `USER@HOST.smime-cert-key' for the private key, and
	       `USER@HOST.smime-cert-cert' for the certificate stored in the
	       same file.  For example,	the hypothetical address
	       `bob@exam.ple' could be driven with a private key / certificate
	       pair path defined in smime-sign-cert-bob@exam.ple, and the
	       needed passwords	would then be looked up	as