v14.9.0-pre1
tag53d378a361bd791a3fbc436bc666ad3fe9ce73bd
object 740eebd013a1e6bb0332ce7dc35cc9748c820325
authorSteffen (Daode) Nurpmeso <steffen@sdaoden.eu>
Thu, 15 Sep 2016 22:19:45 +0000 (16 00:19 +0200)
v14.9.0 ("Crow"), 201?-??-??

This is a major feature release.
  Preview 1, 2016-09-16:
    IMAP gone, better don't ^C during macros.  Misses major
    components of the final release.

I didn't know where S-mailx will truly end up with, but only knew
i wanted to overcome the technical shortcomings, have a better
user experience (regarding the software) and that i wanted to
have, e.g., NNTP support.

During development of this release it became clear that the
general usage will be changed, backward incompatibly, and move
towards sh(1)ell style command line usage, that is to say, we will
turn over and will start parsing regular shell tokens, instead of
comma-separated lists, OR space-separated lists or whatever, and
will expand _any_ value content sh(1)ell-compatibly, instead of
not at all in general and only \t and \n in some others etc.

  wysh set a='${TMPDIR}\t/' b="${TMPDIR}\t/" c=$'\${TMPDIR}\t/'
  echo a=$a b=$b c=$c
  a=${TMPDIR}\t/ b=/tmp\t/ c=/tmp /
..
  set a='${TMPDIR}\t/' b="${TMPDIR}\t/" c=$'\${TMPDIR}\t/'
  echo a=$a b=$b c=$c
  a=${TMPDIR}\t/ b=${TMPDIR}\t/ c=$\${TMPDIR}\t/

