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