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]