FIX false rebase back for new variable handling..
[s-mailx.git] / NEWS
blob677124f938a2047e79a08b0dc7e0673f54d0344a
1 S - n a i l / S - m a i l x  N e w s
2 ====================================
4 v14.9.0 ("Crow"), 2017-0?-??
5 ----------------------------
7   It introduces some **backward incompatibilities**!
9 This is a major feature release.
10   Preview 3, 2016-12-31:
11     IMAP still gone.  All known bugs have been fixed, and other
12     usual progress has happened.
13     Backward incompatible changes (to Preview 2):
14     - new "default" `bind' context to not stain the very "base"
15       with commands which don't make sense in other contexts
16     - -a has been extended, ~@ has been changed!
17     - Prompt handling has been changed.
18     - `customhdr' and `uncustomhdr' have been removed again.
19       The new `~^' command escape is much more powerful and
20       provides reliable scripting capabilities, especially via the
21       new *on-compose-done* and *on-compose-done-shell* hooks.
22       The *customhdr* variable remains, and forever.
24 I didn't know where S-mailx will truly end up with, but only knew
25 i wanted to overcome the technical shortcomings, have a better
26 user experience (regarding the software) and that i wanted to
27 have, e.g., NNTP support.
29 During development of this release it became clear that the
30 general usage will be changed, backward incompatibly, and move
31 towards sh(1)ell style command line usage, that is to say, we will
32 turn over and will start parsing regular shell tokens, instead of
33 comma-separated lists, OR space-separated lists or whatever, and
34 will expand _any_ value content sh(1)ell-compatibly, instead of
35 not at all in general and only \t and \n in some others etc.
37   wysh set a='${TMPDIR}\t/' b="${TMPDIR}\t/" c=$'\${TMPDIR}\t/'
38   echo a=$a b=$b c=$c
39   a=${TMPDIR}\t/ b=/tmp\t/ c=/tmp /
41   set a='${TMPDIR}\t/' b="${TMPDIR}\t/" c=$'\${TMPDIR}\t/'
42   echo a=$a b=$b c=$c
43   a=${TMPDIR}\t/ b=${TMPDIR}\t/ c=$\${TMPDIR}\t/
45 (But don't do that).  All this is documented in COMMANDS#?.
46 Today only new commands (like `bind', `headerpick' etc.), but also
47 attachment selection, `remove' and `write' use this, others, like
48 `set', can optionally support it with a new command prefix: `wysh'.
50 Credits, in order of commit appearance: Antonio Radici,
51 Aharon Robbins, Mike Frysinger, Predrag Punosevac, Michael Convey,
52 Hariskar, Rudolf Sykora, Martin Neitzel, Gavin Troy,
53 Salvatore Bonaccorso, Todd C.  Miller, Sergey Matveev, Robert Elz,
54 Mantas Mikulėnas, Respiranto, Jens Schleusener,
55 Walter Alejandro Iglesias, Ralph Corderoy, Thomas Dickey, Afan,
56 Justin Ellingwood, Ingo Schwarze, Viktor Szépe, Gaetan Bisson,
57 Juan RP, William Yodlowsky, Hilko Bengen, Matthew Dillon,
58 Colin Watson, Donald Mugnai, Stephen Isard, Jürgen Daubert,
59 Sven Neuhaus, trondd, Ismael Bouya, Felipe Gasper, Paul Eggert
60 and Dr. Werner Fink.
62 We welcome Antonio Radici, Mike Frysinger, Predrag Punosevac,
63 Michael Convey, Rudolf Sykora, Todd C. Miller, Robert Elz,
64 Jens Schleusener, Walter Alejandro Iglesias, Thomas Dickey, Afan,
65 Justin Ellingwood, Viktor Szépe, Juan RP, Matthew Dillon,
66 Colin Watson, Donald Mugnai, Sven Neuhaus, Ismael Bouya,
67 Felipe Gasper, Paul Eggert and Dr. Werner Fink in THANKS.
69 Apologies: Sergey Matveev.
70 Members of the Roff community which await progress.
72   mdocmx(7) anchors are denoted by a number-sign #: typing
73   "^A ANCHOR" while reading the man(1)ual in a capable less(1)
74   will scroll to the manual's Point-Of-Interest, and pointing
75   a web- browser to the "#ANCHOR" of the online manual works.
77 NOTES, ChangeLog (packager-affine)
78 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
80 * This release brings backward incompatibilities, especially for
81   packagers and interactive use cases!
83   + Anything which was WANT_xy before is now OPT_xy, and
84     compiled-in paths and values, like PREFIX or PAGER, have
85     gained a VAL_ prefix (thus VAL_PREFIX and VAL_PAGER).
87     This is _not_ true for non-persistent or environmental values,
88     e.g., DESTDIR, CC, etc, and also not for the overwritable
89     program variables during configuration, e.g., $awk.
91   + SENDMAIL -> VAL_MTA, SENDMAIL_PROGNAME -> VAL_MTA_ARGV0,
92     MAILSPOOL -> VAL_MAIL.
94   + The make system now needs config..build..install or
95     all..install or tangerine (config..build..test..install).
97   + The `build' phase can be parallelized by setting the MAILJOBS
98     environment variable, e.g., "make MAILJOBS='-j 4' build".
99     Note this variable is not tracked in the configuration.
100     (Gaetan Bisson)
102   + Set the new OPT_CROSS_BUILD to avoid feature runtime tests,
103     only compile- and link-availability will be tested.  (Juan RP)
105   + VERBOSE is implemented straight, but must be given at
106     configuration time in order to become honoured.
107     (William Yodlowsky)
109   + ADDCFLAGS / ADDLDFLAGS -> EXTRA_CFLAGS / EXTRA_LDFLAGS
111   + The LD_LIBRARY_PATH etc. building processes will skip any path
112     which contains the string "fakeroot".  (Hilko Bengen)
114   + We honour a set *SOURCE_DATE_EPOCH*#? environment variable.
115     [df4954c]  (reproducible-builds.org; Colin Watson)
117   + Packagers should have received diffs against v14.8.14
118     packaging files.
120   + These are upward compatible changes.
122 - To support RFC 1524 a.k.a. .mailcap files (see below) many
123   "trigger"-characters have been added for *pipe-TYPE/SUBTYPE*#?,
124   which may (rarely) affect existing values. [topic/mimepipe.2]
126 - *NAIL_{HEAD,TAIL}* have been obsoleted in favour of
127   *message-inject-head*#? and *message-inject-tail*#?.
129 - *NAIL_HIST{FILE,SIZE}* have been obsoleted in favour of
130   *history-file*#? and *history-size*#?.
132 - `-H'#? and `-L'#? have been decoupled:
133    it used to be `-e'#? `-L'#? instead!
135 - Colour support has been changed backward in- and upward (from user
136   interface side) compatibly, manual section "Coloured display"#?
137   [topic/colour.2, topic/termcap.2, topic/wysh]:
139   o New commands: `colour'#? and `uncolour'#?.
140     You can define context-sensitive, terminal-capability-sensitive
141     settings, e.g.:
143       if terminal && $features @= +colour
144         colour iso  view-header ft=bold,fg=magenta,bg=cyan
145         colour 256  view-header ft=bold,fg=208,bg=230 subject,from
146         colour mono view-header ft=bold
147         colour mono view-header ft=bold,ft=reverse subject,from
148       endif
150   o The variable *colour-pager*#? defines whether colour and font
151     attribute sequences should be generated when viewing something
152     in $PAGER.
154   o Set the variable *colour-disable*#? to turn colour off without
155     affecting established settings.
157   o It is deduced via termcap(5) (see below) whether the terminal
158     supports colors, e.g., "s-nail -Stermcap=Co#256".
159     This is also true if we don't have termcap support.
161   o Support for 256-colour terminals. (Gavin Troy)
163 - `source'#? series support shell pipes if the last character of
164    the "filename" ends with a vertical bar |, e.g.,
166       source 'gpg -qd ~/.s-nailrc-private.gpg |'
168 - Shell pipes are also supported as targets for `move'#?,
169   `copy'#? etc., e.g.,
171       copy . '| cat; echo huhu'
173 - Support for custom headers via the new `~^'#? compose-mode
174   command escape and the internal variable *customhdr*#?,
175   which can be covered by `localopts'#?.  [topic/customhdr]
176   (Sergey Matveev)
178   o Support of *ORGANIZATION* has been dropped.
180   o In compose mode `~e'#? supports _any_ header.
182   o In compose mode `~^'#? supports _any_ header.
184 - New -:#? command line option can be used to more easily select
185   which startup files should be loaded.
186   (Robert Elz)
188 - `account'#?s and *folder-hook*#?s now have `localopts'#?
189    enabled by default.
191 - A first simple form of compose-mode hooks has been implemented:
192   *on-compose-enter*#? and *on-compose-leave*#? can be set to
193   macros which get invoked at appropriate times, with `localopts'#?
194   enabled (which extend until the message is sent).
196   An even more powerful mechanism is available via the also new
197   *on-compose-done* and *on-compose-done-shell* hooks, e.g.,
198   (Jens Schleusener, Rudolf Sykora)
200     set on-compose-done=ocdm
201     define ocdm {
202       read ver
203       echo version is $ver
204       if $features !@ +regex
205         echoerr 'Need regular-expression support, aborting send'
206         echo '~x'
207       endif
208       echo '~^header list'
209       read hl
210       if $hl !~ ^2
211         echoerr 'Failed to read header list, bailing out'
212         echo '~x'
213       endif
214       if $hl !@ ' cc'
215         echo '~^header insert cc Diet is your <mirr.or>'
216         read es
217         if $es !~ ^2
218           echoerr 'Failed to insert Cc: header, bailing out'
219           echo '~x'
220         endif
221       endif
222     }
224 - "The .netrc file"#?
226   o gained support for comments.
227     (Walter Alejandro Iglesias, Ralph Corderoy)
229   o `netrc'#? now has a "load" subcommand.
231   o the new *netrc-pipe*#? obsoletes OPT_AGENT and
232     *agent-shell-lookup* and can be used to load an encrypted
233     .netrc file, e.g.:
235       wysh set netrc-lookup netrc-pipe='gpg -qd ~/.netrc.gpg'
237     E.g., this is in usual .netrc syntax and thus possibly much
238     nicer than saying "source 'gpg -qd ~/.credentials.gpg |'".
240 - termcap(5) / terminfo(5) support has been changed backward in-
241   and upward (from user interface side) compatibly, please read
242   "On terminal control and line editor"#? [topic/termcap.2]
244   o OPT_TERMCAP is by default enabled.
245     The new, by default enabled, configuration option
246     OPT_TERMCAP_VIA_TERMINFO can be used to (try to) use terminfo(5)
247     instead.
249   o The variable *termcap*#? can be used to freely define or
250     override terminal capabilities, and *termcap-disable*#? will
251     disable interaction with the chosen library, leaving only
252     *termcap* in charge.
254   o The builtin line editor has been rather completely rewritten to
255     be the Mailx-Line-Editor (OPT_MLE, default yes), and supports
256     wide glyphs (if possible), infinite line lengths (2 GB) and more.
257     Tabulator expansion is no longer an option (but needs
258     fnmatch(3)).
260   o Optionally (OPT_KEY_BINDINGS, default yes) it has become possible
261     to freely define key bindings for the MLE via the new `bind'#?
262     and `unbind'#? commands.  These key bindings can make use
263     of termcap(5) and/or terminfo(5) names.  The MLE will install
264     a set of default bindings, more with OPT_TERMCAP: "bind*".
266   o OPT_EDITLINE and OPT_READLINE support have been dropped.
267     The new MLE should not miss anything.  Does it?
268     Tip: in an UTF-8 locale try "touch /tmp/hall{,öchen}" and then
269     autocomplete that: once, then ^Q, and again.
271 - `source'#? can be used in `call'#?ed macros.
272   What sounds so innocent replaced an entire machinery and got rid of
273   a brilliant idea of Kurt Shoens from the 70s, but which never worked
274   with Nail/Heirloom extensions, namely macros, and in right order.
276   Accompanying this `-X'#? can be used to define macros and run
277   them etc.  We're still not there, S-nail v15 -- then S-mailx! -- will
278   change the entire codebase to use SystemV signal handling, instead of
279   going the BSD way that is, like used here, both, very expensive due to
280   the immense amount of signal managing systemcalls and insecure due to
281   almost uncontrollable longjmp()s.  Should work:
283     s-nail -X'define x {' -Xversion -Xx -X'}' -X'call x'
284     s-nail -X'source \' -X'"echo version|"' -Xx
286 - Internal and environment variables are now explicitly _defined_ and
287   _tracked_ after variable handling has been rewritten completely.
288   [topic/okeys-attr.2]
290   o Notes:
291     + This means that, e.g., "password=NOT_SECRET s-nail" will **NOT**
292       work no more, since *password*#? is an internal variable!
294     + But if you do, e.g., "set TMPDIR=~/tmp", then this will also be
295       reflected in the program environment (it is an environment
296       variable) and thus affect child processes.
298     + Therefore we no longer have `setenv' and `unsetenv'.
300     + To integrate any other environment variable transparently
301       into our variable management, the new command `environ'#?
302       needs to be used, e.g., "environ set NEWVAR=value" or
303       "environ link EXISTINGVAR".
305   o `-u'#? / *LOGNAME*#? (*USER*) handling has been redefined,
306     and "-u USER" is now exactly the same as "-f %USER", and
307     *LOGNAME* (and *USER*) is actively set to the active user.  (Afan)
309     *LOGNAME*#? is POSIX standardized and henceforth used and
310     preferred over *USER*, which came from BSD.  (Todd C. Miller)
312 - In the future (at least non-message-list) argument handling will
313   be changed backward-incompatibly to be sh(1)ell compatible (and
314   thus POSIX standardized).  New commands use it already today
315   (`bind'#?, `colour'#?, `headerpick'#?), some others (most
316   importantly, `set'#?) can be forced to do so via the new `wysh'
317   command prefix, as in: [topic/wysh]
319     wysh set message-inject-tail=$'\n--steffen'
320     bind base $'\cA,\x61' 'echo control-A and small a'
322 - We now actively manage *umask*#?: 0077 by default, but an
323   empty string will use the setting that is active upon startup.
324   Like any change to (known) environment variables this setting
325   will also be inherited by any child process.
326   (Walter Alejandro Iglesias)
328 - Anything SENDMAIL / *sendmail*-ish has been renamed to *mta*#?,
329   *mta-arguments*#?, *mta-no-default-argument*#? and
330   *mta-argv0*#?.
332   The reason is that in v15 we won't even have *smtp*: it is just
333   another form of MTA, and thus obsolete by itself.
335   For now we support a hack that understands a file:// URL in
336   *mta*, too, but that is also the default if there is no protocol.
337   E.g.: "set mta=smtp://a:b@xy.z"
339 - The "spamd" spam interface is obsolete.  I haven't tested it
340   since my main machine died, it is error prone since it assumes
341   internals of the spamassassin wire protocol, and there never was
342   a speed improvement against "spamc".  (However it could react
343   upon the current "is-spam" state of a message, which "spamc"
344   doesn't allow.)
346 - The new *inbox*#? variable will henceforth be looked up when
347   searching for a primary system mailbox (as in "? File %"),
348   followed by the usual *MAIL*#? and compile-time mailspool
349   search.  (Stephen Isard, Jürgen Daubert)
351 - New "failinvaddr" keyword for *expandaddr*#?.
353 - We finally "can" the so-called (by myself) "Dr. Problem" (a bit):
355     echo|./s-nail -:/ -sTrödel -dSencoding=8bit \
356       'Dr. Diet Curd <to@fu.soj>' 2>&1|\
357     grep To:
358     s-nail: >>> To: "Dr. Diet Curd" <to@fu.soj>
360 ChangeLog
361 ^^^^^^^^^
363 - The manual has seen another major overhaul, all the variables are now
364   documented in a single, sorted list, and many clarifications should
365   have been added. [topic/manual.10]
366   (Predrag Punosevac, Michael Convey, Hariskar, Rudolf Sykora,
367   Respiranto, Thomas Dickey, Donald Mugnai)
369 - *mime-counter-evidence*#? gained bit 4 (perform proper in-depth
370   content inspection as necessary; set to 0xE for all bits).
371   [topic/mimetype.2]  (Aharon Robbins)
373 - Maildir paths are now created recursively as necessary.
374   (Justin Ellingwood)
376 - `-M'#? and `-m'#? options have been added to enforce a special
377   send mode that will flag standard input / the given file with the
378   specified / detected MIME 'Content-Type:'.  This can be used to
379   directly send, e.g., HTML log output.  Note that before v15 this
380   is a bit restricted: you are not free to do anything.
381   (Viktro Szépe, Ralph Corderoy)
383 - Disallow symlinks on writable files (O_NOFOLLOW open(2)).
384   (Matthew Dillon)
386 - `retain'#?, `ignore'#? etc. now differentiate in between
387   From (the From: header) and From_ (the MBOX ident).
389   In fact we now have a new `headerpick'#? command which
390   is a multiplexer for all retain and ignore lists used, call it
391   without arguments to see the current setting of them all.
392   In v15 only `headerpick' and the standard-imposed wrappers
393   `retain' and `ignore' will remain, all other wrappers will
394   vanish.  Regular expressions can now be used if available:
396     ?0[ich /var/spool/mail/steffen]? headerpick
397     headerpick type retain add blahblahblah cc date from \
398       mail-followup-to message-id openpgp reply-to subject to \
399       user-agent
400     #headerpick type ignore currently covers no fields
401     #headerpick save retain currently covers no fields
402     headerpick save ignore add '^Original-.*$' '^X-.*$'
403     headerpick forward retain add cc date from list-id \
404       mail-followup-to reply-to subject to
405     #headerpick forward ignore currently covers no fields
407 - `top'#? has been rewritten completely, `Top'#? is new.
408   It uses a builtin set of retain/ignore headers, but it is
409   possible to register a custom set via `headerpick:
411     ? headerpick top retain add subject
412     ? top
413     [-- Message  1 -- 87 lines, 4791 bytes --]:
414     Subject: Re: I can't dist to myself
416     I wrote:
417         3.22. bounce_delivered
419 - `features' has been dropped, `version'#? extended.
421 - The *prompt*#? handling has changed: we lost the capability to
422   expand \?, \@ and \$, instead new "private" variables
423   *-account-name*#?, *-exit-status*#?, *-mailbox-resolved*#?
424   and *-mailbox-display*#? have been introduced, and the prompt
425   is completely shell expanded (thus twice with `wysh' or in v15),
426   as if dollar-single-quote quoted.
427   We gained *prompt2*#? as a second level prompt.
429     ? var prompt
430     wysh set prompt='?\${-exit-status}[\${-account-name} \${-mailbox-display}]? '
432 - The filename "-" can be used as a receiver, e.g.,
434     echo 'From Blödel'|s-nail -:/ -Sexpandaddr -sTrödel -
436 - The `-s'#? command line option, the `~s'#? command escape
437   as well as the corresponding slots of `~^'#? will actively
438   strip [\r\n] from their value (Debian #419840).
440 - New `read'#? and `echoerr'#? commands, mostly for
441   *on-compose-done*#?.
443 - New variable *r-option-implicit*#? may be helpful to those
444   who regulary need the functionality of the `-r'#? command
445   line option.  (Felipe Gasper, Martin Neitzel)
447 - By using new "pseudo-URLs" one can automatize the use of S/MIME
448   keys / (certificates / intermediate include certificates) with
449   passwords.  E.g., to drive bob@exam.ple, set
450   *smime-sign-cert-bob@example* to the private key / certificate
451   pair as usual, the password lookup will then be performed for
452   bob@exam.ple.smime-cert-key, bob@exam.ple.smime-cert-cert and
453   bob@exam.ple.smime-include-certs.
454   Like this the password can be stored in an encrypted .netrc file
455   when *netrc-lookup*#? is set, or it may be stored in an
456   encrypted resource file that has been loaded via `source'#?
457   as a simple *password*#? variable.
459   Note that the prompting that happens as a last resort will still
460   interfere with a possibly running $PAGER instance, dependent on
461   the setting of *crt*#?, of course.  Proper job control
462   handling and recognizing that we are running $PAGER when doing
463   that prompt is a TODO for v15.  Sorry.
465 - Some commands, like `set'#?, `help'#?, `list'#?,
466   `mlist'#? etc., now react upon the setting of *verbose*#?
467   and(/or) *debug*#?.
469 git(1) shortlog (edited)
470 ''''''''''''''''''''''''
472 f01291d extract_date_from_from_(): dig more invalid MBOXes (Antonio Radici)..
473 662982e Add OF_REGISTER_UNLINK, allow usage in Ftmp()
474 69bf721 *pipe-TYPE/SUBTYPE*: add "@" triggers and $NAIL_FILENAME_TEMPORARY..
475 bb5d0e2 *pipe-TYPE/SUBTYPE*: add "!" trigger ("needsterminal")
476 df8768b Add *mime-counter-evidence* bit 4 (Aharon Robbins)..
477 d3fe980 Ftmp(): drop "mode" argument (not wrong: Mike Frysinger)..
478 7abc368 Print all MIME_RELATED subparts when quoting
479 f6fbcc4 Add *mime-alternative-favour-rich*..
480 86159db nail.1: we support searching, really (Predrag Punosevac)
481 5b61a08 nail.1: talk about address lists (again) (Michael Convey)..
482 0eeffc4 nail.1: try improve states / MBOX etc. relation (Michael Convey)
483 43ea039 nail.1: what is an environment variable (Michael Convey)
484 13e0804 nail.1: fix typo (Hariskar (archlinux Wiki))
485 03d6af5 nail.1: more on sortability (Rudolf Sykora)..
486 4da9043 Not "binary", but "boolean" variables! (Predrag Punosevac)..
487 7064ef2 Add *message-inject-{head,tail}*, obsolete *NAIL_{HEAD,TAIL}*
488 4fde608 Add *history-{file,size}*, obsolete *NAIL_HIST{FILE,SIZE}*
489 36578d1 Add PS_SETFILE_OPENED (affects hooks), *bsdcompat*<>*emptystart*..
490 600d449 Drop the `inc' alias of and for `newmail'
491 5296040 Decouple -H from -L: it used to be -eL instead!
492 dad4e94 Obsolete *SYSV3*
493 c85f56d Support :d specifier for at least `from' (Martin Neitzel)..
494 7b753a8 Support `help' docstrings for `#', `-', plus..
495 30d0bb7 `netrc': add "load" subcommand to only load, not also "show"
496 b12e1ed Be more friendly when composing mails (Martin Neitzel)..
497 b50eac0 nail.1: use display/show not type/print (Michael Convey)..
498 6feafaf Add `search' alias for `from' (Predrag Punosevac)
499 a4e2612 Support 256-colour terminals (Gavin Troy)
500 16b57ab Drop `mono'+, change `colour' and `uncolour' commands..
501 cedde28 Finally: drop IMAP support!..
502 d535db0 Implement `dotmove': move the "dot" up or down by one
503 87a72c7 Ooops, always include commands, as c_cmdnotsupp if disabled!
504 c1c1ee5 `source': support shell pipes (if filename ends with "|")
505 8655aff Error framework: print UAGENT prefix (ident in pipes; Salvatore
506         Bonaccorso)
507 e96baaa Introduce $LOGNAME, the POSIX equivalent of $USER (Todd C. Miller)
508 0d0c523 Support |PIPE targets for `move', `copy' ++..
509 76e6364 Add `customhdr' (Sergey Matveev)..
510 ad58c91 Support *customhdr*, too (Sergey Matveev)..
511 6322e0a Support _any_ user header via ~e (Sergey Matveev)..
512 19b3afb Drop support for $ORGANIZATION in favour of `customhdr'
513 77d4f5c Fix SSL init order, change *ssl-rand-file* behaviour..
514 8daeda9 send.c:sendpart(): "support" malformed messages..
515 eddf684 Drop *print-all-chars*
516 f733f61 Don't set *dot* in -# batch mode
517 5d52578 Add -: command line option (Robert Elz)..
518 53b5f07 README: use git(1) --single-branch (Mantas Mikulėnas)
519 8d0c7dd Allow "-q -" in non-interactive mode; -q and -t are mutual exclusive
520 420131f Fix mispelling: can|to be send->sent (Respiranto (archlinux Wiki))
521 7f3c11f `echo': don't expand via sh(1) no more, use internal mechanism
522 ddece18 main(): verify *expandargv* value content in case of OPT_D_V
523 8d5f709 mk-conf.sh: dump final summary into config.log, too
524 0dd85b1 n_iconv_open(): use *charset-unknown-8bit* also for "binary"..
525 d5a9c17 page_or_print(): never use $PAGER unless startup complete
526 bf889e4 (Shell) Variable expansion: support hyphens in names..
527 3fd94e3 Default `localopts' to YES for `account' and *folder-hook*s!
528 983d22f `if'+: allow "if ${VARNAME}" in addition to "if $VARNAME"..
529 d6902e1 Add *on-compose-{enter,leave}* hooks (Jens Schleusener, Rudolf
530         Sykora)..
531 abf2e5d .netrc: support comments (Walter Alejandro Iglesias, Ralph Corderoy)..
532 37e0c26 nail.1: .netrc comma separator was in original Berknet parser! (Ralph
533         Corderoy)
534 7e85aa9 Drop WANT_EDITLINE support..
535 3e6aa24 make.rc: enable WANT_TERMCAP by default
536 512069b Rewrite for a generic termcap(5) interface..
537 40522c3 nail.1: use -v option to cat(1) if available (Thomas Dickey)
538 cf3ccfe Deduce colours via *termcap* instead!; support all/*..
539 64eabef Turn NCL into M(ailx) L(ine) E(ditor)..
540 adb29c3 MLE: add "mle-position" and "mle-prompt" colour mappings
541 27f3e9d Add terminfo(5) support (via WANT_TERMCAP_PREFER_TERMINFO)..
542   Note: later renamed to OPT_TERMCAP_VIA_TERMINFO
543 1aa64b6 Add WANT_KEY_BINDINGS..
544 ad61278 Add n_pager_{open,close}() -- _always_ termios(4) for $PAGER!
545 d935e65 (BWDIC!) Allow `source' in `call'ed macros..
546 c8c1393 n_lex_input(): truly support line continuation via backslash..
547 7f52ae7 make.rc+: add WANT_NOMEMDBG to allow valgrind(1)+ with DEBUG/DEVEL
548 2497240 homedir: if not $HOME, use pw_dir (of $LOGNAME or getpwuid())
549 d05aed4 mk-conf.sh: require one of (un)?setenv(3) and putenv(3)
550 94b3635 (BWDIC!) make.rc: add defaults _here_ (as VAL_xy, e.g., VAL_SENDMAIL!)
551 f0ac705 (BWDIC!) Rewrite variable handling..
552 724751e nail.1: drop `(un)?setenv' and *bsdset*; add `environ'
553 3fd1db4 Improve compose-hooks via new macro hooks..
554 f4577e6 FIX (fix?) `localopts'..
555 d8f7cd7 (BWDIC!) Redefine -u / $LOGNAME / $USER (Afan)..
556 e337e00 Support expansions in $MAIL!; more on `account's (Afan)..
557 d596d74 Compare *newfolders* case-insensitively (Justin Ellingwood)..
558 57744f9 Redefine *folder* / getfold->folder_query() / *HOME* (Justin
559         Ellingwood)..
560 3c57c83 n_path_mkdir(): create recursively as necessary (Justin Ellingwood)
561 66553bc `list': with non-WS argument, don't sort alphabetically
562 b95e6be Introduce `wysh' command prefix to change argument parser..
563 08b8f48 Only support sh(1)-style quoting for some new commands..
564 665c6f8 `customhdr': disallow using control characters in bodies
565 67c2acb (BWDIC!) Only use new sh(1)-style quoting for attachments!
566 f4b0153 (BWDIC!) Only use new sh(1)-style quoting for `write'
567 a89e1e3 `remove': use sh(1)ell-style quoting
568 858374b Drop wordexp(3), instead unroll via fnmatch(3)..
569 0945726 MLE: change HT expansion..
570 0bbe981 nail.1: fix spelling errors as by igor(1) (Ingo Schwarze)
571 f1a775b Add -M and -m options (Viktor Szépe, Ralph Corderoy)..
572 42b42da `list': include argument-type etc. if *verbose*
573 79f2053 `if'+: support sh(1)-style comments on the line..
574 1bd8e48 Add *umask*, and set actively (Walter Alejandro Iglesias)..
575 6b1cd93 Now with *umask*, just drop fchmod(2)++ calls (Walter Alejandro
576         Iglesias)
577 2b45cd0 Add *netrc-pipe*: allows e.g. encrypted .netrc files
578 af8261e Obsolete WANT_AGENT / *agent-shell-lookup* (Sorry!)
579 05f7743 Generate lowercase MIME charset=/RFC 2231 charset strings
580 ba22166 Change make targets; add $MAILJOBS; don't track $DESTDIR (Gaetan
581         Bisson)..
582 cd244b1 Add WANT_CROSS_BUILD make.rc option (Juan RP)..
583 95141f6 Tweak VERBOSE handling (William Yodlowsky)..
584 73545ad Rename ADD(C|LD)LAGS to EXTRA_(C|LD)FLAGS..
585 ca81646 make.rc, mk-conf.sh: allow y/n booleans
586 d74a18a mk-conf.sh:path_check(): skip any "fakeroot" path (Hilko Bengen)
587 7ce6a17 (BWDIC!) nail.rc: nodot, emptystart, fullnames, m-c-e=0xE; pimp PDF
588         handler
589 09912fa n_file_lock(): do not retry for EBADF / EINVAL
590 44a3be6 sendout.c:__savemail(): try to file_lock() *record*
591 5ef5261 cmd2.c:save1(): try to file_lock() target of `save'/`move'/etc.
592 10990e4 Add n_O_NOFOLLOW, disallow symlinks for writable files (Matthew
593         Dillon)..
594 c83e153 (BWDIC!) Require explicit "from_" to `retain' etc. From_ lines!
595 d7a15e4 page_or_print(): query $PAGER environment, use it
596 481c687 Allow WANT_QUOTE_FOLD to be "require"d
597 1dc9bb6 (BWDIC!) Make `top' real-life capable!  Add `Top', *topsqueeze*..
598 df4954c Add $SOURCE_DATE_EPOCH (reproducible-builds.org; Colin Watson)
599 b412ea8 mime.types: add x-lzma, x-lz4 and x-lzip MIME type extensions
600 dc92f2c savedeadletter()->sendout.c; tweak POSIX compliance (Ralph Corderoy)
601 8a3638c MLE: add `bind' and `unbind' etc...
602 4c93f66 (BWDIC!) Obsolete *sendmail*++ in favour of *mta*++; obsolete *smtp*..
603 284db64 Obsolete *spam-interface*=spamd..
604 83a24a0 boolify(): allow y/n booleans
605 61aac0f All: OPT_ not WANT_, VAL_XY not XY..
606 45d488d README: add The Mail Archive -- Gmane.org reduced to NNTP
607 48eb7da SEND_TODISP(_ALL)?: append newline if message does have no final one
608 63bf464 (BWDIC!) Drop readline(3) support..
609 863f1e8 tty.c,MLE: gracefully honour *line-editor-disable*++..
610 ae4f2df nail.1: talk on `localopts' in macros which change `account's
611 844bedb Support LEXINPUT, thus `bind', contexts..
612 b9e4e61 Drop `features', change `version', adjust make system..
613 20f3cd2 nail.1: more explicit `set' references instead of saying 'Set' (Donald
614         Mugnai)..
615 == Preview 1 ==
616 2fefcf6 n_dotlock(), n_file_lock(): oops, missed the pollmsecs==UIZ_MAX case
617 fcd2892 cc-test.sh: detect utf-8, not only utf8 locales
618 1b462ed -#: also set *MAIL* to /dev/null
619 6fbf9da setfile(): if isdevnull, do not really init the box, it is MB_VOID
620 fb4ddf3 quit(): do not fail when quit()ting away from a MB_VOID box
621 2d53b46 url_parse(): better take better care for path parts (Stephen Isard)..
622 8650fa6 sendmp(), setfile(): FIX: ensure time_current is actualized
623 21f0eaa mk-conf.sh: find terminfo on Sun (Thomas Dickey)..
624 e33dfa0 n_termcap_query(): FIX: did real work even with PS_TERMCAP_DISABLE..
625 58423ea MLE.bind.a_tty_bind_create(): properly align durable buffer, too (sic)
626 f449fe1 MLE.bind.a_tty_bind_create(): tweak previous (encapsulate+notify
627         knowledge)
628 abd3631 Use ok_vlook(TMPDIR), drop global tempdir variable
629 4496e9a Many: drop support for *mbox-rfc4155* - a no-brainer..
630 a26d4c2 is_head(): change compat argument to check_rfc4155..
631 5cf41d4 mime_types.c:_mt_by_filename(): basename() path (fix/tweak relative
632         paths)
633 e4ddaa8 Change n_iconv*() protos, add enum n_iconv_flags (Ralph Corderoy)..
634 b1b3896 setfile(): tweak/fix [36578d1] (Add PS_SETFILE_OPENED..)..
635 26674da make.rc, mk-conf.sh: OPT_DEVEL includes OPT_DEBUG, but not vice versa
636 8cbd815 make.rc: OPT_DEBUG (eg) is allowed even with a CONFIG=
637 813802d FIX [b9e4e61d] (Drop features', change `version'..)..
638 e486af5 termcap.c: fix: add missing _F_NOENT check..
639 5bcef02 n_lex_input(): FIX [844bedb] (overwrote buffer size with used length)
640 d59bd2a collect(): FIX [bb944266] (used memcpy() for overlapping region)
641 f498291 a_lex_source_file(): fix resource leak, set a_LEX_FREE for these
642 83313f1 Allow -X options to take multiline arguments..
643 eaa5f01 nail.1: -X: note all are joined and treated as a unit
644 204531f cmd_tab.h: allow history for `environ', `set', `varshow'
645 a1eee83 Add a RFC 6068 url_mailto_to_address() hack for List-Post:
646 9503e7d `source': due to wysh prefix allow space after | pipe indicator
647 9fde9d7 lex_input.c: tweak/rethink [83313f1] (Allow multiline -X options)..
648 99e96f3 FIX "," message specification (since [1c4b8c9], v14.8.4)..
649 1587069 FIX [44cec1f] (Fix "address" message specifications (John Dodson))..
650 e40e181 nail.1, nail.rc: set *sendwait* by default (Ralph Corderoy)
651 7ea7734 make.rc: oops, set VAL_MBOX to ~/.mbox not ~/mbox in [94b3635]!
652 0879986 First (rather small) step in reworking getmsglist()..
653 3051546 Move `help' to lex_input.c, show argument type with *verbose*
654 3c86507 getmsglist(): improve [0879986] a bit
655 d5bdcaa getmsglist(): fix [0879986]: honour hidden/deleted for / and @
656 0ef4291 `z': add ^: goes to first screen; fix max calc for 0 modulos
657 7adcf99 `write'++: !interactive: urlxenc() attachment paths (Ralph Corderoy)..
658 58393be getmsglist(): fix [0879986]: honour hidden/deleted for :colon
659         modifiers
660 b14aae7 `write'++: !interactive:.. But now, really (Lyndon Nerenberg, David
661         Levine)..
662 20082ee THANKS: David Levine and Lyndon Nerenberg
663 5270bf1 Simplify *folder* (implicit trail solidus) (Stephen Isard, Ralph
664         Corderoy)
665 dcd26bd Add FEXP_{NSPECIAL,NFOLDER}, disallow fatal user recursions
666 f1313c0 Add `urlcodec', obsolete `url{en,de}code'
667 610b952 `urlcodec': makeprint() when decoding
668 a638bcf Add *typescript-mode*, set it for -# (Ralph Corderoy, Martin
669         Neitzel)..
670 053e19f Add *inbox* (Stephen Isard, and Jürgen Daubert)..
671 5d7b970 Add n_SHEXP_PARSE_QUOTE_AUTOCLOSE (simplifies tab completion)
672 6a09b2c folder_query(): FIX [5270bf1]: strlen() may be 0, so don't [len-1]
673 f67e8c3 folder_query(): err: real FIX for problem "fixed" with [6a09b2c]..
674 4a4630d `folders': tweak return value (a bit)
675 9d364e1 mk-conf.sh, auxlily.c: fix va_copy(3) detection with -std=c89
676 4f581d4 getmsglist(): hey. If we cannot find threaded range end, reverse
677         direction
678 830e15a n_verr(): even without va_copy(3), limit buffer to 1 KB!
679 20e3240 Add OPT_ALWAYS_UNICODE_LOCALE (Predrag Punosevac)..
680 14b5a3a Make combinetime() overflow safe (Vincent Lefevre)..
681 2bf0888 getmsglist(): if user gives A-B, try fulfill even in threaded mode
682 dfc5dac Fix off-by-one introduced in [57744f9] (Redefine *folder* ..)..
683 c4522db Tweak [36578d1] (Add PS_SETFILE_OPENED..) by saving errno
684 0bd7cbb Dotlock: O_TRUNC is meaningless with O_CREAT|O_EXCL; etc.
685 == Preview 2 ==
686 3fa035ac mk-conf.sh: fix bmake(1)/portable, it fails to import
687         $CFLAGS/$LDFLAGS
688 7a657d9c cc-test.sh: add S/MIME disproofs via smime(1) (Sven Neuhaus)..
689 a445996e THANKS: Sven Neuhaus
690 8cc4fc48 collect(): fix [bb944266] and [d59bd2a] (loop did not dec ptr!)
691 de8f750b n_termcap_suspend(): oops, fix capability reverse ke<>te, te<>ke
692 9e08fe35 README: go away from Gitlab; hello, unagitated repo.or.cz!
693 ae86c884 cmd1.c:__hprf(): compensate for add. bytes of UTF-8 seq.(s) (Martin
694         Neitzel)
695 38426102 extract_header(): FIX: multiple In-Reply-To: names are allowed!
696 0472b0d6 More or less completely rewrite memory.c..
697 096e6021 Allow Base64 and QP en- and decoding to fail
698 d91a4bd0 More or less completely rewrite mime_enc.c..
699 d33285fa `bind': new "default" context and changed "base" semantics..
700 abf00559 (BWDIC!) Rewrite prompt handling via new n_tty_create_prompt()..
701 38fd5de7 (BWDIC!) *encoding*: change default to base64, provide
702         documentation..
703 83115c3b Allow - as an output filename..
704 675d825b nail.rc, nail.1: set *editheaders* by default, and pimp "A starter"
705 44ff5125 TLS/SSL: make OPENSSL_API_COMPAT=0x10100000 clean..
706 411e9f7a Allow `errors' in send mode, too
707 eb3ad408 Hack: message/rfc822 may only be [78]bit/binary acc. RFC 2046, 5.2.1
708 03309960 The time has come: $POSIXLY_CORRECT, *posix* have arrived
709 975e6869 (BWDIC!) Only rm sysboxes, unless *posix* (Walter A. Iglesias,
710         trondd)..
711 a3a1d38e Add `headerpick'; Localize stuff, and rename ignoretab.c ->
712         ignore.c..
713 af741f6a Make macros interruptible again (i. hate. jumps.)
714 81e33751 Throw away file_expand() (Ismael Bouya)..
715 f1fdc933 THANKS: Ismael Bouya
716 3779baad Obsolete -E and -B (-> STDOUT always LBF, STDIN with -#)
717 ab17f686 mk-release.*: FTPS?, henceforth only .tar.{g,x}z{,.asc}
718 0352f2f6 -s, ~s: normalize NL/CR characters (Debian #419840)
719 791c5e97 Give error if compose failed (later better; Debian #37104)
720 5026ea36 MLE: take advantage of new "default" `bind' context
721 7745ea13 cmd_tab.h: allow `source', `source_if' and `shell' during composing?!
722 c7d42236 Add *on-compose-done-shell* hook
723 e4499f98 Add ~^ plumbing command escape
724 d8737937 Add a `read' command (like read(1), but yet a bit basic)
725 f8e9cc30 Drop `customhdr' again (keep *customhdr*): `~^' is better!
726 0824682c collect(): fix twice dump of -q file (since [d6902e1], 2016-05-03)
727 5ae556f8 Add *r-option-implicit* (Felipe Gasper, Martin Neitzel)..
728 534fd725 THANKS: Felipe Gasper
729 9fc22b15 Final step to support Base64 with multibyte charsets..
730 a8897b02 Add an *on-compose-done* macro (running in a subprocess)
731 645e44ec BWDIC! Add `echoerr'; FIX *bang* (bwdic!); and some cmd*.c ordering
732 629035e1 Dump to a "-" file recipient even with *debug* enabled!
733 33709163 nail.1: some more words for *inbox*, and such sort (Stephen Isard)
734 88c19049 mk-release.inc: place OpenPGP signatures last (learned from Paul
735         Eggert)
736 ebf2a584 THANKS: Paul Eggert
737 5d345bd0 Finally use /dev/arandom not /dev/urandom for OpenBSD
738 3d7835fc (BWDIC!) Extend semantics of -a and `~@' (bwdic!); attachments for
739         `~^'..
740 2b33a8cb Add new "failinvaddr" keyword for *expandaddr*
741 0ede309c Rudely fix the RFC 5322 dot-atom, the "Dr. Problem" (Dr. Werner Fink)
742 261f205b THANKS: Dr. Werner Fink
743 e441efb4 Integrate S/MIME passwords into usual credential lookups (a bit)..
744 1ad6817d nail.1: disable "The Mailcap files" for v14.9.0; sigh and sorry
745 == Preview 3 ==
747 Appendix
748 ^^^^^^^^
750 The complete changelog of commits in between two versions OLD and
751 NEW can be inspected by using the git(1) `log' command:
753   $ git log --reverse --topo-order --abbrev-commit OLD..NEW
754   # Only topic branch headers (--no-merges for content commits only):
755   $ git log --oneline --reverse --topo-order --merges OLD..NEW
756   # Same, but truly accessible:
757   $ git log --oneline --reverse --topo-order --merges --parents OLD..NEW |
758     while read c1 c2 c3 c4 c5 c6; do
759       printf "%-24s: \$ git log --oneline --no-merges %s ^%s\n" \
760         "${c6}" "${c1}" "${c2}";
761     done
763 NEWS entries for the S-nail releases before v14.9.0 have been cut off
764 before release v14.9.0 and can be found in the git(1) repository:
766   v14.8.0 - v14.8.14: $ git show v14.8.14:NEWS
767   v13     - v14.8.5 : $ git show v14.8.5:NEWS
768   9.0     - 12.5    : $ git show heirloom:ChangeLog
770 Also accessible via the following URL, just replace X.Y.Z accordingly:
771   https://git.sdaoden.eu/cgit/s-nail.git/tree/NEWS?h=vX.Y.Y
772 For even older releases you need to look into the [timeline] branch, but
773 no changelog has been administrated for them.
775 Note:
776 The content has been vaporised.  Ways to access the leakage are
777 documented in the newest announcement at the top of this file.
779 # s-ts-mode