Bump S-nail v14.9.0-pre4, 2017-04-13
[s-mailx.git] / NEWS
blob0fa62483cdcc17ff7dedf9a95548d32762e893c9
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-05-??
5 ---------------------------------------
7   Preview 4, 2017-04-13(+55min):
8   This is not a release candidate because some functionality is
9   missing still:
10   - the ~^ command escape needs new subcommands remove-at and
11     remove-addrs, so that, e.g., the new *alternates* variable
12     list can be manually removed with a single command.
13   - the command escapes must learn to manage $? and $!.
14   - also, i want a `-' command modifier for command escapes, in
15     equal spirit to the new `ignerr' command modifier, so that,
16     e.g., "~-:noSuchCommand" will effectively be "ignerr
17     noSuchCommand" and thus not exit even with *ignerr* set.
18     The interaction of *errexit* and command escapes is not yet
19     proper.  (And i hope the `-' is known from `make', sigh.)
20   - disable all MIME handlers which do not integrate into normal
21     output, i.e., are not "copiuous" output.  This of course
22     requires a new `mimeview' or similar command, and this is
23     a problem: we have it all, but the code paths have nothing in
24     common.  But i will not ship 14.9.0 with the current,
25     completely unrestricted MIME handlers enabled.
26   - try (hard) to reinstantiate IMAP.
28   + If you tried something with -pre3, and it did not work: please
29     try again!
31 This is a major feature release which took about ~19 months (21
32 less two) of development to complete, and which imposed massive
33 changes under the hood, but also quite a lot of user visible
34 changes, including some **backward incompatibilities**.
36 It brings noticeable improvements regarding scriptability and its
37 reliability, but also for interactive use cases, especially
38 notable to users is our completely new M(ailx)L(ine)E(ditor) that
39 supports rather real tabulator expansion and program-mode-context-
40 sensitive key bindings.
42 We now support macros with arguments, which can be `shift'ed,
43 a `return' status can be used, and a `vexpr' multiplexer offers
44 some arithmetic and string operations.  `commandalias'es are
45 recursive, further command modifier prefixes, like `ignerr', give
46 a hand that we otherwise could not offer.  In compose-mode the new
47 `~^' command escape allows some message and attachment access, and
48 can be used, e.g., to implement things like custom headers, and
49 has been especially designed for scripted access via the new
50 *on-compose-splice* and *on-compose-splice-shell* hooks.  
52 S-nail will move (more or less) backward-incompatibly to sh(1)ell
53 compatible argument quoting (documented in "COMMANDS"), and an
54 increasing number of commands do support this already: new ones
55 exclusively, some old ones have either been switched (like
56 `localopts'), others -- noticeably `set' -- can be switched to the
57 new syntax with a `wysh' command modifier prefix.  E.g.:
59   ? define __xv {
60      localopts yes; wysh set verbose; ignerr eval "${@}"; return $?
61   }
62   ? commandalias call echo boo-boo
63   ? commandalias xv call __xv
64   ? xv list
65   ? wysh ghost xv '\'call __xv
66   ? xv list
68 Calling this `xv' for `list' will give more detailed command
69 information, including which kind of argument is used.
71 I have not managed to implement the three features i have started
72 this development cycle for, these are thus subject to further
73 development, just like wysh for message-list argument commands to
74 support, e.g., negation, and wysh for `if' and consorts.
76 Credits, in order of commit appearance: Antonio Radici,
77 Aharon Robbins, Mike Frysinger, Predrag Punosevac, Michael Convey,
78 Hariskar, Rudolf Sykora, Martin Neitzel, Gavin Troy,
79 Salvatore Bonaccorso, Todd C.  Miller, Sergey Matveev, Robert Elz,
80 Mantas Mikulėnas, Respiranto, Jens Schleusener, Walter Alejandro
81 Iglesias, Ralph Corderoy, David Levine, Lyndon Nerenberg,
82 Thomas Dickey, Afan, Justin Ellingwood, Ingo Schwarze,
83 Viktor Szépe, Gaetan Bisson, Juan RP, William Yodlowsky,
84 Hilko Bengen, Matthew Dillon, Colin Watson, Donald Mugnai,
85 Stephen Isard, Jürgen Daubert, Sven Neuhaus, trondd, Ismael Bouya,
86 Felipe Gasper, Paul Eggert, Dr. Werner Fink, Ken Hornstein,
87 Noel Chiappa, Random832, Doug McIlroy, Baptiste Daroussin,
88 Riccardo Ductor and Pietro Cerutti.
90 We welcome Antonio Radici, Mike Frysinger, Predrag Punosevac,
91 Michael Convey, Rudolf Sykora, Todd C. Miller, Robert Elz,
92 Jens Schleusener, Walter Alejandro Iglesias, Thomas Dickey, Afan,
93 Justin Ellingwood, Viktor Szépe, Juan RP, Matthew Dillon,
94 Colin Watson, Donald Mugnai, Sven Neuhaus, Ismael Bouya,
95 Felipe Gasper, Paul Eggert, Dr. Werner Fink, Ken Hornstein,
96 Noel Chiappa, Random832, Doug McIlroy, Baptiste Daroussin,
97 Riccardo Ductor and Pietro Cerutti in THANKS.
99 Apologies: Sergey Matveev.
100 Members of the Roff community which await progress.
102   mdocmx(7) anchors are denoted by a number-sign #: typing
103   "^A ANCHOR" while reading the man(1)ual in a capable less(1)
104   will scroll to the manual's Point-Of-Interest, and pointing
105   a web- browser to the "#ANCHOR" of the online manual works.
107 NOTES, ChangeLog (packager-affine)
108 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
110 * This release brings some backward incompatibilities, outlined
111   in the following.
113 * The configuration and build system has changed:
115   o Anything which was WANT_xy before is now OPT_xy, and
116     compiled-in paths and values, like PREFIX or PAGER, have
117     gained a VAL_ prefix (thus VAL_PREFIX and VAL_PAGER).
119     This is _not_ true for non-persistent or environmental values,
120     e.g., DESTDIR, CC, etc, and also not for the overwritable
121     program variables during configuration, e.g., $awk.
123   o SENDMAIL -> VAL_MTA, SENDMAIL_PROGNAME -> VAL_MTA_ARGV0,
124     MAILSPOOL -> VAL_MAIL.
125     And VAL_NAIL -> VAL_MAILX, though this is still a lie.
127   o The make system now needs config..build..install or
128     all..install or tangerine (config..build..test..install).
130   o The `build' phase can be parallelized by setting the $MAKEJOBS
131     environment variable, e.g., "make MAKEJOBS=-j4 build".
132     Note this variable is not tracked in the configuration.
133     (Gaetan Bisson)
135   o Set the new OPT_CROSS_BUILD to avoid feature runtime tests,
136     only compile- and link-availability will be tested.  (Juan RP)
138   o VERBOSE is implemented straight, but must be given at
139     configuration time in order to become honoured.
140     (William Yodlowsky)
142   o ADDCFLAGS / ADDLDFLAGS -> EXTRA_CFLAGS / EXTRA_LDFLAGS.
144   o The LD_LIBRARY_PATH etc. building processes will skip any path
145     which contains the string "fakeroot".  (Hilko Bengen)
147   o We honour a set $SOURCE_DATE_EPOCH#? environment variable.
148     (reproducible-builds.org; Colin Watson)
150     For reproducability of error messages, the new *log-prefix*
151     variable can be set.
153   o These are upward compatible changes.
155   o "make OPENSSL_API_COMPAT=0x10100000 all" should work.
157 - To support RFC 1524 a.k.a. .mailcap files (see below) many
158   "trigger"-characters have been added for *pipe-TYPE/SUBTYPE*#?,
159   which may (rarely) affect existing values.
160   The .mailcap support itself is not yet implemented.
162 - *NAIL_{HEAD,TAIL}* have been obsoleted in favour of
163   *message-inject-head*#? and *message-inject-tail*#?.
165 - *NAIL_HIST{FILE,SIZE}* have been obsoleted in favour of
166   *history-file*#? and *history-size*#?.
168 - -H#? and -L#? have been decoupled:
169    it used to be -e#? -L#? instead!
171 - Colour support has been changed backward in- and upward (from
172   user interface side) compatibly, see the manual section
173   "Coloured display"#?.
175   + New commands: `colour'#? and `uncolour'#?.
176     You can define context-sensitive, terminal-capability-
177     sensitive settings, e.g.:
179       if terminal && [ "$features" @= +colour ]
180         colour iso  view-header ft=bold,fg=magenta,bg=cyan
181         colour 256  view-header ft=bold,fg=208,bg=230 subject,from
182         colour mono view-header ft=bold
183         colour mono view-header ft=bold,ft=reverse subject,from
184       endif
186   + The variable *colour-pager*#? defines whether colour and font
187     attribute sequences should be generated when viewing something
188     in $PAGER#?.
190   + Set the variable *colour-disable*#? to turn colour off
191     without affecting established settings.
193   + It is deduced via termcap(5) (see below) whether the terminal
194     supports colors, e.g., "s-nail -Stermcap=Co#256".
195     This is also true if we don't have termcap support.
197   + Support for 256-colour terminals. (Gavin Troy)
199 - `source'#? series support shell pipes if the last character
200    of the "filename" ends with a vertical bar |, e.g.,
202       ? source 'gpg -qd ~/.s-nailrc-private.gpg |'
204 - Shell pipes are also supported as targets for `move'#?,
205   `copy'#? etc., e.g.,
207       ? copy . '| cat; echo huhu'
209 - Support for custom headers via the new ~^#? compose-mode
210   command escape and in addition, or alternatively, with the
211   internal variable *customhdr*#?, which can be covered by
212   `localopts'#?.
213   (Sergey Matveev)
215   + Support of $ORGANIZATION has been dropped.
217   + In compose mode ~e#? supports _any_ header.
219   + In compose mode ~^#? supports _any_ header.
221 - New -:#? command line option can be used to more easily select
222   which startup files should be loaded, e.g., -:/ loads none.
223   (Robert Elz)
225 - `account'#?s and *folder-hook*#?s now have `localopts'#?
226    enabled by default.
228 - A first simple form of compose-mode hooks has been implemented:
229   *on-compose-enter*#? and *on-compose-leave*#? can be set to
230   macros which get invoked at appropriate times, with
231   `localopts'#? enabled (which extend until the message is sent).
233   An even more powerful mechanism is available via the also new
234   *on-compose-splice* and *on-compose-splice-shell* hooks, e.g.,
235   (Jens Schleusener, Rudolf Sykora)
237     ? set on-compose-splice=ocs
238     ? define ocs {
239       read ver
240       echo Splice protocol version is $ver
241       echo '~^header list'
242       read hl; vput vexpr es substr "${hl}" 0 1
243       if [ "$es" != 2 ]
244         echoerr 'Failed to read header list, bailing out'; echo '~x'
245       end
246       if [ "$hl" !@ ' cc' ]
247         echo '~^header insert cc Diet is your <mirr.or>'
248         read es; vput vexpr es substr "${es}" 0 1
249         if [ "$es" != 2 ]
250           echoerr 'Failed to insert Cc:, bailing out'; echo '~x'
251         end
252       end
253     }
255 - "The .netrc file"#?
257   + gained support for comments.
258     (Walter Alejandro Iglesias, Ralph Corderoy)
260   + `netrc'#? now has a "load" subcommand.
262   + the new *netrc-pipe*#? obsoletes OPT_AGENT and
263     *agent-shell-lookup*, and can be used to load an encrypted
264     .netrc file, e.g.:
266       ? set netrc-lookup netrc-pipe='gpg -qd ~/.netrc.gpg'
268     E.g., this is in usual .netrc syntax and thus possibly much
269     nicer than saying "source 'gpg -qd ~/.credentials.gpg |'".
271 - termcap(5) / terminfo(5) support has been changed backward in-
272   and upward (from user interface side) compatibly, please read
273   "On terminal control and line editor"#?
275   + OPT_TERMCAP is by default enabled.
276     The new, by default enabled, configuration option
277     OPT_TERMCAP_VIA_TERMINFO can be used to (try to) use
278     terminfo(5) instead.
280   + The variable *termcap*#? can be used to freely define or
281     override terminal capabilities, and *termcap-disable*#? will
282     disable interaction with the chosen library, leaving only
283     *termcap* in charge.
285   + The builtin line editor has been rather completely rewritten
286     to be the Mailx-Line-Editor (OPT_MLE, default yes), and
287     supports wide glyphs (if possible), infinite line lengths
288     (2 GB) and more.  Tabulator expansion is no longer an option
289     (but needs fnmatch(3)).
291   + Optionally (OPT_KEY_BINDINGS, default yes) it has become
292     possible to freely define key bindings for the MLE via the new
293     `bind'#?  and `unbind'#? commands.  These key bindings can
294     make use of termcap(5) and/or terminfo(5) names.  The MLE will
295     install a set of default bindings, more so with OPT_TERMCAP,
296     try "bind*".
298     Sufficient support provided, one can now, e.g., type "p " and
299     then collect the message numbers to type, scrolling forward
300     and backward via key-bindings, without loosing the line
301     content, then commit the final line.
303   + OPT_EDITLINE and OPT_READLINE support have been dropped.
304     The new MLE should not miss anything.  Does it?
305     Tip: in an UTF-8 locale try "touch /tmp/hall{,öchen}" and then
306     autocomplete that: once, then ^Q, and again.
308 - `source'#? can be used in `call'#?ed macros.
309   What sounds so innocent replaced an entire machinery and got rid
310   of a brilliant idea of Kurt Shoens from the 70s, but which never
311   worked with Nail/Heirloom extensions, namely macros, and in
312   right order.
313   Accompanying this -X#? can be used to define macros and run
314   them etc.  Should work:
316     $ s-nail -X'define x {' -Xversion -Xx -X'}' -X'call x'
317     $ s-nail -X'source \' -X'"echo version|"' -Xx
319 - Internal and environment variables are now explicitly _defined_
320   and _tracked_ after variable handling has been rewritten
321   completely.
323   + Notes:
324     o This means that, e.g., "password=NOT_SECRET s-nail" will
325       **NOT** work no more, since *password*#? is an internal
326       variable!
328     o But if you do, e.g., "set TMPDIR=~/tmp", then this will
329       also be reflected in the program environment (it is an
330       environment variable) and thus affect child processes.
332     o Therefore we no longer have `setenv' and `unsetenv'.
334     o To integrate any other environment variable transparently
335       into our variable management, the new command `environ'#?
336       needs to be used, e.g., "environ set NEWVAR=value" or
337       "environ link EXISTINGVAR".
339   + -u#? / $LOGNAME#? ($USER) handling has been redefined,
340     and "-u USER" is now exactly the same as "-f %USER", and
341     $LOGNAME (and $USER) is actively set to the active user.
342     (Afan)
344     $LOGNAME#? is POSIX standardized and henceforth used and
345     preferred over $USER, which came from BSD.  (Todd C. Miller)
347 - In the future (at least non-message-list) argument handling will
348   be changed backward-incompatibly to be sh(1)ell compatible (and
349   thus POSIX standardized), see "Shell-style argument quoting"#?.
350   New commands use it already today (`bind'#?, `colour'#?,
351   `headerpick'#?), some others (most importantly, `set'#?) can
352   be forced to do so via the new `wysh' command prefix, as in:
354     ? wysh set message-inject-tail=$'\n--steffen'
355     ? bind base $'\cA,\x61' 'echo control-A and small a'
357 - We now actively manage *umask*#?: 0077 by default, but an
358   empty string will use the setting that is active upon startup.
359   Just like changes to (known) environment variables, this setting
360   will also be inherited by any child process.
361   (Walter Alejandro Iglesias)
363 - Anything SENDMAIL / *sendmail*-ish has been renamed to *mta*#?,
364   *mta-arguments*#?, *mta-no-default-arguments*#? and
365   *mta-argv0*#?.
367   The reason is that in v15 we won't even have *smtp*: it is just
368   another form of MTA, and thus obsolete by itself.
369   Note that *mta-arguments* is now parsed via the shell-token
370   parser, so the following ends up exactly as desired.
372     ? wysh set mta-arguments='-t -X "/tmp/my log"'
374   For now we support a hack that understands a file:// URL in
375   *mta*, too, but that is also the default if there is no protocol.
376   E.g.: "set mta=smtp://a:b@xy.z"
378 - The "spamd" *spam-interface*#? is obsolete.  I haven't tested
379   it since my main machine died, it is error prone since it assumes
380   internals of the spamassassin wire protocol, and there never was
381   a speed improvement over "spamc".  (However it could react upon
382   the "is-spam" state of a message, which "spamc" doesn't allow.)
384 - The new *inbox*#? variable will henceforth be looked up when
385   searching for a primary system mailbox (as in "File %"),
386   followed by the usual $MAIL#? and compile-time mailspool
387   search.  (Stephen Isard, Jürgen Daubert)
389 - New "failinvaddr" keyword for *expandaddr*#?.
391 - We finally "can" the so-called (by myself) "Dr. Problem" (a bit):
392   (Dr. Werner Fink)
394     $ echo|./s-nail -:/ -sTrödel -dSencoding=8bit \
395       'Dr. Diet Curd <to@fu.soj>' 2>&1|\
396     grep To:
397     s-nail: >>> To: "Dr. Diet Curd" <to@fu.soj>
399   This can be done via the new `addrcodec'#?, too:
401     $ echo 'addrcodec e Dr. Diet <to@fu.soj> Curd'|./s-nail -#:/
402     "Dr. Diet Curd" <to@fu.soj>
404 - All commands with the string "codec" in their name use different
405   argument quoting, namely none at all, read "Raw data arguments
406   for codec commands"#?.
408 - We gained "Command modifiers"#?: `\'#? (avoid `commandalias'#?
409   expansion), `vput'#? (store result in variable), `ignerr'#?
410   (ignore an error of the following command, even if the new
411   *errexit*#? is set), `wysh'#? (use shell-style arguments).
413     $ echo 'vput cwd resvar;echo $resvar' | ./s-nail -#:/
414     /home/steffen/src/nail.git
416   And the usual sh(1) stuff: `return'#?, `shift'#?, `eval'#?,
417   plus a `xcall'#? stack-avoidance optimization.
418   And an "expr(1) like thing": `vexpr'#?.
420     $ echo 'vexpr + 1 2' | ./s-nail -#:/
421     00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011
422     03 | 0x3 | 3
423     $ echo 'vput vexpr resvar + 1 2;echo $resvar' | ./s-nail -#:/
424     3
426   We actually start walking (?#?, *^*#?).
428     ? vput vexpr res regex 'bananarama' 'Bana(.+)' '\$1\$0'
429     ? echo $?/$^ERRNAME :$res:
430     1/NODATA ::
431     ? vput vexpr res iregex 'bananarama' '(.+)rama' '\$1\$0'
432     ? echo $?/$^ERRNAME :$res:
433     0/NONE :bananabananarama:
435 - `if'#? no longer performs automatic number conversion, we
436   use the explicit -lt, -gt syntax of the sh(1).
437   Note: `if' will change to be almost identical to sh(1) if(1),
438   so please ensure proper bracket quoting, even if it is less
439   convenient.
441 ChangeLog
442 ^^^^^^^^^
444 - The manual has seen another major overhaul, all the variables
445   are now documented in a single, sorted list, and many
446   clarifications should have been added.  I hope it has become
447   a better read.
448   (Predrag Punosevac, Michael Convey, Hariskar, Rudolf Sykora,
449   Respiranto, Thomas Dickey, Donald Mugnai)
451 - *mime-counter-evidence*#? gained bit 4 (perform proper in-depth
452   content inspection as necessary; set to 0xE for all bits).
453   (Aharon Robbins)
455 - Maildir paths are now created recursively as necessary.
456   (Justin Ellingwood)
458 - -M#? and -m#? options have been added to enforce a special
459   send mode that will flag standard input / the given file with
460   the specified / detected MIME 'Content-Type:'.  This can be used
461   to directly send, e.g., HTML log output.  Note that before v15
462   this is quite restricted: you are not free to do anything.
463   (Viktro Szépe, Ralph Corderoy)
465 - Disallow symlinks on writable files (O_NOFOLLOW open(2)).
466   (Matthew Dillon)
468 - `retain'#?, `ignore'#? etc. now differentiate in between
469   From (the From: header) and From_ (the MBOX ident).
471 - In fact we now have a new `headerpick'#? command which
472   is a multiplexer for all retain and ignore lists used, call it
473   without arguments to see the current setting of them all.
474   In v15 only `headerpick' and the standard-imposed wrappers
475   `retain' and `ignore' will remain, all other wrappers will
476   vanish.  Regular expressions can now be used if available:
478     0[ich /var/spool/mail/steffen]? headerpick
479     headerpick type retain add blahblahblah cc date from \
480       mail-followup-to message-id openpgp reply-to subject to \
481       user-agent
482     #headerpick type ignore currently covers no fields
483     #headerpick save retain currently covers no fields
484     headerpick save ignore add '^Original-.*$' '^X-.*$'
485     headerpick forward retain add cc date from list-id \
486       mail-followup-to reply-to subject to openpgp
487     #headerpick forward ignore currently covers no fields
489 - `top'#? has been rewritten completely, `Top'#? is new.
490   It uses a builtin set of retain/ignore headers, but it is
491   possible to register a custom set via `headerpick'#?.
492   Also, *toplines*#? has been extended a bit and the new
493   *topsqueeze*#? variable may pimp your `top' experience.
495     ? headerpick top retain add subject
496     ? top
497     [-- Message  1 -- 87 lines, 4791 bytes --]:
498     Subject: Re: I can't dist to myself
500     I wrote:
501         3.22. bounce_delivered
503 - `features' has been dropped, `version'#? extended.
505 - The *prompt*#? handling has changed: we lost the capability to
506   expand \?, \@ and \$, instead new "private" variables *?*#?,
507   *account-name*#?, *mailbox-resolved*#?  and
508   *mailbox-display*#? have been introduced, and the prompt
509   is completely shell expanded (thus twice with `wysh' or in v15),
510   as if dollar-single-quote quoted.  We do support the reverse-
511   solidus escaped bracket notation for embedding characters which
512   should not be counted when calculating the width of the prompt.
513   The `colour'#? command has a slot for the prompt colour.
514   We gained *prompt2*#? as a second level prompt.
516     ? var prompt
517     ? wysh set prompt='?\${?}[\${account} \${mailbox-display}]? '
519 - The filename "-" can be used as a receiver, e.g.,
521     echo 'From Blödel'|s-nail -:/ -Sexpandaddr -Sencoding=8b -sUB -
523 - The -s#? command line option, the ~s#? command escape
524   as well as the corresponding slots of ~^#? will actively
525   strip [\r\n] from their value (Debian #419840).
527 - New `read'#? and `echoerr'#? commands, mostly for
528   *on-compose-splice*#?.
529   But also `echon'#? and `echoerrn'#?, which don't write
530   a trailing newline.
532 - New variable *r-option-implicit*#? may be helpful to those
533   who regulary need the functionality of the -r#? command
534   line option.  (Felipe Gasper, Martin Neitzel)
536 - By using new "pseudo-URLs" one can automatize the use of S/MIME
537   keys / (certificates / intermediate include certificates) with
538   passwords.  E.g., to drive bob@exam.ple, set
539   *smime-sign-cert-bob@exam.ple* to the private key / certificate
540   pair as usual, the password lookup will then be performed for
541   bob@exam.ple.smime-cert-key, bob@exam.ple.smime-cert-cert and
542   bob@exam.ple.smime-include-certs.
543   Like this the password can be stored in an encrypted .netrc file
544   when *netrc-lookup*#? and *netrc-pipe*#? are set, or it may
545   be stored in an encrypted resource file that has been loaded via
546   `source'#? as a simple *password*#? variable.
548   Note that the prompting that happens as a last resort will still
549   interfere with a possibly running $PAGER#? instance, dependent
550   on the setting of *crt*#?, of course.  Proper job control
551   handling and recognizing that we are running $PAGER when doing
552   that prompt is a TODO for v15.  Sorry.
554 - Some commands, like `set'#?, `help'#?, `list'#?,
555   `mlist'#? etc., now react upon the setting of *verbose*#?
556   and(/or) *debug*#?.
558 - `write'#? uses iconv(3) as appropriate.
560 - *mbox-rfc4155*#? has first been dropped, and then
561   reintroduced with different semantics.  Because, it can be
562   helpful if a messed up MBOX is read: by setting it, reopening
563   the MBOX, unsetting it again and then doing "copy * SOMEWHERE"
564   we will ensure the new SOMEWHERE is a valid MBOX.
566 - `call_if'#? is new; kept it even after "ignerr call" came up.
568 - The new *smime-ca-flags*#? and *ssl-ca-flags*#? can be used
569   to fine-tune X509_STORE_set_flags(3).  (In the following, the
570   first `wysh' enables the ';' to be recognized as a shell token
571   delimiter, the second allows shell-style expansion of the
572   variable value.)
574     ? wysh set ssl-ca-flags=partial-chain;\
575       wysh set smime-ca-flags="${ssl-ca-flags}"
577 - Socket connections use TLS S(erver)N(ame)I(ndication) as
578   appropriate (RFC 7817).
580 - A new `charsetalias'#? command.  (Pietro Cerutti, mutt#3925)
582 git(1) shortlog (abbreviated)
583 '''''''''''''''''''''''''''''
585 f01291d extract_date_from_from_(): dig more invalid MBOXes (Antonio Radici)..
586 69bf721 *pipe-TYPE/SUBTYPE*: add "@" triggers and $NAIL_FILENAME_TEMPORARY..
587 bb5d0e2 *pipe-TYPE/SUBTYPE*: add "!" trigger ("needsterminal")
588 df8768b Add *mime-counter-evidence* bit 4 (Aharon Robbins)..
589 d3fe980 Ftmp(): drop "mode" argument (not wrong: Mike Frysinger)..
590 f6fbcc4 Add *mime-alternative-favour-rich*..
591 86159db nail.1: we support searching, really (Predrag Punosevac)
592 5b61a08 nail.1: talk about address lists (again) (Michael Convey)..
593 0eeffc4 nail.1: try improve states / MBOX etc. relation (Michael Convey)
594 43ea039 nail.1: what is an environment variable (Michael Convey)
595 13e0804 nail.1: fix typo (Hariskar (archlinux Wiki))
596 03d6af5 nail.1: more on sortability (Rudolf Sykora)..
597 4da9043 Not "binary", but "boolean" variables! (Predrag Punosevac)..
598 7064ef2 Add *message-inject-{head,tail}*, obsolete *NAIL_{HEAD,TAIL}*
599 4fde608 Add *history-{file,size}*, obsolete *NAIL_HIST{FILE,SIZE}*
600 36578d1 Add PS_SETFILE_OPENED (affects hooks), *bsdcompat*<>*emptystart*..
601 600d449 Drop the `inc' alias of and for `newmail'
602 5296040 Decouple -H from -L: it used to be -eL instead!
603 dad4e94 Obsolete *SYSV3*
604 c85f56d Support :d specifier for at least `from' (Martin Neitzel)..
605 30d0bb7 `netrc': add "load" subcommand to only load, not also "show"
606 b12e1ed Be more friendly when composing mails (Martin Neitzel)..
607 b50eac0 nail.1: use display/show not type/print (Michael Convey)..
608 6feafaf Add `search' alias for `from' (Predrag Punosevac)
609 a4e2612 Support 256-colour terminals (Gavin Troy)
610 16b57ab Drop `mono'+, change `colour' and `uncolour' commands..
611 d535db0 Implement `dotmove': move the "dot" up or down by one
612 c1c1ee5 `source': support shell pipes (if filename ends with "|")
613 8655aff Error framework: print UAGENT prefix (ident in pipes; Salvatore
614         Bonaccorso)
615 e96baaa Introduce $LOGNAME, the POSIX equivalent of $USER (Todd C. Miller)
616 0d0c523 Support |PIPE targets for `move', `copy' ++..
617 76e6364 Add `customhdr' (Sergey Matveev)..
618 ad58c91 Support *customhdr*, too (Sergey Matveev)..
619 6322e0a Support _any_ user header via ~e (Sergey Matveev)..
620 19b3afb Drop support for $ORGANIZATION in favour of `customhdr'
621 77d4f5c Fix SSL init order, change *ssl-rand-file* behaviour..
622 8daeda9 send.c:sendpart(): "support" malformed messages..
623 eddf684 Drop *print-all-chars*
624 f733f61 Don't set *dot* in -# batch mode
625 5d52578 Add -: command line option (Robert Elz)..
626 53b5f07 README: use git(1) --single-branch (Mantas Mikulėnas)
627 420131f Fix mispelling: can|to be send->sent (Respiranto (archlinux Wiki))
628 0dd85b1 n_iconv_open(): use *charset-unknown-8bit* also for "binary"..
629 3fd94e3 Default `localopts' to YES for `account' and *folder-hook*s!
630 983d22f `if'+: allow "if ${VARNAME}" in addition to "if $VARNAME"..
631 d6902e1 Add *on-compose-{enter,leave}* hooks (Jens Schleusener, Rudolf
632         Sykora)..
633 abf2e5d .netrc: support comments (Walter Alejandro Iglesias, Ralph Corderoy)..
634 37e0c26 nail.1: .netrc comma separator was in original Berknet parser! (Ralph
635         Corderoy)
636 7e85aa9 Drop WANT_EDITLINE support..
637 512069b Rewrite for a generic termcap(5) interface..
638 40522c3 nail.1: use -v option to cat(1) if available (Thomas Dickey)
639 cf3ccfe Deduce colours via *termcap* instead!; support all/*..
640 64eabef Turn NCL into M(ailx) L(ine) E(ditor)..
641 27f3e9d Add terminfo(5) support (via WANT_TERMCAP_PREFER_TERMINFO)..
642   Note: later renamed to OPT_TERMCAP_VIA_TERMINFO
643 1aa64b6 Add WANT_KEY_BINDINGS..
644 d935e65 (BWDIC!) Allow `source' in `call'ed macros..
645 c8c1393 n_lex_input(): truly support line continuation via backslash..
646 7f52ae7 make.rc+: add WANT_NOMEMDBG to allow valgrind(1)+ with DEBUG/DEVEL
647 2497240 homedir: if not $HOME, use pw_dir (of $LOGNAME or getpwuid())
648 94b3635 (BWDIC!) make.rc: add defaults _here_ (as VAL_xy, e.g., VAL_SENDMAIL!)
649 f0ac705 (BWDIC!) Rewrite variable handling..
650 724751e nail.1: drop `(un)?setenv' and *bsdset*; add `environ'
651 f4577e6 FIX (fix?) `localopts'..
652 d8f7cd7 (BWDIC!) Redefine -u / $LOGNAME / $USER (Afan)..
653 e337e00 Support expansions in $MAIL!; more on `account's (Afan)..
654 d596d74 Compare *newfolders* case-insensitively (Justin Ellingwood)..
655 57744f9 Redefine *folder* / getfold->folder_query() / *HOME* (Justin
656         Ellingwood)..
657 3c57c83 n_path_mkdir(): create recursively as necessary (Justin Ellingwood)
658 66553bc `list': with non-WS argument, don't sort alphabetically
659 b95e6be Introduce `wysh' command prefix to change argument parser..
660 08b8f48 Only support sh(1)-style quoting for some new commands..
661 67c2acb (BWDIC!) Only use new sh(1)-style quoting for attachments!
662 f4b0153 (BWDIC!) Only use new sh(1)-style quoting for `write'
663 a89e1e3 `remove': use sh(1)ell-style quoting
664 858374b Drop wordexp(3), instead unroll via fnmatch(3)..
665 0945726 MLE: change HT expansion..
666 0bbe981 nail.1: fix spelling errors as by igor(1) (Ingo Schwarze)
667 f1a775b Add -M and -m options (Viktor Szépe, Ralph Corderoy)..
668 42b42da `list': include argument-type etc. if *verbose*
669 79f2053 `if'+: support sh(1)-style comments on the line..
670 1bd8e48 Add *umask*, and set actively (Walter Alejandro Iglesias)..
671 6b1cd93 Now with *umask*, just drop fchmod(2)++ calls (Walter Alejandro
672         Iglesias)
673 2b45cd0 Add *netrc-pipe*: allows e.g. encrypted .netrc files
674 af8261e Obsolete WANT_AGENT / *agent-shell-lookup* (Sorry!)
675 ba22166 Change make targets; add $MAILJOBS; don't track $DESTDIR (Gaetan
676         Bisson)..
677 cd244b1 Add WANT_CROSS_BUILD make.rc option (Juan RP)..
678 95141f6 Tweak VERBOSE handling (William Yodlowsky)..
679 73545ad Rename ADD(C|LD)LAGS to EXTRA_(C|LD)FLAGS..
680 ca81646 make.rc, mk-conf.sh: allow y/n booleans
681 d74a18a mk-conf.sh:path_check(): skip any "fakeroot" path (Hilko Bengen)
682 7ce6a17 (BWDIC!) nail.rc: nodot, emptystart, fullnames, m-c-e=0xE; pimp PDF
683         handler
684 44a3be6 sendout.c:__savemail(): try to file_lock() *record*
685 5ef5261 cmd2.c:save1(): try to file_lock() target of `save'/`move'/etc.
686 10990e4 Add n_O_NOFOLLOW, disallow symlinks for writable files (Matthew
687         Dillon)..
688 c83e153 (BWDIC!) Require explicit "from_" to `retain' etc. From_ lines!
689 d7a15e4 page_or_print(): query $PAGER environment, use it
690 1dc9bb6 (BWDIC!) Make `top' real-life capable!  Add `Top', *topsqueeze*..
691 df4954c Add $SOURCE_DATE_EPOCH (reproducible-builds.org; Colin Watson)
692 b412ea8 mime.types: add x-lzma, x-lz4 and x-lzip MIME type extensions
693 dc92f2c savedeadletter()->sendout.c; tweak POSIX compliance (Ralph Corderoy)
694 8a3638c MLE: add `bind' and `unbind' etc...
695 4c93f66 (BWDIC!) Obsolete *sendmail*++ in favour of *mta*++; obsolete *smtp*..
696 284db64 Obsolete *spam-interface*=spamd..
697 61aac0f All: OPT_ not WANT_, VAL_XY not XY..
698 45d488d README: add The Mail Archive -- Gmane.org reduced to NNTP
699 48eb7da SEND_TODISP(_ALL)?: append newline if message does have no final one
700 63bf464 (BWDIC!) Drop readline(3) support..
701 863f1e8 tty.c,MLE: gracefully honour *line-editor-disable*++..
702 844bedb Support LEXINPUT, thus `bind', contexts..
703 b9e4e61 Drop `features', change `version', adjust make system..
704 20f3cd2 nail.1: more explicit `set' references instead of saying 'Set' (Donald
705         Mugnai)..
706 == Preview 1 ==
707 1b462ed -#: also set *MAIL* to /dev/null
708 2d53b46 url_parse(): better take better care for path parts (Stephen Isard)..
709 8650fa6 sendmp(), setfile(): FIX: ensure time_current is actualized
710 21f0eaa mk-conf.sh: find terminfo on Sun (Thomas Dickey)..
711 e33dfa0 n_termcap_query(): FIX: did real work even with PS_TERMCAP_DISABLE..
712 58423ea MLE.bind.a_tty_bind_create(): properly align durable buffer, too (sic)
713 f449fe1 MLE.bind.a_tty_bind_create(): tweak previous (encapsulate+notify
714         knowledge)
715 4496e9a Many: drop support for *mbox-rfc4155* - a no-brainer..
716 a26d4c2 is_head(): change compat argument to check_rfc4155..
717 5cf41d4 mime_types.c:_mt_by_filename(): basename() path (fix/tweak relative
718         paths)
719 e4ddaa8 Change n_iconv*() protos, add enum n_iconv_flags (Ralph Corderoy)..
720 83313f1 Allow -X options to take multiline arguments..
721 204531f cmd_tab.h: allow history for `environ', `set', `varshow'
722 a1eee83 Add a RFC 6068 url_mailto_to_address() hack for List-Post:
723 99e96f3 FIX "," message specification (since [1c4b8c9], v14.8.4)..
724 1587069 FIX [44cec1f] (Fix "address" message specifications (John Dodson))..
725 e40e181 nail.1, nail.rc: set *sendwait* by default (Ralph Corderoy)
726 0879986 First (rather small) step in reworking getmsglist()..
727 3051546 Move `help' to lex_input.c, show argument type with *verbose*
728 0ef4291 `z': add ^: goes to first screen; fix max calc for 0 modulos
729 7adcf99 `write'++: !interactive: urlxenc() attachment paths (Ralph Corderoy)..
730 b14aae7 `write'++: !interactive:.. But now, really (Lyndon Nerenberg, David
731         Levine)..
732 20082ee THANKS: David Levine and Lyndon Nerenberg
733 5270bf1 Simplify *folder* (implicit trail solidus) (Stephen Isard, Ralph
734         Corderoy)
735 f1313c0 Add `urlcodec', obsolete `url{en,de}code'
736 a638bcf Add *typescript-mode*, set it for -# (Ralph Corderoy, Martin
737         Neitzel)..
738 053e19f Add *inbox* (Stephen Isard, and Jürgen Daubert)..
739 9d364e1 mk-conf.sh, auxlily.c: fix va_copy(3) detection with -std=c89
740 20e3240 Add OPT_ALWAYS_UNICODE_LOCALE (Predrag Punosevac)..
741 14b5a3a Make combinetime() overflow safe (Vincent Lefevre)..
742 2bf0888 getmsglist(): if user gives A-B, try fulfill even in threaded mode
743 0bd7cbb Dotlock: O_TRUNC is meaningless with O_CREAT|O_EXCL; etc.
744 == Preview 2 ==
745 3fa035ac mk-conf.sh: fix bmake(1)/portable, it fails to import
746         $CFLAGS/$LDFLAGS
747 7a657d9c cc-test.sh: add S/MIME disproofs via smime(1) (Sven Neuhaus)..
748 a445996e THANKS: Sven Neuhaus
749 de8f750b n_termcap_suspend(): oops, fix capability reverse ke<>te, te<>ke
750 9e08fe35 README: go away from Gitlab; hello, unagitated repo.or.cz!
751 ae86c884 cmd1.c:__hprf(): compensate for add. bytes of UTF-8 seq.(s) (Martin
752         Neitzel)
753 38426102 extract_header(): FIX: multiple In-Reply-To: names are allowed!
754 0472b0d6 More or less completely rewrite memory.c..
755 096e6021 Allow Base64 and QP en- and decoding to fail
756 d91a4bd0 More or less completely rewrite mime_enc.c..
757 d33285fa `bind': new "default" context and changed "base" semantics..
758 abf00559 (BWDIC!) Rewrite prompt handling via new n_tty_create_prompt()..
759 38fd5de7 (BWDIC!) *encoding*: change default to base64, provide
760         documentation..
761 83115c3b Allow - as an output filename..
762 675d825b nail.rc, nail.1: set *editheaders* by default, and pimp "A starter"
763 44ff5125 TLS/SSL: make OPENSSL_API_COMPAT=0x10100000 clean..
764 411e9f7a Allow `errors' in send mode, too
765 03309960 The time has come: $POSIXLY_CORRECT, *posix* have arrived
766 975e6869 (BWDIC!) Only rm sysboxes, unless *posix* (Walter A. Iglesias,
767         trondd)..
768 a3a1d38e Add `headerpick'; Localize stuff, and rename ignoretab.c ->
769         ignore.c..
770 81e33751 Throw away file_expand() (Ismael Bouya)..
771 f1fdc933 THANKS: Ismael Bouya
772 3779baad Obsolete -E and -B (-> STDOUT always LBF, STDIN with -#)
773 0352f2f6 -s, ~s: normalize NL/CR characters (Debian #419840)
774 791c5e97 Give error if compose failed (later better; Debian #37104)
775 5026ea36 MLE: take advantage of new "default" `bind' context
776 7745ea13 cmd_tab.h: allow `source', `source_if' and `shell' during composing?!
777 c7d42236 Add *on-compose-done-shell* hook
778 e4499f98 Add ~^ plumbing command escape
779 d8737937 Add a `read' command (like read(1), but yet a bit basic)
780 f8e9cc30 Drop `customhdr' again (keep *customhdr*): `~^' is better!
781 0824682c collect(): fix twice dump of -q file (since [d6902e1], 2016-05-03)
782 5ae556f8 Add *r-option-implicit* (Felipe Gasper, Martin Neitzel)..
783 534fd725 THANKS: Felipe Gasper
784 9fc22b15 Final step to support Base64 with multibyte charsets..
785 a8897b02 Add an *on-compose-done* macro (running in a subprocess)
786 645e44ec BWDIC! Add `echoerr'; FIX *bang* (bwdic!); and some cmd*.c ordering
787 629035e1 Dump to a "-" file recipient even with *debug* enabled!
788 33709163 nail.1: some more words for *inbox*, and such sort (Stephen Isard)
789 88c19049 mk-release.inc: place OpenPGP signatures last (learned from Paul
790         Eggert)
791 ebf2a584 THANKS: Paul Eggert
792 3d7835fc (BWDIC!) Extend semantics of -a and `~@' (bwdic!); attachments for
793         `~^'..
794 2b33a8cb Add new "failinvaddr" keyword for *expandaddr*
795 0ede309c Rudely fix the RFC 5322 dot-atom, the "Dr. Problem" (Dr. Werner Fink)
796 261f205b THANKS: Dr. Werner Fink
797 e441efb4 Integrate S/MIME passwords into usual credential lookups (a bit)..
798 1ad6817d nail.1: disable "The Mailcap files" for v14.9.0; sigh and sorry
799 == Preview 3 ==
800 303d46cd FIX [3d7835fc] aka `~^' attachments, especially Content-ID:
801         (Ralph Corderoy)
802 f797c27e FIX privsep.c, yes, vulnerability (wapiflapi)..
803 847a21b5 THANKS: wapiflapi
804 f2699449 FIX privsep.c vulnerability, II (forgot hostname!) (wapiflapi)
805 303d46cd FIX [3d7835fc] aka `~^' attachments, especially Content-ID: (Ralph
806         Corderoy)
807 4ce4eb55 privsep.c: and just verify the box is also in CWD (wapiflapi)
808 88253be0 send.c:sendpart(): iconv(3) when `write'ing to a file!
809 1b1d7184 *on-compose-leave*: allow *autob?cc* from within
810 5319762a README: adjusted repository layout
811 374ccb98 Implement some command modifiers, allow recursive `ghost' expansion..
812 ef903a66 Sigh.  So, reintroduce *mbox-rfc4155*, but slightly different!
813 0dc7ad9b Disallow turning off `localopts' in compose-mode hooks..
814 25d9e6e2 Generate Content-ID: as applic. (Ralph Corderoy, Ken Hornstein, David
815         Levine)
816 17706f28 THANKS: Ken Hornstein
817 76583f83 (Heavily) Tweak [8daeda90], "really support" malformed messages..
818 b8bcff9d Implement `call_if'
819 e6895402 main.c:_setup_vars(): verify $HOME and $TMPDIR
820 084d7e9e (BWDIC!) NAIL_ -> MAILX_, or even drop!..
821 24fe9387 `show': no more colours, they counteract its purpose!?!
822 b034478f INSTALL,makefile: $MAKEJOBS, not $MAILJOBS
823 8af80164 `call': parameters via *[*@#]*, *[1-9][0-9]**; add *?*, drop
824         *-exit-status*
825 4c7be869 `file'+: reallow globbing for arguments, fnmatch(3) is save!
826 8389819e Add *-alternates*, check `alternates' arguments
827   Note: later renamed to *alternates*
828 c6e0b04e Implement `shift', to shift macro parameters
829 6c39d928 Security fix: never fall back to getenv(3)..
830 65bb8d98 Implement `return', to return from macros and accounts
831 4eadbd76 Support getrandom(2); revert stupid [5d345bd0]: OpenBSD has
832         arc4random(3)!
833 c11ef2cb The lunatic is on Solaris..
834 b274e20a Improve *expandaddr*=failinvaddr even interactive, e.g., with ~e..
835 b421c15b (BWDIC!) Drop usage of strtou?l() in favour of our own n_idec_*()..
836 682a7595 (BWDIC!) Add n_source_inject_input(), get rid of some hacks..
837 57e84415 Implement `vput' modifier: store result in variable..
838 197bea7c Implement `addrcodec'
839 437da9fd (BWDIC!) New `urlcodec' semantics
840 cd0cfc16 Implement `vexpr', something analogues to expr(1)
841 3e40e899 `call', `~': do not require `wysh' for new quoting rules
842 ce8c357c Implement `eval'
843 0ff45bde Fix *[*@#]*/*[1-9][0-9]** access corner cases; allow over-`define's..
844 acc9b2f3 *reply-strings* was falsely documented as *reply_strings*..
845 70e9de08 `history': support relative to top access (negative numbers)
846 c8f6c18d `ghost': avoid self-recursion
847 6409c886 nail.1: clarify/FIX doc. of \cX (Noel Chiappa, Random832)..
848 90bdf7e4 THANKS: Noel Chiappa
849 e0bf944d THANKS: Random832
850 5a1c023c nail.1: furtherly clarify doc. of \cX (Doug McIlroy)..
851 fb88d4fb THANKS: Doug McIlroy
852 a396678a Implement `echon' and `echoerrn' ("echo -n" and "echo >&2 -n")
853 7e4ff2d0 FIX: actually honour ARG_H (never place in history; SINCE EVER!)
854 c5197719 cmd_tab.h: `wysh' for more commands!
855 d33294c2 mk-release.inc: use %B for $DATE_MAN (Baptiste Daroussin)..
856 ad34b768 THANKS: Baptiste Daroussin
857 f53248dd Support `vput' for `cwd'
858 eafa9411 (BWDIC!) Defaults for *datefield{-markout-older}* (Debian #855582;
859         r.ductor)..
860 871a1e3f THANKS: Riccardo Ductor
861 a743a900 Avoid crash due to a strictly standard compliant memcpy(3)..
862 a256ebb2 (BWDIC!) sendout.c:__mta_start(): with SMTP *mta*, do not send to
863         aliases!
864 52004130 Add n_lex_input_clearerr(); limit *ignoreeof* count to 4..
865 5ab93627 MLE: set FEXP_NOPROTO for mle-complete expansions (Ralph Corderoy)
866 78c30e08 `read': work more like shells..
867 ada72661 ~<: add "- [HERE-delimiter]" for pasting etc. (Ralph Corderoy)
868 5669e8a2 `vexpr': add "random" subcommand
869 5524e1be `vput': generalize and use shell-parser (i.e., itself expandable)
870 acb887b4 (BWDIC!) *mta-arguments*: parse via shell-style quoting
871 9cddf95c (BWDIC!) For all shell commands, use shell-style quoting
872 72faa445 New quoting rules for `unset', `varshow', `varedit'
873 ceaac3b7 `vexpr': add "hash" subcommand
874 96888b9a Add *{smime,ssl}-ca-flags*..
875 3bfd2182 Use TLS S(erver)N(ame)I(ndication) as appropriate (RFC 7817)
876 d4d46c42 Add `charsetalias', and use it (Pietro Cerutti, mutt#3925)
877 c9051911 THANKS: Pietro Cerutti
878 72b43d61 README: Add "Security record" section
879 f83564ea c_[Ss]croll(): use new shell-style argument quoting
880 63a167f8 `source', `source_if': use new shell-style argument quoting
881 5ce2b406 (BWDIC!) FIX false decision: for `if' etc., add -le,-gt.. operators..
882 f3404bc1 (BWDIC!) Redefine all CODECS, add `shcodec', change `addrcodec'..
883 215c5cc2 Our own layer onto errno, yet too high
884 911bf9d1 Add *^* multiplexer; yet $^ERR{,DOC,NAME}{,-xy}..
885 65e2b75f Redefine VIP handling of variables (Ralph Corderoy)..
886 8235d440 Implement `xcall' stack-avoidance optimization
887 5e75768e Finally add `sleep' (to be able to test ^C more easily)
888 6c8b5c77 `headerpick': no more multiplexer, add `unheaderpick'
889 1c342dd5 C****Y BSD signal handling!  Try improve ^C stability..
890 90529c5f Add `(un)?commandalias', obsolete `(un)?ghost'
891 5fd6da65 (BWDIC!) No!  Let $! be errno, and $? the sole exit status..
892 f7f2781b `addrcodec': add `skin' subcommand, add an `encode' mode
893 59cb4714 Add *log-prefix* (with i3val), for reproduceabilities sake
894 658567b5 (BWDIC!) make.rc,mk-conf.sh: VAL_NAIL -> VAL_MAILX
895 == Preview 4 ==
897 Appendix
898 ^^^^^^^^
900 The complete changelog of commits in between two versions OLD and
901 NEW can be inspected by using the git(1) `log' command:
903   $ git log --reverse --topo-order --abbrev-commit OLD..NEW
904   # Only topic branch headers (--no-merges for content commits only):
905   $ git log --oneline --reverse --topo-order --merges OLD..NEW
906   # Same, but truly accessible:
907   $ git log --oneline --reverse --topo-order --merges --parents OLD..NEW |
908     while read c1 c2 c3 c4 c5 c6; do
909       printf "%-24s: \$ git log --oneline --no-merges %s ^%s\n" \
910         "${c6}" "${c1}" "${c2}";
911     done
913 Entries for the S-nail releases before v14.9.0 have been cut off
914 before release v14.9.0 and can be found in the git(1) repository:
916   v14.8.0 - v14.8.16: $ git show v14.8.16:NEWS
917   v13     - v14.8.5 : $ git show v14.8.5:NEWS
918   9.0     - 12.5    : $ git show heirloom:ChangeLog
920 Also accessible via the HTTPS?, just replace X.Y.Z accordingly:
921   https://git.sdaoden.eu/cgit/s-nail.git/tree/NEWS?h=vX.Y.Y
922 For even older releases you need to look into the [timeline]
923 branch, but no changelog has been administrated for them.
925 Remarks:
926 The content has been vaporised.  Ways to access the leakage are
927 documented in the newest announcement at the top of this file.
929 # s-tm-mode