(But don't do that).  All this is documented in COMMANDS#?.
Today only new commands (like `bind', `customhdr' etc.), but also
attachment selection, `remove' and `write' use this, others, like
`set', can optionally support it with a new command prefix: `wysh'.

Credits, in order of commit appearance: Antonio Radici,
Aharon Robbins, Mike Frysinger, Predrag Punosevac, Michael Convey,
Hariskar, Rudolf Sykora, Martin Neitzel, Gavin Troy,
Salvatore Bonaccorso, Todd C.  Miller, Sergey Matveev, Robert Elz,
Mantas Mikulėnas, Respiranto, Jens Schleusener,
Walter Alejandro Iglesias, Ralph Corderoy, Thomas Dickey, Afan,
Justin Ellingwood, Ingo Schwarze, Viktor Szépe, Gaetan Bisson,
Juan RP, William Yodlowsky, Hilko Bengen, Matthew Dillon,
Colin Watson and Donald Mugnai.

We welcome Antonio Radici, Mike Frysinger, Predrag Punosevac,
Michael Convey, Rudolf Sykora, Todd C. Miller, Robert Elz,
Jens Schleusener, Walter Alejandro Iglesias, Thomas Dickey, Afan,
Justin Ellingwood, Viktor Szépe, Juan RP, Matthew Dillon,
Colin Watson and Donald Mugnai in THANKS.

Apologies: Sergey Matveev.  Members of the Roff community which await
progress.

  In the following numbers in [] reference a commit hash or a topic
  branch name.  mdocmx(7) anchors are denoted by a number-sign #:
  typing "^A ANCHOR" while reading the man(1)ual in a capable less(1)
  will scroll to the manual's Point-Of-Interest, and pointing a web-
  browser to the "#ANCHOR" of the online manual will do so, too.
  Commits can be browsed by appending the commit hash to
    https://git.sdaoden.eu/cgit/s-nail.git/commit/?id=

NOTES, ChangeLog (packager-affine)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* This release brings backward incompatibilities, especially for
  packagers and interactive use cases!

  + Anything which was WANT_xy before is now OPT_xy, and
    compiled-in paths and values, like PREFIX or PAGER, have
    gained a VAL_ prefix (thus VAL_PREFIX and VAL_PAGER).

    This is _not_ true for non-persistent or environmental values,
    e.g., DESTDIR, CC, etc, and also not for the overwritable
    program variables during configuration, e.g., $awk.

  + SENDMAIL -> VAL_MTA, SENDMAIL_PROGNAME -> VAL_MTA_ARGV0,
    MAILSPOOL -> VAL_MAIL.

  + The make system now needs config..build..install or
    all..install or tangerine (config..build..test..install).

  + The `build' phase can be parallelized by setting the MAILJOBS
    environment variable, e.g., "make MAILJOBS='-j 4' build".
    (Gaetan Bisson)

  + Set the new OPT_CROSS_BUILD to avoid feature runtime tests,
    only compile- and link-availability will be tested.  (Juan RP)

  + VERBOSE is implemented straight, but must be given at
    configuration time in order to become honoured.
    (William Yodlowsky)

  + ADDCFLAGS / ADDLDFLAGS -> EXTRA_CFLAGS / EXTRA_LDFLAGS

  + The LD_LIBRARY_PATH etc. building processes will skip any path
    which contains the string "fakeroot".  (Hilko Bengen)

  + We honour a set SOURCE_DATE_EPOCH environment variable.
    [df4954c]  (reproducible-builds.org; Colin Watson)

  + Packagers should have received diffs against v14.8.10
    packaging files.

  + These are upward compatible changes.

- To support RFC 1524 a.k.a. .mailcap files (see below) many
  "trigger"-characters have been added for *pipe-TYPE/SUBTYPE*#?,
  which may (rarely) affect existing values. [topic/mimepipe.2]

- *NAIL_{HEAD,TAIL}* have been obsoleted in favour of
  *message-inject-head*#? and *message-inject-tail*#?. [7064ef2]

- *NAIL_HIST{FILE,SIZE}* have been obsoleted in favour of
  *history-file*#? and *history-size*#?. [4fde608]

- -H#? and -L#? have been decoupled: it used to be -e#? -L#?
  instead! [5296040]

- Colour support has been changed backward in- and upward (from user
  interface side) compatibly, manual section "Coloured display"#?
  [topic/colour.2, topic/termcap.2, topic/wysh]:

  o New commands: `colour'#? and `uncolour'#?.
    You can define context-sensitive, terminal-capability-sensitive
    settings, e.g.:

      if terminal && $features @= +colour
        colour iso  view-header ft=bold,fg=magenta,bg=cyan
        colour 256  view-header ft=bold,fg=208,bg=230 subject,from
        colour mono view-header ft=bold
        colour mono view-header ft=bold,ft=reverse subject,from
      endif

  o The variable *colour-pager*#? defines whether colour and font
    attribute sequences should be generated when viewing something in
    $PAGER.

  o Set the variable *colour-disable*#? to turn colour off without
    affecting established settings.

  o It is deduced via termcap(5) (see below) whether the terminal
    supports colors, e.g., "s-nail -Stermcap=Co#256".

  o Support for 256-colour terminals. (Gavin Troy)

- `source'#? series support shell pipes if the last character of
   the "filename" ends with a vertical bar |, e.g. [c1c1ee5]

      source 'gpg -qd ~/.s-nailrc-private.gpg |'

- Shell pipes are also supported as targets for `move'#?,
  `copy'#? etc., e.g., [0d0c523]

      copy . '| cat; echo huhu'

- Support for custom headers via the new `customhdr'#? and
  `uncustomhdr'#? commands.  Because we don't have "scope-local"
  environments yet there temporarily is also *customhdr*#?,
  which can be covered by `localopts'#?. [topic/customhdr]
  (Sergey Matveev)

  o Support of *ORGANIZATION* has been dropped.

  o In compose mode `~e'#? supports _any_ header.

- New -:#? command line option can be used to more easily select
  which startup files should be loaded. [5d52578]
  (Robert Elz)

- `account's#? and *folder-hook*s#? now have `localopts'#?
   enabled by default. [3fd94e3]

   o Note: it is likely that in the future "scope-local" environments
     will be implemented, then also covering things like shortcuts etc.,
     and some thing like a "global" prefix to extend a setting to the
     global namespace.  (Think TeX.)

- A first simple form of compose-mode hooks has been implemented:
  *on-compose-enter*#? and *on-compose-leave*#? can be set to
  macros which get invoked at appropriate times, with `localopts'
  enabled (which extend until the message is sent). [d6902e1,3fd1db4]
  (Jens Schleusener, Rudolf Sykora)

- "The .netrc file"#?

  o gained support for comments. [abf2e5d]
    (Walter Alejandro Iglesias, Ralph Corderoy)

  o `netrc'#? now has a "load" subcommand. [30d0bb7]

  o the new *netrc-pipe* obsoletes OPT_AGENT and
    *agent-shell-lookup* and can be used to load an encrypted
    .netrc file, e.g.:

      wysh set netrc-lookup netrc-pipe='gpg -qd ~/.netrc.gpg'

    E.g., this is in usual .netrc syntax and thus possibly much
    nicer than saying "source 'gpg -qd ~/.credentials.gpg |'".

- termcap(5) / terminfo(5) support has been changed backward in- and
  upward (from user interface side) compatibly, please read
  "On terminal control and line editor"#? [topic/termcap.2]

  o OPT_TERMCAP is by default enabled.
    The new, by default enabled, configuration option
    OPT_TERMCAP_VIA_TERMINFO can be used to (try to) use terminfo(5)
    instead.

  o The variable *termcap*#? can be used to freely define or override
    terminal capabilities, *termcap-disable*#? will disable
    interaction with the chosen library, leaving only *termcap* in
    charge.

  o The builtin command line editor has been rather completely rewritten
    to be the Mailx-Line-Editor (OPT_MLE, default yes), and supports
    wide glyphs (if possible), infinite line lengths (2 GB) and more.
    Tabulator expansion is no longer an option (but needs
    fnmatch(3)).

  o Optionally (OPT_KEY_BINDINGS, default yes) it has become possible
    to freely define key bindings for the MLE via the new `bind'#?
    and `unbind'#? commands.  These key bindings can make use
    of termcap(5) and/or terminfo(5) names.  The MLE will install
    a set of default bindings, more with OPT_TERMCAP: "bind*".

  o OPT_EDITLINE and OPT_READLINE support have been dropped.
    The new MLE should not miss anything.  Does it?
    Tip: in an UTF-8 locale try "touch /tmp/hall{,öchen}" and then
    autocomplete that: once, then ^Q, and again.

- `source'#? can be used in `call'ed#? macros.
  What sounds so innocent replaced an entire machinery and got rid of
  a brilliant idea of Kurt Shoens from the 70s, but which never worked
  with Nail/Heirloom extensions, namely macros, and in right order.

  Accompanying this -X#? can be used to define macros and run them
  etc.  We're still not there, S-nail v15 -- then S-mailx! -- will
  change the entire codebase to use SystemV signal handling, instead of
  going the BSD way that is, like used here, both, very expensive due to
  the immense amount of signal managing systemcalls and insecure due to
  almost uncontrollable longjmp()s.  This should work:

    s-nail -X'define x {' -Xversion -Xx -X'}' -X'call x'

- Internal and environment variables are now explicitly _defined_ and
  _tracked_ after variable handling has been rewritten completely.
  [topic/okeys-attr.2]

  o Notes:
    + This means that, e.g., "password=NOT_SECRET s-nail" will **NOT**
      work no more, since *password*#? is an internal variable!

    + But if you do, e.g., "set TMPDIR=~/tmp", then this will also be
      reflected in the program environment (it is an environment
      variable) and thus affect child processes.

    + Therefore we no longer have `setenv' and `unsetenv'.

    + To integrate other (unkown) environment variables transparently
      into our variable management, the new command `environ'#?
      needs to be used, e.g., "environ set NEWVAR=valye" or
      "environ link EXISTINGVAR".

  o -u#? / *LOGNAME*#? (*USER*) handling has been redefined, and
    "-u USER" is now exactly the same as "-f %USER", and *LOGNAME* (and
    *USER*) is actively set to the active user. [d8f7cd7]  (Afan)

   (*LOGNAME*#? is POSIX standardized and henceforth used and preferred
   over *USER*, which came from BSD. [e96baaa]  (Todd C. Miller))

  o *MAIL*#?, as the user's primary system mailbox, nows supports the
    usual file name expansions. [e337e00]

- In the future (at least non-message-list) argument handling will be
  changed backward-incompatibly to be sh(1)ell compatible (and thus
  POSIX standardized).  New commands use it already today (`bind'#?,
  `colour'#?, `customhdr'#?), some others (most importantly,
  `set'#?) can be forced via the new `wysh' command prefix,
  as in: [topic/wysh]

    wysh set message-inject-tail=$'\n--steffen'
    bind base $'\cA,\x61' 'echo control-A and small a'

- We now actively manage *umask*: 0077 by default, but an empty
  string will use the setting that is active upon startup.
  Like any change to (known) environment variables this setting
  will also be inherited by any child process. [1bd8e48]
  (Walter Alejandro Iglesias)

- Anything SENDMAIL / *sendmail*-ish has been renamed to *mta*,
  e.g., *mta*, *mta-arguments*, *mta-no-default-argument*,
  *mta-argv0*.

  The reason is that in v15 we won't even have *smtp*: it is just
  another form of MTA, and thus obsolete by itself.

  For now we support a hack that understands a file:// URL in
  *mta*, too, but that is the default if there is no protocol.
  E.g.: "set mta=smtp://a:b@xy.z"

- The "spamd" spam interface is obsolete.  I haven't tested it
  since my main machine died, it is error prone since it assumes
  internals of the spamassassin interface, and there never was
  a speed improvement against "spamc".  (However it could react
  upon the current "is-spam" state of a message, which "spamc"
  doesn't allow.) [284db64]

- Some commands, like `set'#?, `list'#?, `mlist'#? etc.,
  now react upon the setting of *verbose*#? and *debug*#?.

ChangeLog
^^^^^^^^^

- The manual has seen another major overhaul, all the variables are now
  documented in a single, sorted list, and many clarifications should
  have been added. [topic/manual.10]
  (Predrag Punosevac, Michael Convey, Hariskar, Rudolf Sykora,
  Respiranto, Thomas Dickey, Donald Mugnai)

- *mime-counter-evidence* gained bit 4 (perform proper in-depth content
  inspection as necessary; set to 0xE for all bits).
  [topic/mimetype.2]  (Aharon Robbins)

- Maildir paths are now created recursively as necessary. [3c57c83]
  (Justin Ellingwood)

- -M#? and -m#? options have been added to enforce a special
  send mode that will flag standard input / the given file with the
  specified / detected MIME 'Content-Type:'.  This can be used to
  directly send, e.g., HTML log output.  Note that before v15 this
  is a bit restricted: you are not free to do anything. [f1a775b]
  (Viktro Szépe, Ralph Corderoy)

- Disallow symlinks on writable files (O_NOFOLLOW open(2)).
  [10990e4]  (Matthew Dillon)

- `retain'#?, `ignore'#? etc. now differentiate in between
  From (the From: header) and From_ (the MBOX ident).  [c83e153]

- `top'#? has been rewritten completely, `Top'#? is new.
  [1dc9bb6]

- `features' has been dropped, `version'#? extended. [b9e4e61]
-----BEGIN PGP SIGNATURE-----

iQIcBAABCgAGBQJX2x6uAAoJEOtmAieV84LOXBIP/RwTQpYw3nr5f8s47o+ITylW
DiZy91HJy3klN/MH8Q8N9T5gff2NKekoePNQwUlCupXcE773fEhZKeGzMXCxvk0K
P95/J8I2xvGo5RCL2ztoyZkoVUbq5Xm3BR6+1fs+h5zO+HZJwjSa3ID01yV0D0+o
CzmBz00HCBLS8TWxwgjjCJja4GUOlivJO5uGC9Dicej+X819NF88D8rd0Qap/7JG
zBxu/JOBcpO6J+5AUD9GCz4jKVAcuQHD8B4ZdmfknKn21XzDL7Y3fsQ1T0nhBdjA
FAtImreJKN0rQTYLTS/WpTQnOEm5MPgZbFCgkcUuqKprEWqOHfQUThw3B1EHsEtc
uYViraNZEgrwvLDZ3W9cbxweo7TVTwf1KZQYd8mB6jdGYvdNAnddDew1uG3jitQ3
ahwXjvO9+Q37Rlhnm4a7rlqliYlw4HZnGp6i+s/OMadH8iLJr6C2Ncw6LMA3dL2N
37FY+qeXUFN2BpVROesj56diX3hLyZDJagce/Jb5m/4gWPIKutl8zLrgDkS2aR5I
j8+2vQV0BzyF92bcIWXGfCxcnreQeIOSHegIaT8hArAkmClSWDqsUUo1gDCeeMog
IHgIuE1wrNI79wjhDqutkeaqQq6cene9xbzZ9X1rIz7cX1CvedDNLsQHxyCMd8kM
+2/HsIedlbMIn7T1cQPY
=fBDh
-----END PGP SIGNATURE-----