nail.1: last fixes
[s-mailx.git] / NEWS
blobfa149461c9164f4b4d4f3470f85401e0b26248a6
1 S - n a i l / S - m a i l x  N e w s
2 ====================================
4 v14.9.0 ("Long-tailed tit"), 2017-07-??
5 ---------------------------------------
7   RC 1, 2017-07-01:
8   + If you tried something with -pre4, and it did not work: please
9     try again!  So many bugs have been fixed.
11 This is a major feature release which took about ~22 months (24
12 less two) of development to complete, and which imposed massive
13 changes under the hood, but also quite a lot of user visible
14 changes, including some **backward incompatibilities**.
15 As (still) usual, "s-nail -d" will show obsoletion warnings.
17 It brings noticeable improvements regarding scriptability and its
18 reliability, but also for interactive use cases, especially
19 notable to users is our completely new M(ailx)L(ine)E(ditor) that
20 supports rather real tabulator expansion and program-mode-context-
21 sensitive key bindings.
23 We now support macros with arguments, which can be `shift'ed,
24 a `return' status can be used, and a `vexpr' multiplexer offers
25 some arithmetic and string operations.  `commandalias'es are
26 recursive, further command modifier prefixes, like `ignerr', give
27 a hand that we otherwise could not offer.  In compose-mode the new
28 `~^' command escape allows some message and attachment access, and
29 can be used, e.g., to implement things like custom headers, and
30 has been especially designed for scripted access via the new
31 *on-compose-splice* and *on-compose-splice-shell* hooks.
33 S-nail will move (more or less) backward-incompatibly to sh(1)ell
34 compatible argument quoting (documented in "COMMANDS"), and an
35 increasing number of commands do support this already: new ones
36 exclusively, some old ones have either been switched (like
37 `localopts'), others -- noticeably `set' -- can be switched to the
38 new syntax with a `wysh' command modifier prefix.  E.g.:
40   ? define __xv {
41     # Be careful to choose sh(1)ell-style on _entire_ line!
42      localopts yes; wysh set verbose; ignerr eval "${@}"; return $?
43     }
44   ? commandalias call echo boo-boo
45   ? commandalias xv call __xv
46   ? xv list
47   ? commandalias xv '\'call __xv
48   ? xv list
50 Calling this `xv' for `list' will give more detailed command
51 information, including which kind of argument is used.
53 I have not managed to implement the three features i have started
54 this development cycle for, these are thus subject to further
55 development, just like wysh for message-list argument commands to
56 support, e.g., negation, wysh for `if' and consorts, and and and.
58 Credits, in order of commit appearance: Antonio Radici,
59 Aharon Robbins, Mike Frysinger, Predrag Punosevac, Michael Convey,
60 Hariskar, Rudolf Sykora, Martin Neitzel, Gavin Troy,
61 Salvatore Bonaccorso, Todd C. Miller, Sergey Matveev, Robert Elz,
62 Mantas Mikulėnas, Respiranto, Jens Schleusener, Walter Alejandro
63 Iglesias, Ralph Corderoy, David Levine, Lyndon Nerenberg,
64 Thomas Dickey, Afan, Justin Ellingwood, Ingo Schwarze,
65 Viktor Szépe, Gaetan Bisson, Juan RP, William Yodlowsky,
66 Hilko Bengen, Matthew Dillon, Colin Watson, Donald Mugnai,
67 Stephen Isard, Jürgen Daubert, Sven Neuhaus, trondd, Ismael Bouya,
68 Felipe Gasper, Paul Eggert, Dr. Werner Fink, Ken Hornstein,
69 Noel Chiappa, Random832, Doug McIlroy, Baptiste Daroussin,
70 Riccardo Ductor, Pietro Cerutti, Jörg Schilling, rain1, Xin LI.
72 We welcome Antonio Radici, Mike Frysinger, Predrag Punosevac,
73 Michael Convey, Rudolf Sykora, Todd C. Miller, Robert Elz,
74 Jens Schleusener, Walter Alejandro Iglesias, Thomas Dickey, Afan,
75 Justin Ellingwood, Viktor Szépe, Juan RP, Matthew Dillon,
76 Colin Watson, Donald Mugnai, Sven Neuhaus, Ismael Bouya,
77 Felipe Gasper, Paul Eggert, Dr. Werner Fink, Ken Hornstein,
78 Noel Chiappa, Random832, Doug McIlroy, Baptiste Daroussin,
79 Riccardo Ductor, Pietro Cerutti, Jörg Schilling, rain1, and
80 Xin LI in THANKS.
82 Apologies: Sergey Matveev.
83 Members of the Roff community which await progress.
85   mdocmx(7) anchors are denoted by a number-sign #: typing
86   "^A ANCHOR" while reading the man(1)ual in a capable less(1)
87   will scroll to the manual's Point-Of-Interest, and pointing
88   a web- browser to the "#ANCHOR" of the online manual works.
90 NOTES, ChangeLog (packager-affine)
91 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
93 * This release brings some backward incompatibilities, outlined
94   in the following.
96 * The configuration and build system has changed:
98   o Anything which was WANT_xy before is now OPT_xy, and
99     compiled-in paths and values, like PREFIX or PAGER, have
100     gained a VAL_ prefix (thus VAL_PREFIX and VAL_PAGER).
102     This is _not_ true for non-persistent or environmental values,
103     e.g., DESTDIR, CC, etc., and also not for the overwritable
104     program variables during configuration, e.g., $awk.
106   o SENDMAIL -> VAL_MTA, SENDMAIL_PROGNAME -> VAL_MTA_ARGV0,
107     MAILSPOOL -> VAL_MAIL.
108     And NAIL -> VAL_MAILX, though this is still a lie.
110   o The make system now needs config..build..install or
111     all..install or tangerine (config..build..test..install).
112     Some constants which some experts may want to fine-tune have
113     been moved to config.h.
115   o The `build' phase can be parallelized by setting the $MAKEJOBS
116     environment variable, e.g., "make MAKEJOBS=-j4 build".
117     Note this variable is not tracked in the configuration.
118     (Gaetan Bisson)
120   o Set the new OPT_CROSS_BUILD to avoid feature runtime tests,
121     only compile- and link-availability will be tested.  (Juan RP)
123   o VERBOSE is implemented straight, but must be given at
124     configuration time in order to become honoured.
125     (William Yodlowsky)
127   o ADDCFLAGS / ADDLDFLAGS -> EXTRA_CFLAGS / EXTRA_LDFLAGS.
129   o The LD_LIBRARY_PATH etc. building processes will skip any path
130     which contains the string "fakeroot".  (Hilko Bengen)
132   o We honour a set $SOURCE_DATE_EPOCH#? environment variable to
133     an extend that allows reproducible tests, which is why the
134     repository gained a [test-out] branch with some expected plain
135     text outputs.
136     (reproducible-builds.org; Colin Watson)
138     The new *log-prefix*#?  variable aids in improving the
139     reproducibility of error messages.
141   o These are upward compatible changes.
143 * "make OPENSSL_API_COMPAT=0x10100000 all" should work.
145 * Internal and environment variables are now explicitly _defined_
146   and _tracked_ after variable handling has been rewritten
147   completely.  Notes:
149   o This means that, e.g., "$ password=NOT_SECRET s-nail" will
150     **NOT** work no more, since *password*#? is an internal
151     variable!
153   o But if you do, e.g., "? set TMPDIR=~/tmp", then this will
154     also be reflected in the program environment (it is an
155     environment variable) and thus affect child processes.
157   o Therefore we no longer have `setenv' and `unsetenv'.
159   o To integrate any other environment variable transparently
160     into our variable management, the new command `environ'#?
161     needs to be used, e.g., "? environ set NEWVAR=value" or
162     "? environ link EXISTINGVAR".
164 - -H#? and -L#? have been decoupled:
165    it used to be -e#? -L#? instead!
167 - *NAIL_{HEAD,TAIL}* have been obsoleted in favour of
168   *message-inject-head*#? and *message-inject-tail*#?.
170   *NAIL_HIST{FILE,SIZE}* have been obsoleted in favour of
171   *history-file*#? and *history-size*#?.
173   *NAIL_EXTRA_RC* has been obsoleted in favour of
174   *mailx-extra-rc*#?.
176   *batch-exit-on-error* has been obsoleted by *errexit*, which
177   works just like the POSIX sh(1)ell "set -e" construct; the
178   `ignerr'#? command modifier (`-' for command escapes in compose
179   mode, and see below) can be used to ignore command errors even
180   then.  (This will remain even if we at some later time will
181   support at least some of the sh(1) constructs which "swallow"
182   failures with set -e.)
184   *bsdannounce* is obsolete, the feature is integrated in
185   *header*#? as this is much more useful.  (This is however also
186   dependent upon the also new but well-known $POSIXLY_CORRECT#?
187   <> *posix*#?, but that is just how it is; these affect more
188   behaviour, and increasing.)
190 - Colour support has been changed backward in- and upward (from
191   user interface side) compatibly, see the manual section
192   "Coloured display"#?.
194   + New commands: `colour'#? and `uncolour'#?.
195     You can define context-sensitive, terminal-capability-
196     sensitive settings, e.g.:
198       if terminal && [ "$features" =@ +colour ]
199         colour iso  view-header ft=bold,fg=magenta,bg=cyan
200         colour 256  view-header ft=bold,fg=208,bg=230 subject,from
201         colour mono view-header ft=bold
202         colour mono view-header ft=bold,ft=reverse subject,from
203       endif
205   + The variable *colour-pager*#? defines whether colour and font
206     attribute sequences should be generated when viewing something
207     in $PAGER#?.
209   + Set the variable *colour-disable*#? to turn colour off
210     without affecting established settings.
212   + It is deduced via termcap(5) (see below) whether the terminal
213     supports colors, e.g., "$ s-nail -Stermcap=Co#256".
214     This is also true if we don't have termcap support.
216   + Support for 256-colour terminals. (Gavin Troy)
218 - `source'#? series support shell pipes if the last character
219    of the "filename" ends with a vertical bar |, e.g.,
221       ? source 'gpg -qd ~/.s-nailrc-private.gpg |'
223 - Shell pipes are also supported as targets for `move'#?,
224   `copy'#? etc., yet unfortunately not with via a sh(1)ell token
225   parser, so that the target still has to be a single argument.
227       ? copy . '| cat; echo huhu'
229 - Support for custom headers via the new ~^#? compose-mode
230   command escape and in addition, or alternatively, with the
231   internal variable *customhdr*#?, which also can be covered by
232   `localopts'#?.  (Sergey Matveev)
234   + Support of $ORGANIZATION has been dropped.
236   + Command escape ~e#? supports _any_ header.
238   + Command escape ~^#? supports _any_ header.
240 - New -:#? command line option can be used to more easily select
241   which startup files should be loaded, e.g., -:/ loads none.
242   (Robert Elz)
244 - `account'#?s and *folder-hook*#?s now have `localopts'#?
245    enabled by default.
247 - A first simple form of compose-mode hooks has been implemented:
248   *on-compose-enter*#?, *on-compose-leave*#? and
249   *on-compose-cleanup*#? can be set to macros which get invoked
250   at appropriate times.
251   For the `resend' series there is *on-resend-enter*#? and
252   *on-resend-cleanup*#?: this is very likely to change once
253   true message access is possible even in this mode.
255   An even more powerful mechanism is available via the also new
256   *on-compose-splice* and *on-compose-splice-shell* hooks.
257   These are executed in child processes and communicate with the
258   parent via their standard input and output, and therefore can
259   do anything and act as if they were the user.
261   `localopts'#? are enabled and cannot be disabled (and extend
262   until the message is sent).
263   (Jens Schleusener, Rudolf Sykora)
265     ? set on-compose-splice=ocs
266     ? define ocs {
267       read ver
268       echo Splice protocol version is $ver
269       echo '~^header list'
270       read hl; vput vexpr es substring "${hl}" 0 1
271       if [ "$es" != 2 ]
272         echoerr 'Failed to read header list, bailing out'
273         echo '~x'
274       elif [ "$hl" @i!% ' cc' ]
275         echo '~^header insert cc Diet is your <mirr.or>'
276         read es; vput vexpr es substr "${es}" 0 1
277         if [ "$es" != 2 ]
278           echoerr 'Failed to insert Cc:, bailing out'; echo '~x'
279         end
280       end
281     }
283 - "The .netrc file"#?
285   + gained support for comments.
286     (Walter Alejandro Iglesias, Ralph Corderoy)
288   + `netrc'#? now has a "load" subcommand.
290   + the new *netrc-pipe*#? obsoletes OPT_AGENT and
291     *agent-shell-lookup*, and can be used to load an encrypted
292     .netrc file, e.g.:
294       ? set netrc-lookup netrc-pipe='gpg -qd ~/.netrc.gpg'
296     I.e., this is in usual .netrc syntax and thus possibly much
297     nicer than saying "? source 'gpg -qd ~/.credentials.gpg |'".
299 - termcap(5) / terminfo(5) support has been changed backward in-
300   and upward (from user interface side) compatibly, please read
301   "On terminal control and line editor"#?.
303   + OPT_TERMCAP is by default enabled.
304     The new, by default enabled, configuration option
305     OPT_TERMCAP_VIA_TERMINFO can be used to (try to) use
306     terminfo(5) instead.
308   + The variable *termcap*#? can be used to freely define or
309     override terminal capabilities, and *termcap-disable*#? will
310     disable interaction with the chosen library, leaving only
311     *termcap* in charge.
313   + The built-in line editor has been rather completely rewritten
314     to be the Mailx-Line-Editor (OPT_MLE, default yes), and
315     supports wide glyphs (if possible), infinite line lengths
316     (2 GB) and more.  Tabulator expansion is no longer an option
317     (but needs fnmatch(3)).
319   + Optionally (OPT_KEY_BINDINGS, default yes) it has become
320     possible to freely define key bindings for the MLE via the new
321     `bind'#?  and `unbind'#? commands.  These key bindings can
322     make use of termcap(5) and/or terminfo(5) names.  The MLE will
323     install a set of default bindings (unless there is a set
324     *line-editor-no-defaults*#?), more so with OPT_TERMCAP,
325     i.e., try "? bind*".
327     Sufficient support provided, one can now, e.g., type "p " and
328     then collect the message numbers to type, scrolling forward
329     and backward via key-bindings, without loosing the line
330     content, then commit the final line.
332   + OPT_EDITLINE and OPT_READLINE support have been dropped.
333     The new MLE should not miss anything.  Does it?
334     Tip: in an UTF-8 locale try "? !touch /tmp/hall{,öchen}" and
335     then autocomplete that: once, then ^Q, and again.
337 - `source'#? can be used in `call'#?ed macros.
338   What sounds so innocent replaced an entire machinery and got rid
339   of a brilliant idea of Kurt Shoens from the 70s, but which never
340   worked with Nail/Heirloom extensions, namely macros, and in the
341   right order.
342   Accompanying this -X#? can (dig multiline arguments and can) be
343   used to define macros and run them etc.  Should work:
345     $ s-nail -X'define x {' -Xversion -Xx -X'}' -X'call x'
346     $ s-nail -X'source \' -X'"echo version|"' -Xx
348   Macros can be `undefine'#?d from within themselves, and re-
349   `define'#?d.  It is still not possible to define macros
350   from within macros, and/or have inner macros, not to talk
351   about local scoping or anything more sophisticated such.
353 - -u#? / $LOGNAME#? ($USER) handling has been redefined,
354   and "-u USER" is now exactly the same as "-f %USER", and
355   $LOGNAME (and $USER) is actively set to the active user.  (Afan)
357   $LOGNAME#? is POSIX standardized and henceforth used and
358   preferred over $USER, which came from BSD.  (Todd C. Miller)
360 - In the future (at least non-message-list) argument handling will
361   be changed backward-incompatibly to be sh(1)ell compatible (and
362   thus POSIX standardized), see "Shell-style argument quoting"#?.
363   New commands use it already today (`bind'#?, `colour'#?,
364   `headerpick'#?), some others (most importantly, `set'#?) can
365   be forced to do so via the new `wysh' command prefix, as in:
367     ? wysh set message-inject-tail=$'\n--steffen'
368     ? bind base $'\cA,\x61' 'echo control-A and small a'
370 - We now actively manage *umask*#?: 0077 by default, but an
371   empty string will use the setting that is active upon startup.
372   Just like changes to (known) environment variables, this setting
373   will also be inherited by any child process.
374   (Walter Alejandro Iglesias)
376 - Anything SENDMAIL / *sendmail*-ish has been renamed to *mta*#?,
377   *mta-arguments*#?, *mta-no-default-arguments*#? and
378   *mta-argv0*#?.
380   The reason is that in v15 we won't even have *smtp*: it is just
381   another form of MTA, and thus obsolete by itself.
382   Note that *mta-arguments* is now parsed via the shell-token
383   parser, so the following ends up exactly as desired.
385     ? set mta-arguments='-t -X "/tmp/my log"'
387   For now we support a hack that understands a file:// URL in
388   *mta*, too, but that is also the default if there is no protocol.
389   E.g.: "? set mta=smtp://a:b@xy.z"
391 - The "spamd" *spam-interface*#? is obsolete.  I haven't tested
392   it since my main machine died, it is error prone since it assumes
393   internals of the spamassassin wire protocol, and there never was
394   a speed improvement over "spamc".  (However it could react upon
395   the "is-spam" state of a message, which "spamc" doesn't allow.)
397 - The new *inbox*#? variable will henceforth be looked up when
398   searching for a primary system mailbox (as in "? File %"),
399   followed by the usual $MAIL#? and compile-time defined local
400   mailspool search.  (Stephen Isard, Jürgen Daubert)
402 - New "failinvaddr" keyword for *expandaddr*#?.
404 - We finally "can" the so-called (by myself) "Dr. Problem" (a bit):
405   (Dr. Werner Fink)
407     $ </dev/null s-nail -d:/ -sTrödler 'Dr. D. Iet <z@a.k>' 2>&1 |\
408       grep To:
409     s-nail: >>> To: "Dr. D. Iet" <z@a.k>
411   This can be done via the new `addrcodec'#?, too, note this
412   supports multiple modes (and the `vput' command modifier):
414     $ echo 'addrcodec e Dr. Diet <to@fu.soj> Curd' | s-nail -#:/
415     "Dr. Diet Curd" <to@fu.soj>
417 - All commands with the string "codec" in their name use different
418   argument quoting, namely none at all, please read
419   "Raw data arguments for codec commands"#?.
420   This means that `urlcodec'#? (and `imapcodec'#?) has
421   slightly changed semantics.
422   And, while here: there is a new `shcodec'#?, too.
424 - We gained "Command modifiers"#?: `\'#? (avoid expansion of
425   `commandalias'#? es), `vput'#? (store result in variable),
426   `ignerr'#?  (ignore an error of the following command, even
427   if the new *errexit*#? is set), `wysh'#? (use shell-style
428   arguments).
430     $ echo 'vput cwd resvar;echo $resvar' | s-nail -#:/
431     /home/steffen/src/nail.git
433   And the usual sh(1) stuff: `return'#?, `shift'#?, `eval'#?,
434   plus a `xcall'#? stack-avoidance optimization (to be used in
435   place of a `call'#? which would be the last called command).
436   And an "expr(1) like thing", yet simple, `vexpr'#?.
438     $ echo 'vexpr + 1 2' | s-nail -#:/
439     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011
440     03 | 0x3 | 3
441     $ echo 'vput vexpr resvar + 1 2;echo $resvar' | s-nail -#:/
442     3
444   We actually start walking (*?*#?, *^*#?).
446     ? vput vexpr res regex 'bananarama' 'Bana(.+)' '\$1\$0'
447     ? echo $?/$^ERRNAME :$res:
448     1/NODATA ::
449     ? vput vexpr res iregex 'bananarama' '(.+)rama' '\$1\$0'
450     ? echo $?/$^ERRNAME :$res:
451     0/NONE :bananabananarama:
453   The command `vpospar'#? can be used to manage the stack of
454   positional parameters, i.e., much like "set --".
455   It also offers the possibility to save and restore the stack to
456   and from variables.  Etc.
458   Btw., to contact the maintainer (make.rc variables
459   VAL_CONTACT_WEB and VAL_CONTACT_MAIL):
461     ? echo $contact-web; eval mail $contact-mail
463 - `if'#? no longer performs automatic number conversion, we
464   use the explicit -lt, -gt etc. syntax of the sh(1).
465   Note: `if' will change to be almost identical to sh(1) if(1),
466   so please ensure proper test bracketing, even if it is less
467   convenient.
469   Moreover, the default string comparison mode has changed to
470   case-sensitive, just like in the shell.  This is because in the
471   future this crux with trigger characters will vanish and `if'
472   etc. will simply slurp in already expanded shell tokens, it will
473   act like the shell in that respect.  We have modifiers, though,
474   yet only "@i" for case-insensitivity, also for regex matches:
476     LC_ALL=C
477     i=`LC_ALL=C.utf8 s-nail -:/ -# -X '
478       \define cset_test {
479          \if [ "${ttycharset}" @i=@ utf ]
480             \echo $LC_ALL
481             \xit 0
482          \end
483          \if [ "${#}" -gt 0 ]
484             \wysh set LC_ALL="${1}.utf8"
485             \shift
486             \eval xcall cset_test "${@}"
487          \end
488          \xit 1
489       }
490       \call cset_test POSIX en_EN en_US
491    '`
492    [ $? -eq 0 ] && UTF8_LOCALE=$i
494 - Using an explicit proto:// prefix should get you the desired
495   thing apart of *newfolders*, e.g.:
497     ? File maildir:///tmp/x.mdir
498     ? copy * file:///tmp/x.mbox
500 - New variable *record-files*#? can be set to extend the meaning
501   of *record*#?.
503 - New variable *ifs*#? acts a bit like the sh(1)ell's $IFS for,
504   e.g., the new `read'#? command.
506   There is a `readctl'#? command which can be used to manage
507   the active channel used by `read'#?.
509 - The `~' alias for `call' is gone.
511 - `mimetype'#? only allows specification of a single type per
512   call, on the other hand no need to quote that.
514 ChangeLog
515 ^^^^^^^^^
517 - The manual has seen another major overhaul, all the variables
518   are now documented in a single, sorted list, and many
519   clarifications should have been added.  I hope it has become
520   a better read.
521   (Predrag Punosevac, Michael Convey, Hariskar, Rudolf Sykora,
522   Respiranto, Thomas Dickey, Donald Mugnai)
524 - To support RFC 1524 a.k.a. .mailcap files (see below) many
525   "trigger"-characters have been added for *pipe-TYPE/SUBTYPE*#?,
526   which may (rarely) affect existing values.
527   The .mailcap support itself is not yet implemented.
529 - *mime-counter-evidence*#? gained bit 4 (perform proper in-depth
530   content inspection as necessary; set to 0xE for all bits).
531   (Aharon Robbins)
533 - Maildir paths are now created recursively as necessary.
534   (Justin Ellingwood)
536 - -M#? and -m#? options have been added to enforce a special
537   send mode that will flag standard input / the given file with
538   the specified / detected MIME 'Content-Type:'.  This can be used
539   to directly send, e.g., HTML log output.
540   (Viktro Szépe, Ralph Corderoy)
542 - Disallow symlinks on writable files.  Note this requires
543   O_NOFOLLOW support for the operating-system-call open(2), but
544   which has been standardized a long time ago.
545   (Matthew Dillon)
547 - `retain'#?, `ignore'#? etc. now differentiate in between
548   From (the From: header) and From_ (the MBOX ident).
550 - In fact we now have a new `headerpick'#? command which
551   is a multiplexer for all retain and ignore lists used, call it
552   without arguments to see the current setting(s).
553   In v15 only `headerpick' and the standard-imposed wrappers
554   `retain' and `ignore' will remain, all other wrappers will
555   vanish.  Regular expressions can now be used if available:
557     ? headerpick
558     headerpick type retain blahblahblah cc date from \
559       mail-followup-to message-id openpgp reply-to subject to \
560       user-agent
561     #headerpick type ignore currently covers no fields
562     #headerpick save retain currently covers no fields
563     headerpick save ignore '^Original-.*$' '^X-.*$'
564     headerpick forward retain cc date from list-id \
565       mail-followup-to reply-to subject to openpgp
566     #headerpick forward ignore currently covers no fields
568 - `top'#? has been rewritten completely, `Top'#? is new.
569   It uses a built-in set of retain/ignore headers, but it is
570   possible to register a custom set via `headerpick'#?.
571   Also, *toplines*#? has been extended a bit and the new
572   *topsqueeze*#? variable may pimp your `top' experience.
574     ? headerpick top retain add subject
575     ? top
576     [-- Message  1 -- 87 lines, 4791 bytes --]:
577     Subject: Re: I can't dist to myself
579     I wrote:
580         3.22. bounce_delivered
582 - `features' has been dropped, `version'#? extended.
584 - The *prompt*#? handling has changed: we lost the capability to
585   expand \?, \@ and \$, instead new "private" variables *?*#?,
586   *account-name*#?, *mailbox-resolved*#?  and
587   *mailbox-display*#? have been introduced, and the prompt
588   is completely shell expanded (thus twice with `wysh' or in v15),
589   as if dollar-single-quote quoted.  We do support the reverse-
590   solidus escaped bracket notation for embedding characters which
591   should not be counted when calculating the width of the prompt.
592   The `colour'#? command has a slot for the prompt colour.
593   We gained *prompt2*#? as a second level prompt.
595     ? var prompt
596     wysh set \
597       prompt='?\${?}!\${!}[\${account}#\${mailbox-display}]? '
599 - The filename "-" can be used as a receiver, e.g.,
601     $ echo Hey,\ you | s-nail -:/ -Sexpandaddr -sUB -
603 - The -s#? command line option, the ~s#? command escape
604   as well as the corresponding slots of ~^#? will actively
605   strip [\r\n] from their value (Debian #419840).
607 - New `read'#? and `echoerr'#? commands, mostly for
608   *on-compose-splice*#?.
609   But also `echon'#? and `echoerrn'#?, which don't write
610   a trailing newline.
612 - New variable *r-option-implicit*#? may be helpful to those
613   who regulary need the functionality of the -r#? command
614   line option.  (Felipe Gasper, Martin Neitzel)
616 - By using new "pseudo-URLs" one can automatize the use of S/MIME
617   keys / (certificates / intermediate include certificates) with
618   passwords.  E.g., to drive bob@exam.ple, set
619   *smime-sign-cert-bob@exam.ple* to the private key / certificate
620   pair as usual, the password lookup will then be performed for
621   bob@exam.ple.smime-cert-key, bob@exam.ple.smime-cert-cert and
622   bob@exam.ple.smime-include-certs.
623   Like this the password can be stored in an encrypted .netrc file
624   when *netrc-lookup*#? and *netrc-pipe*#? are set, or it may
625   be stored in an encrypted resource file that has been loaded via
626   `source'#? as a simple *password*#? variable.
628   Note that the prompting that happens as a last resort of
629   password lookup will still interfere with a possibly running
630   $PAGER#? instance, dependent on the setting of *crt*#?, of
631   course.  Proper job control handling and recognizing that we are
632   running $PAGER when doing that prompt is a TODO for v15.  Sorry.
634 - Some commands, like `set'#?, `help'#?, `list'#?,
635   `mlist'#? etc., now react upon the setting of *verbose*#?
636   and(/or) *debug*#?.
638 - `write'#? uses iconv(3) as appropriate.
640 - *mbox-rfc4155*#? has first been dropped, and was then
641   reintroduced with different semantics.  Because, it can be
642   helpful if a messed up MBOX is read, in which case we henceforth
643   will warn you and point you to this:
645     ? define mboxfix {
646       \localopts yes; \wysh set mbox-rfc4155;\
647         \wysh File "${1}"; \eval copy * "${2}"
648     }
649     ? call mbox /tmp/bad.mbox /tmp/good.mbox
651   P.S.  Here you see how weird the current thing still is, in v15:
653     ? define mboxfix {
654       localopts yes; set mbox-rfc4155; File "${1}"; copy * -- "${2}"
655     }
657   And also in v15 we will not apply (proper) so-called MBOXO
658   quoting, but instead (simply MIME) re-encode mail messages.
660 - `call_if'#? is new and, different to "? ignerr call", silent
661   and not messing with the return status.
663 - The new *smime-ca-flags*#? and *ssl-ca-flags*#? can be used
664   to fine-tune X509_STORE_set_flags(3) a.k.a the X509 CA
665   certificate verification.
667     ? set ssl-ca-flags=partial-chain
668     ? wysh set smime-ca-flags="${ssl-ca-flags}"
670   Also, *ssl-curves*#? for TLSv1.3.
672 - Socket connections use TLS S(erver)N(ame)I(ndication) as
673   appropriate (RFC 7817).
675 - `alternate'#? checks arguments and exposes its setting via
676   the new *alternates*#? variable.
678 - A new `charsetalias'#? command.  (Pietro Cerutti, mutt#3925)
680 - New commands `filetype'#? and `unfiletype'#?: in the future
681   we will no longer know any builtin filetypes, in fact we already
682   simulate .gz etc. via the new mechanism as necessary:
684     filetype \
685        bz2 'bzip2 -dc' 'bzip2 -zc' \
686        gpg 'gpg -d' 'gpg -e' \
687        gz 'gzip -dc' 'gzip -c' \
688        xz 'xz -dc' 'xz -zc' \
689        zst 'zstd -dc' 'zstd -19 -zc' \
690        zst.pgp 'gpg -d | zstd -dc' 'zstd -19 -zc | gpg -e'
692 - ~<#? now offers a "- [HERE-delimiter]" mode for pasting etc.
693   (Ralph Corderoy)
695 - `exit'#? and `quit'#? take an optional exit status.
696   (That is not fixated yet, though.)
698 - We have a useful -h / --help output.  (Doug McIlroy)
700 git(1) shortlog (abbreviated)
701 '''''''''''''''''''''''''''''
703 f01291d extract_date_from_from_(): dig more invalid MBOXes (Antonio Radici)..
704 69bf721 *pipe-TYPE/SUBTYPE*: add "@" triggers and $NAIL_FILENAME_TEMPORARY..
705 bb5d0e2 *pipe-TYPE/SUBTYPE*: add "!" trigger ("needsterminal")
706 df8768b Add *mime-counter-evidence* bit 4 (Aharon Robbins)..
707 d3fe980 Ftmp(): drop "mode" argument (not wrong: Mike Frysinger)..
708 86159db nail.1: we support searching, really (Predrag Punosevac)
709 5b61a08 nail.1: talk about address lists (again) (Michael Convey)..
710 0eeffc4 nail.1: try improve states / MBOX etc. relation (Michael Convey)
711 43ea039 nail.1: what is an environment variable (Michael Convey)
712 13e0804 nail.1: fix typo (Hariskar (archlinux Wiki))
713 03d6af5 nail.1: more on sortability (Rudolf Sykora)..
714 4da9043 Not "binary", but "boolean" variables! (Predrag Punosevac)..
715 7064ef2 Add *message-inject-{head,tail}*, obsolete *NAIL_{HEAD,TAIL}*
716 4fde608 Add *history-{file,size}*, obsolete *NAIL_HIST{FILE,SIZE}*
717 36578d1 Add PS_SETFILE_OPENED (affects hooks), *bsdcompat*<>*emptystart*..
718 600d449 Drop the `inc' alias of and for `newmail'
719 5296040 Decouple -H from -L: it used to be -eL instead!
720 dad4e94 Obsolete *SYSV3*
721 c85f56d Support :d specifier for at least `from' (Martin Neitzel)..
722 30d0bb7 `netrc': add "load" subcommand to only load, not also "show"
723 b12e1ed Be more friendly when composing mails (Martin Neitzel)..
724 b50eac0 nail.1: use display/show not type/print (Michael Convey)..
725 6feafaf Add `search' alias for `from' (Predrag Punosevac)
726 a4e2612 Support 256-colour terminals (Gavin Troy)
727 16b57ab Drop `mono'+, change `colour' and `uncolour' commands..
728 d535db0 Implement `dotmove': move the "dot" up or down by one
729 c1c1ee5 `source': support shell pipes (if filename ends with "|")
730 8655aff Error framework: print UAGENT prefix (ident in pipes; Salvatore
731         Bonaccorso)
732 e96baaa Introduce $LOGNAME, the POSIX equivalent of $USER (Todd C. Miller)
733 0d0c523 Support |PIPE targets for `move', `copy' ++..
734 76e6364 Add `customhdr' (Sergey Matveev)..
735 ad58c91 Support *customhdr*, too (Sergey Matveev)..
736 6322e0a Support _any_ user header via ~e (Sergey Matveev)..
737 19b3afb Drop support for $ORGANIZATION in favour of `customhdr'
738 77d4f5c Fix SSL init order, change *ssl-rand-file* behaviour..
739 8daeda9 send.c:sendpart(): "support" malformed messages..
740 eddf684 Drop *print-all-chars*
741 f733f61 Don't set *dot* in -# batch mode
742 5d52578 Add -: command line option (Robert Elz)..
743 53b5f07 README: use git(1) --single-branch (Mantas Mikulėnas)
744 420131f Fix mispelling: can|to be send->sent (Respiranto (archlinux Wiki))
745 0dd85b1 n_iconv_open(): use *charset-unknown-8bit* also for "binary"..
746 3fd94e3 Default `localopts' to YES for `account' and *folder-hook*s!
747 983d22f `if'+: allow "if ${VARNAME}" in addition to "if $VARNAME"..
748 d6902e1 Add *on-compose-{enter,leave}* hooks (Jens Schleusener, Rudolf
749         Sykora)..
750 abf2e5d .netrc: support comments (Walter Alejandro Iglesias, Ralph Corderoy)..
751 37e0c26 nail.1: .netrc comma separator was in original Berknet parser! (Ralph
752         Corderoy)
753 7e85aa9 Drop WANT_EDITLINE support..
754 512069b Rewrite for a generic termcap(5) interface..
755 40522c3 nail.1: use -v option to cat(1) if available (Thomas Dickey)
756 cf3ccfe Deduce colours via *termcap* instead!; support all/*..
757 64eabef Turn NCL into M(ailx) L(ine) E(ditor)..
758 27f3e9d Add terminfo(5) support (via WANT_TERMCAP_PREFER_TERMINFO)..
759 1aa64b6 Add WANT_KEY_BINDINGS..
760 d935e65 (BWDIC!) Allow `source' in `call'ed macros..
761 c8c1393 n_lex_input(): truly support line continuation via backslash..
762 7f52ae7 make.rc+: add WANT_NOMEMDBG to allow valgrind(1)+ with DEBUG/DEVEL
763 2497240 homedir: if not $HOME, use pw_dir (of $LOGNAME or getpwuid())
764 94b3635 (BWDIC!) make.rc: add defaults _here_ (as VAL_xy, e.g., VAL_SENDMAIL!)
765 f0ac705 (BWDIC!) Rewrite variable handling..
766 724751e nail.1: drop `(un)?setenv' and *bsdset*; add `environ'
767 f4577e6 FIX (fix?) `localopts'..
768 d8f7cd7 (BWDIC!) Redefine -u / $LOGNAME / $USER (Afan)..
769 e337e00 Support expansions in $MAIL!; more on `account's (Afan)..
770 d596d74 Compare *newfolders* case-insensitively (Justin Ellingwood)..
771 57744f9 Redefine *folder* / getfold->folder_query() / *HOME* (Justin
772         Ellingwood)..
773 3c57c83 n_path_mkdir(): create recursively as necessary (Justin Ellingwood)
774 66553bc `list': with non-WS argument, don't sort alphabetically
775 b95e6be Introduce `wysh' command prefix to change argument parser..
776 08b8f48 Only support sh(1)-style quoting for some new commands..
777 67c2acb (BWDIC!) Only use new sh(1)-style quoting for attachments!
778 f4b0153 (BWDIC!) Only use new sh(1)-style quoting for `write'
779 a89e1e3 `remove': use sh(1)ell-style quoting
780 858374b Drop wordexp(3), instead unroll via fnmatch(3)..
781 0945726 MLE: change HT expansion..
782 0bbe981 nail.1: fix spelling errors as by igor(1) (Ingo Schwarze)
783 f1a775b Add -M and -m options (Viktor Szépe, Ralph Corderoy)..
784 42b42da `list': include argument-type etc. if *verbose*
785 79f2053 `if'+: support sh(1)-style comments on the line..
786 1bd8e48 Add *umask*, and set actively (Walter Alejandro Iglesias)..
787 6b1cd93 Now with *umask*, just drop fchmod(2)++ calls (Walter Alejandro
788         Iglesias)
789 2b45cd0 Add *netrc-pipe*: allows e.g. encrypted .netrc files
790 af8261e Obsolete WANT_AGENT / *agent-shell-lookup* (Sorry!)
791 ba22166 Change make targets; add $MAILJOBS; don't track $DESTDIR (Gaetan
792         Bisson)..
793 cd244b1 Add WANT_CROSS_BUILD make.rc option (Juan RP)..
794 95141f6 Tweak VERBOSE handling (William Yodlowsky)..
795 73545ad Rename ADD(C|LD)LAGS to EXTRA_(C|LD)FLAGS..
796 ca81646 make.rc, mk-conf.sh: allow y/n booleans
797 d74a18a mk-conf.sh:path_check(): skip any "fakeroot" path (Hilko Bengen)
798 7ce6a17 (BWDIC!) nail.rc: nodot, emptystart, fullnames, m-c-e=0xE; pimp PDF
799         handler
800 44a3be6 sendout.c:__savemail(): try to file_lock() *record*
801 5ef5261 cmd2.c:save1(): try to file_lock() target of `save'/`move'/etc.
802 10990e4 Add n_O_NOFOLLOW, disallow symlinks for writable files (Matthew
803         Dillon)..
804 c83e153 (BWDIC!) Require explicit "from_" to `retain' etc. From_ lines!
805 d7a15e4 page_or_print(): query $PAGER environment, use it
806 1dc9bb6 (BWDIC!) Make `top' real-life capable!  Add `Top', *topsqueeze*..
807 df4954c Add $SOURCE_DATE_EPOCH (reproducible-builds.org; Colin Watson)
808 dc92f2c savedeadletter()->sendout.c; tweak POSIX compliance (Ralph Corderoy)
809 8a3638c MLE: add `bind' and `unbind' etc...
810 4c93f66 (BWDIC!) Obsolete *sendmail*++ in favour of *mta*++; obsolete *smtp*..
811 284db64 Obsolete *spam-interface*=spamd..
812 61aac0f All: OPT_ not WANT_, VAL_XY not XY..
813 45d488d README: add The Mail Archive -- Gmane.org reduced to NNTP
814 48eb7da SEND_TODISP(_ALL)?: append newline if message does have no final one
815 63bf464 (BWDIC!) Drop readline(3) support..
816 863f1e8 tty.c,MLE: gracefully honour *line-editor-disable*++..
817 844bedb Support LEXINPUT, thus `bind', contexts..
818 b9e4e61 Drop `features', change `version', adjust make system..
819 20f3cd2 nail.1: more explicit `set' references instead of saying 'Set' (Donald
820         Mugnai)..
821 == Preview 1 ==
822 1b462ed -#: also set *MAIL* to /dev/null
823 2d53b46 url_parse(): better take better care for path parts (Stephen Isard)..
824 21f0eaa mk-conf.sh: find terminfo on Sun (Thomas Dickey)..
825 4496e9a Many: drop support for *mbox-rfc4155* - a no-brainer..
826 e4ddaa8 Change n_iconv*() protos, add enum n_iconv_flags (Ralph Corderoy)..
827 83313f1 Allow -X options to take multiline arguments..
828 a1eee83 Add a RFC 6068 url_mailto_to_address() hack for List-Post:
829 99e96f3 FIX "," message specification (since [1c4b8c9], v14.8.4)..
830 1587069 FIX [44cec1f] (Fix "address" message specifications (John Dodson))..
831 e40e181 nail.1, nail.rc: set *sendwait* by default (Ralph Corderoy)
832 3051546 Move `help' to lex_input.c, show argument type with *verbose*
833 0ef4291 `z': add ^: goes to first screen; fix max calc for 0 modulos
834 7adcf99 `write'++: !interactive: urlxenc() attachment paths (Ralph Corderoy)..
835 b14aae7 `write'++: !interactive:.. But now, really (Lyndon Nerenberg, David
836         Levine)..
837 20082ee THANKS: David Levine and Lyndon Nerenberg
838 5270bf1 Simplify *folder* (implicit trail solidus) (Stephen Isard, Ralph
839         Corderoy)
840 f1313c0 Add `urlcodec', obsolete `url{en,de}code'
841 a638bcf Add *typescript-mode*, set it for -# (Ralph Corderoy, Martin
842         Neitzel)..
843 053e19f Add *inbox* (Stephen Isard, and Jürgen Daubert)..
844 20e3240 Add OPT_ALWAYS_UNICODE_LOCALE (Predrag Punosevac)..
845 14b5a3a Make combinetime() overflow safe (Vincent Lefevre)..
846 2bf0888 getmsglist(): if user gives A-B, try fulfill even in threaded mode
847 == Preview 2 ==
848 3fa035ac mk-conf.sh: fix bmake(1)/portable, it fails to import
849         $CFLAGS/$LDFLAGS
850 7a657d9c cc-test.sh: add S/MIME disproofs via smime(1) (Sven Neuhaus)..
851 a445996e THANKS: Sven Neuhaus
852 de8f750b n_termcap_suspend(): oops, fix capability reverse ke<>te, te<>ke
853 9e08fe35 README: go away from Gitlab; hello, unagitated repo.or.cz!
854 ae86c884 cmd1.c:__hprf(): compensate for add. bytes of UTF-8 seq.(s) (Martin
855         Neitzel)
856 38426102 extract_header(): FIX: multiple In-Reply-To: names are allowed!
857 0472b0d6 More or less completely rewrite memory.c..
858 096e6021 Allow Base64 and QP en- and decoding to fail
859 d91a4bd0 More or less completely rewrite mime_enc.c..
860 d33285fa `bind': new "default" context and changed "base" semantics..
861 abf00559 (BWDIC!) Rewrite prompt handling via new n_tty_create_prompt()..
862 38fd5de7 (BWDIC!) *encoding*: change default to base64, provide
863         documentation..
864 83115c3b Allow - as an output filename..
865 675d825b nail.rc, nail.1: set *editheaders* by default, and pimp "A starter"
866 44ff5125 TLS/SSL: make OPENSSL_API_COMPAT=0x10100000 clean..
867 03309960 The time has come: $POSIXLY_CORRECT, *posix* have arrived
868 975e6869 (BWDIC!) Only rm sysboxes, unless *posix* (Walter A. Iglesias,
869         trondd)..
870 a3a1d38e Add `headerpick'; Localize stuff, and rename ignoretab.c ->
871         ignore.c..
872 81e33751 Throw away file_expand() (Ismael Bouya)..
873 f1fdc933 THANKS: Ismael Bouya
874 3779baad Obsolete -E and -B (-> STDOUT always LBF, STDIN with -#)
875 0352f2f6 -s, ~s: normalize NL/CR characters (Debian #419840)
876 791c5e97 Give error if compose failed (later better; Debian #37104)
877 5026ea36 MLE: take advantage of new "default" `bind' context
878 7745ea13 cmd_tab.h: allow `source', `source_if' and `shell' during composing?!
879 c7d42236 Add *on-compose-done-shell* hook
880 e4499f98 Add ~^ plumbing command escape
881 d8737937 Add a `read' command (like read(1), but yet a bit basic)
882 f8e9cc30 Drop `customhdr' again (keep *customhdr*): `~^' is better!
883 0824682c collect(): fix twice dump of -q file (since [d6902e1], 2016-05-03)
884 5ae556f8 Add *r-option-implicit* (Felipe Gasper, Martin Neitzel)..
885 534fd725 THANKS: Felipe Gasper
886 9fc22b15 Final step to support Base64 with multibyte charsets..
887 a8897b02 Add an *on-compose-done* macro (running in a subprocess)
888 645e44ec BWDIC! Add `echoerr'; FIX *bang* (bwdic!); and some cmd*.c ordering
889 629035e1 Dump to a "-" file recipient even with *debug* enabled!
890 33709163 nail.1: some more words for *inbox*, and such sort (Stephen Isard)
891 88c19049 mk-release.inc: place OpenPGP signatures last (learned from Paul
892         Eggert)
893 ebf2a584 THANKS: Paul Eggert
894 3d7835fc (BWDIC!) Extend semantics of -a and `~@' (bwdic!); attachments for
895         `~^'..
896 2b33a8cb Add new "failinvaddr" keyword for *expandaddr*
897 0ede309c Rudely fix the RFC 5322 dot-atom, the "Dr. Problem" (Dr. Werner Fink)
898 261f205b THANKS: Dr. Werner Fink
899 e441efb4 Integrate S/MIME passwords into usual credential lookups (a bit)..
900 1ad6817d nail.1: disable "The Mailcap files" for v14.9.0; sigh and sorry
901 == Preview 3 ==
902 f797c27e FIX privsep.c, yes, vulnerability (wapiflapi)..
903 847a21b5 THANKS: wapiflapi
904 f2699449 FIX privsep.c vulnerability, II (forgot hostname!) (wapiflapi)
905 303d46cd FIX [3d7835fc] aka `~^' attachments, especially Content-ID: (Ralph
906         Corderoy)
907 4ce4eb55 privsep.c: and just verify the box is also in CWD (wapiflapi)
908 88253be0 send.c:sendpart(): iconv(3) when `write'ing to a file!
909 1b1d7184 *on-compose-leave*: allow *autob?cc* from within
910 374ccb98 Implement some command modifiers, allow recursive `ghost' expansion..
911 ef903a66 Sigh.  So, reintroduce *mbox-rfc4155*, but slightly different!
912 0dc7ad9b Disallow turning off `localopts' in compose-mode hooks..
913 25d9e6e2 Generate Content-ID: as applic. (Ralph Corderoy, Ken Hornstein, David
914         Levine)
915 17706f28 THANKS: Ken Hornstein
916 76583f83 (Heavily) Tweak [8daeda90], "really support" malformed messages..
917 b8bcff9d Implement `call_if'
918 e6895402 main.c:_setup_vars(): verify $HOME and $TMPDIR
919 084d7e9e (BWDIC!) NAIL_ -> MAILX_, or even drop!..
920 24fe9387 `show': no more colours, they counteract its purpose!?!
921 b034478f INSTALL,makefile: $MAKEJOBS, not $MAILJOBS
922 8af80164 `call': parameters via *[*@#]*, *[1-9][0-9]**; add *?*, drop
923         *-exit-status*
924 4c7be869 `file'+: reallow globbing for arguments, fnmatch(3) is save!
925 8389819e Add *-alternates*, check `alternates' arguments
926 c6e0b04e Implement `shift', to shift macro parameters
927 6c39d928 Security fix: never fall back to getenv(3)..
928 65bb8d98 Implement `return', to return from macros and accounts
929 4eadbd76 Support getrandom(2); revert stupid [5d345bd0]: OpenBSD has
930         arc4random(3)!
931 c11ef2cb The lunatic is on Solaris..
932 b274e20a Improve *expandaddr*=failinvaddr even interactive, e.g., with ~e..
933 b421c15b (BWDIC!) Drop usage of strtou?l() in favour of our own n_idec_*()..
934 682a7595 (BWDIC!) Add n_source_inject_input(), get rid of some hacks..
935 57e84415 Implement `vput' modifier: store result in variable..
936 197bea7c Implement `addrcodec'
937 437da9fd (BWDIC!) New `urlcodec' semantics
938 cd0cfc16 Implement `vexpr', something analogues to expr(1)
939 3e40e899 `call', `~': do not require `wysh' for new quoting rules
940 ce8c357c Implement `eval'
941 0ff45bde Fix *[*@#]*/*[1-9][0-9]** access corner cases; allow over-`define's..
942 acc9b2f3 *reply-strings* was falsely documented as *reply_strings*..
943 70e9de08 `history': support relative to top access (negative numbers)
944 c8f6c18d `ghost': avoid self-recursion
945 6409c886 nail.1: clarify/FIX doc. of \cX (Noel Chiappa, Random832)..
946 90bdf7e4 THANKS: Noel Chiappa
947 e0bf944d THANKS: Random832
948 5a1c023c nail.1: furtherly clarify doc. of \cX (Doug McIlroy)..
949 fb88d4fb THANKS: Doug McIlroy
950 a396678a Implement `echon' and `echoerrn' ("echo -n" and "echo >&2 -n")
951 c5197719 cmd_tab.h: `wysh' for more commands!
952 d33294c2 mk-release.inc: use %B for $DATE_MAN (Baptiste Daroussin)..
953 ad34b768 THANKS: Baptiste Daroussin
954 f53248dd Support `vput' for `cwd'
955 eafa9411 (BWDIC!) Defaults for *datefield{-markout-older}* (Debian #855582;
956         r.ductor)..
957 871a1e3f THANKS: Riccardo Ductor
958 a256ebb2 (BWDIC!) sendout.c:__mta_start(): with SMTP *mta*, do not send to
959         aliases!
960 5ab93627 MLE: set FEXP_NOPROTO for mle-complete expansions (Ralph Corderoy)
961 78c30e08 `read': work more like shells..
962 ada72661 ~<: add "- [HERE-delimiter]" for pasting etc. (Ralph Corderoy)
963 5669e8a2 `vexpr': add "random" subcommand
964 acb887b4 (BWDIC!) *mta-arguments*: parse via shell-style quoting
965 9cddf95c (BWDIC!) For all shell commands, use shell-style quoting
966 72faa445 New quoting rules for `unset', `varshow', `varedit'
967 ceaac3b7 `vexpr': add "hash" subcommand
968 96888b9a Add *{smime,ssl}-ca-flags*..
969 3bfd2182 Use TLS S(erver)N(ame)I(ndication) as appropriate (RFC 7817)
970 d4d46c42 Add `charsetalias', and use it (Pietro Cerutti, mutt#3925)
971 c9051911 THANKS: Pietro Cerutti
972 72b43d61 README: Add "Security record" section
973 f83564ea c_[Ss]croll(): use new shell-style argument quoting
974 63a167f8 `source', `source_if': use new shell-style argument quoting
975 5ce2b406 (BWDIC!) FIX false decision: for `if' etc., add -le,-gt.. operators..
976 f3404bc1 (BWDIC!) Redefine all CODECS, add `shcodec', change `addrcodec'..
977 215c5cc2 Our own layer onto errno, yet too high
978 911bf9d1 Add *^* multiplexer; yet $^ERR{,DOC,NAME}{,-xy}..
979 65e2b75f Redefine VIP handling of variables (Ralph Corderoy)..
980 8235d440 Implement `xcall' stack-avoidance optimization
981 5e75768e Finally add `sleep' (to be able to test ^C more easily)
982 6c8b5c77 `headerpick': no more multiplexer, add `unheaderpick'
983 1c342dd5 C****Y BSD signal handling!  Try improve ^C stability..
984 90529c5f Add `(un)?commandalias', obsolete `(un)?ghost'
985 5fd6da65 (BWDIC!) No!  Let $! be errno, and $? the sole exit status..
986 f7f2781b `addrcodec': add `skin' subcommand, add an `encode' mode
987 59cb4714 Add *log-prefix* (with i3val), for reproduceabilities sake
988 658567b5 (BWDIC!) make.rc,mk-conf.sh: VAL_NAIL -> VAL_MAILX
989 == Preview 4 ==
990 952a52b7 Improve shell parser sequencing; changes \c@..
991 9ab5c1ef CRY OUT LOUD and tweak/explain the latter!
992   [This "latter" not _that_ latter]
993 8855fdd6 Obsolete *bsdannounce*, cover it via *header* (unless *posix*)
994 eabb7eaf (BWDIC!) Add `(un)?filetype', obsolete *file-hook**, .gz etc.
995         support++..
996 41f21c2a `charsetalias', `filetype', `shortcut': show given with one arg
997 c35072cb Add *build-os{,env}* and *version-date*
998 782e53f4 Support `vput' for `!'
999 af56d082 (BWDIC!) c_varedit(): do not strip ANYTHING from user data!
1000 4676f016 `vexpr': add "makeprint" subcommand
1001 162cafb7 *mime-counter-evidence*, bit 4: allow "soft" controls (Jörg
1002         Schilling)..
1003 0ee3f647 THANKS: Jörg Schilling
1004 fc1e07dd a_nag_altnames: n_strlist* instead of char**; "alternates -": clear!
1005 9d20238d Extend $SOURCE_DATE_EPOCH coverage to randoms+..
1006 7039d7f4 Outsource some constants to new config.h; use mk-* for mk stuff
1007 6954954d Support protocol:// prefix to fixate++ `file'++ type
1008 90861930 Readd removed fflush()/fseek() in between read and write..
1009   [That should credit Jörg Schilling indeed]
1010 aae47707 Tweak previous, and include O_CREAT in "a+" (Jörg Schilling)..
1011 c477c146 Add OPT_ASAN_{ADDRESS,MEMORY} options..
1012 c377e332 Ensure *mta* and *mta-argv0* have default values (again)
1013 fa874a8e Add VAL_CONTACT_{MAIL,WEB}, and *contact-{mail,web}*
1014 3e4441f8 a_main_usage(): new synopsis (Doug McIlroy)
1015 afce84e1 Rework test framework a bit, introduce [test-out] branch
1016 5bfdcde7 (BWDIC!) Add *record-files*; fix *record* for `[Rr]esend' with only
1017         files
1018 4898618e Maildir: add test; change to Courier filenames, Torek hash++
1019 969f7059 `history': show mode: change output, act on *verbose*+
1020 17b91f60 Do not "imply *dot*" with *ignoreeof* - unless *posix*
1021 7457ac57 MLE: allow hist-{,srch-}fwd to start history lookup
1022 539c510c Add *ifs* (and *ifs-ws*) variables
1023 c6a93f72 `read': support and split as indicated by *ifs*
1024 fc10001f Drop the `~' `call' "alias", it always has been a bad idea..
1025 01d99c30 `vpospar': manage positional parameters, à la "set --", but
1026         round-trip
1027 0b7f9d38 `read': trim_ifs(), $?/$! semantics rewrite; fix -1 input error case
1028 3659cffa Add VAL_MIME_TYPES_{SYS,USR} to make.rc (from config.h)
1029 f99c672b Add *ssl-curves* (for TLSv1.3)
1030 2aab72f6 Add `readctl' command..
1031 8a8b0478 Obsolete `[Rr]edirect'
1032 8f61025b FIX icase hmaps (`charsetalias', `filetype', `mlist') (rain1)
1033 a794370f THANKS: rain1
1034 95c24391 Pass through the real exit status of command from `!'
1035 f892438e Fix all `spamXY' cmds and `mbox': do not allow deleted+ msgs
1036 2e6a811d a_termcap_init_var(): numerics not necessarily decimal (Thomas
1037         Dickey)..
1038 9d6b190d `~^ header': add `remove-at', test in t_behave_compose_hooks ++..
1039 9d58267f config.h+: add n_PATH_DEVNULL, use it instead of hardcoding (Xin LI)
1040 ae55f33d THANKS: Xin LI
1041 a6b934bf (BWDIC!) `mimetype': only support one type per call (no more quotes!)
1042 eb237db8 (BWDIC!) `if'+: add operator modifiers; change defaults:
1043         case-sensitive!
1044 1acdc481 Command escapes: support $!/$?, and honour *errexit* (somewhat)
1045 2228d220 `shell': support $! and $?
1046 71c647a8 (BWDIC!) Add `partview', change MIME part handler semantics..
1047 f71daf4e Tweak splice hooks, and, eh, pfffh!!, n_child_wait()!
1048 dd94be65 ~[Rr]: "- DELIM": may need to quote delim in future
1049 bcfeecbf Introduce *on-compose-cleanup* (we don't support roff .env's...)
1050 62358d22 More `alternates' processing: a 2nd "pure", non-extended run
1051 e9665a17 `echoerr': use error ring queue if interactive and available
1052 4099f8ae `shift': _allow_ in hook/account if stack created via `vpospar'!
1053 e1ed6492 Change *on-compose-{enter,leave}* environment + fixes..
1054 d41fc323 Better hook support: *mailx-{raw,orig}-* a.k.a.
1055         Mailx-{Raw,Orig}-From:..
1056 0869563c Support *on-resend-{enter,cleanup}*..
1057 077f5299 Add n_locale_init(), track $LC_{ALL,CTYPE} and $LANG (for
1058         *ttycharset*)
1059 2f5e3b9e `exit', `quit': support optional exit status argument
1060 0bcd8428 cc-test.sh: use ourselfs when detecting UTF-8 locale..
1061 4009dc54 `xcall': simply be `call' if used from non-macro context
1062 027513b0 a_folder_info(): print "+[FOLDER]rest" if under folder (as
1063         applicable)
1064 3606b399 (BWDIC!) Fix *imap-delim* behaviour..
1065 711ea310 Actively forbid copy from POP3 to IMAP
1066 == RC 1 ==
1068 Appendix
1069 ^^^^^^^^
1071 The complete changelog of commits in between two versions OLD and
1072 NEW can be inspected by using the git(1) `log' command:
1074   $ git log --reverse --topo-order --abbrev-commit OLD..NEW
1075   # Only topic branch headers (--no-merges for content commits only):
1076   $ git log --oneline --reverse --topo-order --merges OLD..NEW
1077   # Same, but truly accessible:
1078   $ git log --oneline --reverse --topo-order --merges --parents OLD..NEW |
1079     while read c1 c2 c3 c4 c5 c6; do
1080       printf "%-24s: \$ git log --oneline --no-merges %s ^%s\n" \
1081         "${c6}" "${c1}" "${c2}";
1082     done
1084 Entries for the S-nail releases before v14.9.0 have been cut off
1085 before release v14.9.0 and can be found in the git(1) repository:
1087   v14.8.0 - v14.8.16: $ git show v14.8.16:NEWS
1088   v13     - v14.8.5 : $ git show v14.8.5:NEWS
1089   9.0     - 12.5    : $ git show heirloom:ChangeLog
1091 Also accessible via the HTTPS?, just replace X.Y.Z accordingly:
1092   https://git.sdaoden.eu/cgit/s-nail.git/tree/NEWS?h=vX.Y.Y
1093 For even older releases you need to look into the [timeline]
1094 branch, but no changelog has been administrated for them.
1096 Remarks:
1097 The content has been vaporised.  Ways to access the leakage are
1098 documented in the newest announcement at the top of this file.
1100 # s-tm-mode