I am enormously happy of having merged the current state of affairs into [master], and being able to hereby release v14.9.0-pre4, the fourth preview of the «Long-tailed tit».
Preview 4, 2017-04-13(+55min): This is not a release candidate because some functionality is missing still: - the ~^ command escape needs new subcommands remove-at and remove-addrs, so that, e.g., the new *alternates* variable list can be manually removed with a single command. - the command escapes must learn to manage $? and $!. - also, i want a `-' command modifier for command escapes, in equal spirit to the new `ignerr' command modifier, so that, e.g., "~-:noSuchCommand" will effectively be "ignerr noSuchCommand" and thus not exit even with *ignerr* set. The interaction of *errexit* and command escapes is not yet proper. (And i hope the `-' is known from `make', sigh.) - disable all MIME handlers which do not integrate into normal output, i.e., are not "copiuous" output. This of course requires a new `mimeview' or similar command, and this is a problem: we have it all, but the code paths have nothing in common. But i will not ship 14.9.0 with the current, completely unrestricted MIME handlers enabled. - try (hard) to reinstantiate IMAP. + If you tried something with -pre3, and it did not work: please try again! This is a major feature release which took about ~19 months (21 less two) of development to complete, and which imposed massive changes under the hood, but also quite a lot of user visible changes, including some **backward incompatibilities**. It brings noticeable improvements regarding scriptability and its reliability, but also for interactive use cases, especially notable to users is our completely new M(ailx)L(ine)E(ditor) that supports rather real tabulator expansion and program-mode-context- sensitive key bindings. We now support macros with arguments, which can be `shift'ed, a `return' status can be used, and a `vexpr' multiplexer offers some arithmetic and string operations. `commandalias'es are recursive, further command modifier prefixes, like `ignerr', give a hand that we otherwise could not offer. In compose-mode the new `~^' command escape allows some message and attachment access, and can be used, e.g., to implement things like custom headers, and has been especially designed for scripted access via the new *on-compose-splice* and *on-compose-splice-shell* hooks. S-nail will move (more or less) backward-incompatibly to sh(1)ell compatible argument quoting (documented in "COMMANDS"), and an increasing number of commands do support this already: new ones exclusively, some old ones have either been switched (like `localopts'), others -- noticeably `set' -- can be switched to the new syntax with a `wysh' command modifier prefix. E.g.: ? define __xv { localopts yes; wysh set verbose; ignerr eval "${@}"; return $? } ? commandalias call echo boo-boo ? commandalias xv call __xv ? xv list ? wysh ghost xv '\'call __xv ? xv list Calling this `xv' for `list' will give more detailed command information, including which kind of argument is used. I have not managed to implement the three features i have started this development cycle for, these are thus subject to further development, just like wysh for message-list argument commands to support, e.g., negation, and wysh for `if' and consorts. 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, David Levine, Lyndon Nerenberg, Thomas Dickey, Afan, Justin Ellingwood, Ingo Schwarze, Viktor Szépe, Gaetan Bisson, Juan RP, William Yodlowsky, Hilko Bengen, Matthew Dillon, Colin Watson, Donald Mugnai, Stephen Isard, Jürgen Daubert, Sven Neuhaus, trondd, Ismael Bouya, Felipe Gasper, Paul Eggert, Dr. Werner Fink, Ken Hornstein, Noel Chiappa, Random832, Doug McIlroy, Baptiste Daroussin, Riccardo Ductor and Pietro Cerutti. 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, Donald Mugnai, Sven Neuhaus, Ismael Bouya, Felipe Gasper, Paul Eggert, Dr. Werner Fink, Ken Hornstein, Noel Chiappa, Random832, Doug McIlroy, Baptiste Daroussin, Riccardo Ductor and Pietro Cerutti in THANKS. Apologies: Sergey Matveev. Members of the Roff community which await progress. 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 works. NOTES, ChangeLog (packager-affine) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * This release brings some backward incompatibilities, outlined in the following. * The configuration and build system has changed: o 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. o SENDMAIL -> VAL_MTA, SENDMAIL_PROGNAME -> VAL_MTA_ARGV0, MAILSPOOL -> VAL_MAIL. And VAL_NAIL -> VAL_MAILX, though this is still a lie. o The make system now needs config..build..install or all..install or tangerine (config..build..test..install). o The `build' phase can be parallelized by setting the $MAKEJOBS environment variable, e.g., "make MAKEJOBS=-j4 build". Note this variable is not tracked in the configuration. (Gaetan Bisson) o Set the new OPT_CROSS_BUILD to avoid feature runtime tests, only compile- and link-availability will be tested. (Juan RP) o VERBOSE is implemented straight, but must be given at configuration time in order to become honoured. (William Yodlowsky) o ADDCFLAGS / ADDLDFLAGS -> EXTRA_CFLAGS / EXTRA_LDFLAGS. o The LD_LIBRARY_PATH etc. building processes will skip any path which contains the string "fakeroot". (Hilko Bengen) o We honour a set $SOURCE_DATE_EPOCH#? environment variable. (reproducible-builds.org; Colin Watson) For reproducability of error messages, the new *log-prefix* variable can be set. o These are upward compatible changes. o "make OPENSSL_API_COMPAT=0x10100000 all" should work. - 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. The .mailcap support itself is not yet implemented. - *NAIL_{HEAD,TAIL}* have been obsoleted in favour of *message-inject-head*#? and *message-inject-tail*#?. - *NAIL_HIST{FILE,SIZE}* have been obsoleted in favour of *history-file*#? and *history-size*#?. - -H#? and -L#? have been decoupled: it used to be -e#? -L#? instead! - Colour support has been changed backward in- and upward (from user interface side) compatibly, see the manual section "Coloured display"#?. + 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 + The variable *colour-pager*#? defines whether colour and font attribute sequences should be generated when viewing something in $PAGER#?. + Set the variable *colour-disable*#? to turn colour off without affecting established settings. + It is deduced via termcap(5) (see below) whether the terminal supports colors, e.g., "s-nail -Stermcap=Co#256". This is also true if we don't have termcap support. + 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., ? source 'gpg -qd ~/.s-nailrc-private.gpg |' - Shell pipes are also supported as targets for `move'#?, `copy'#? etc., e.g., ? copy . '| cat; echo huhu' - Support for custom headers via the new ~^#? compose-mode command escape and in addition, or alternatively, with the internal variable *customhdr*#?, which can be covered by `localopts'#?. (Sergey Matveev) + Support of $ORGANIZATION has been dropped. + In compose mode ~e#? supports _any_ header. + In compose mode ~^#? supports _any_ header. - New -:#? command line option can be used to more easily select which startup files should be loaded, e.g., -:/ loads none. (Robert Elz) - `account'#?s and *folder-hook*#?s now have `localopts'#? enabled by default. - 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). An even more powerful mechanism is available via the also new *on-compose-splice* and *on-compose-splice-shell* hooks, e.g., (Jens Schleusener, Rudolf Sykora) ? set on-compose-splice=ocs ? define ocs { read ver echo Splice protocol version is $ver echo '~^header list' read hl; vput vexpr es substr "${hl}" 0 1 if [ "$es" != 2 ] echoerr 'Failed to read header list, bailing out'; echo '~x' end if [ "$hl" !@ ' cc' ] echo '~^header insert cc Diet is your <mirr.or>' read es; vput vexpr es substr "${es}" 0 1 if [ "$es" != 2 ] echoerr 'Failed to insert Cc:, bailing out'; echo '~x' end end } - "The .netrc file"#? + gained support for comments. (Walter Alejandro Iglesias, Ralph Corderoy) + `netrc'#? now has a "load" subcommand. + the new *netrc-pipe*#? obsoletes OPT_AGENT and *agent-shell-lookup*, and can be used to load an encrypted .netrc file, e.g.: ? 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"#? + 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. + The variable *termcap*#? can be used to freely define or override terminal capabilities, and *termcap-disable*#? will disable interaction with the chosen library, leaving only *termcap* in charge. + The builtin 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)). + 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 so with OPT_TERMCAP, try "bind*". Sufficient support provided, one can now, e.g., type "p " and then collect the message numbers to type, scrolling forward and backward via key-bindings, without loosing the line content, then commit the final line. + 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. Should work: $ s-nail -X'define x {' -Xversion -Xx -X'}' -X'call x' $ s-nail -X'source \' -X'"echo version|"' -Xx - Internal and environment variables are now explicitly _defined_ and _tracked_ after variable handling has been rewritten completely. + Notes: o This means that, e.g., "password=NOT_SECRET s-nail" will **NOT** work no more, since *password*#? is an internal variable! o 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. o Therefore we no longer have `setenv' and `unsetenv'. o To integrate any other environment variable transparently into our variable management, the new command `environ'#? needs to be used, e.g., "environ set NEWVAR=value" or "environ link EXISTINGVAR". + -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. (Afan) $LOGNAME#? is POSIX standardized and henceforth used and preferred over $USER, which came from BSD. (Todd C. Miller) - 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), see "Shell-style argument quoting"#?. New commands use it already today (`bind'#?, `colour'#?, `headerpick'#?), some others (most importantly, `set'#?) can be forced to do so via the new `wysh' command prefix, as in: ? 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. Just like changes to (known) environment variables, this setting will also be inherited by any child process. (Walter Alejandro Iglesias) - Anything SENDMAIL / *sendmail*-ish has been renamed to *mta*#?, *mta-arguments*#?, *mta-no-default-arguments*#? and *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. Note that *mta-arguments* is now parsed via the shell-token parser, so the following ends up exactly as desired. ? wysh set mta-arguments='-t -X "/tmp/my log"' For now we support a hack that understands a file:// URL in *mta*, too, but that is also 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 wire protocol, and there never was a speed improvement over "spamc". (However it could react upon the "is-spam" state of a message, which "spamc" doesn't allow.) - The new *inbox*#? variable will henceforth be looked up when searching for a primary system mailbox (as in "File %"), followed by the usual $MAIL#? and compile-time mailspool search. (Stephen Isard, Jürgen Daubert) - New "failinvaddr" keyword for *expandaddr*#?. - We finally "can" the so-called (by myself) "Dr. Problem" (a bit): (Dr. Werner Fink) $ echo|./s-nail -:/ -sTrödel -dSencoding=8bit \ 'Dr. Diet Curd <t...@fu.soj>' 2>&1|\ grep To: s-nail: >>> To: "Dr. Diet Curd" <t...@fu.soj> This can be done via the new `addrcodec'#?, too: $ echo 'addrcodec e Dr. Diet <t...@fu.soj> Curd'|./s-nail -#:/ "Dr. Diet Curd" <t...@fu.soj> - All commands with the string "codec" in their name use different argument quoting, namely none at all, read "Raw data arguments for codec commands"#?. - We gained "Command modifiers"#?: `\'#? (avoid `commandalias'#? expansion), `vput'#? (store result in variable), `ignerr'#? (ignore an error of the following command, even if the new *errexit*#? is set), `wysh'#? (use shell-style arguments). $ echo 'vput cwd resvar;echo $resvar' | ./s-nail -#:/ /home/steffen/src/nail.git And the usual sh(1) stuff: `return'#?, `shift'#?, `eval'#?, plus a `xcall'#? stack-avoidance optimization. And an "expr(1) like thing": `vexpr'#?. $ echo 'vexpr + 1 2' | ./s-nail -#:/ 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000011 03 | 0x3 | 3 $ echo 'vput vexpr resvar + 1 2;echo $resvar' | ./s-nail -#:/ 3 We actually start walking (?#?, *^*#?). ? vput vexpr res regex 'bananarama' 'Bana(.+)' '\$1\$0' ? echo $?/$^ERRNAME :$res: 1/NODATA :: ? vput vexpr res iregex 'bananarama' '(.+)rama' '\$1\$0' ? echo $?/$^ERRNAME :$res: 0/NONE :bananabananarama: - `if'#? no longer performs automatic number conversion, we use the explicit -lt, -gt syntax of the sh(1). Note: `if' will change to be almost identical to sh(1) if(1), so please ensure proper bracket quoting, even if it is less convenient. 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. I hope it has become a better read. (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). (Aharon Robbins) - Maildir paths are now created recursively as necessary. (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 quite restricted: you are not free to do anything. (Viktro Szépe, Ralph Corderoy) - Disallow symlinks on writable files (O_NOFOLLOW open(2)). (Matthew Dillon) - `retain'#?, `ignore'#? etc. now differentiate in between From (the From: header) and From_ (the MBOX ident). - In fact we now have a new `headerpick'#? command which is a multiplexer for all retain and ignore lists used, call it without arguments to see the current setting of them all. In v15 only `headerpick' and the standard-imposed wrappers `retain' and `ignore' will remain, all other wrappers will vanish. Regular expressions can now be used if available: 0[ich /var/spool/mail/steffen]? headerpick headerpick type retain add blahblahblah cc date from \ mail-followup-to message-id openpgp reply-to subject to \ user-agent #headerpick type ignore currently covers no fields #headerpick save retain currently covers no fields headerpick save ignore add '^Original-.*$' '^X-.*$' headerpick forward retain add cc date from list-id \ mail-followup-to reply-to subject to openpgp #headerpick forward ignore currently covers no fields - `top'#? has been rewritten completely, `Top'#? is new. It uses a builtin set of retain/ignore headers, but it is possible to register a custom set via `headerpick'#?. Also, *toplines*#? has been extended a bit and the new *topsqueeze*#? variable may pimp your `top' experience. ? headerpick top retain add subject ? top [-- Message 1 -- 87 lines, 4791 bytes --]: Subject: Re: I can't dist to myself I wrote: 3.22. bounce_delivered - `features' has been dropped, `version'#? extended. - The *prompt*#? handling has changed: we lost the capability to expand \?, \@ and \$, instead new "private" variables *?*#?, *account-name*#?, *mailbox-resolved*#? and *mailbox-display*#? have been introduced, and the prompt is completely shell expanded (thus twice with `wysh' or in v15), as if dollar-single-quote quoted. We do support the reverse- solidus escaped bracket notation for embedding characters which should not be counted when calculating the width of the prompt. The `colour'#? command has a slot for the prompt colour. We gained *prompt2*#? as a second level prompt. ? var prompt ? wysh set prompt='?\${?}[\${account} \${mailbox-display}]? ' - The filename "-" can be used as a receiver, e.g., echo 'From Blödel'|s-nail -:/ -Sexpandaddr -Sencoding=8b -sUB - - The -s#? command line option, the ~s#? command escape as well as the corresponding slots of ~^#? will actively strip [\r\n] from their value (Debian #419840). - New `read'#? and `echoerr'#? commands, mostly for *on-compose-splice*#?. But also `echon'#? and `echoerrn'#?, which don't write a trailing newline. - New variable *r-option-implicit*#? may be helpful to those who regulary need the functionality of the -r#? command line option. (Felipe Gasper, Martin Neitzel) - By using new "pseudo-URLs" one can automatize the use of S/MIME keys / (certificates / intermediate include certificates) with passwords. E.g., to drive b...@exam.ple, set *smime-sign-cert-...@exam.ple* to the private key / certificate pair as usual, the password lookup will then be performed for b...@exam.ple.smime-cert-key, b...@exam.ple.smime-cert-cert and b...@exam.ple.smime-include-certs. Like this the password can be stored in an encrypted .netrc file when *netrc-lookup*#? and *netrc-pipe*#? are set, or it may be stored in an encrypted resource file that has been loaded via `source'#? as a simple *password*#? variable. Note that the prompting that happens as a last resort will still interfere with a possibly running $PAGER#? instance, dependent on the setting of *crt*#?, of course. Proper job control handling and recognizing that we are running $PAGER when doing that prompt is a TODO for v15. Sorry. - Some commands, like `set'#?, `help'#?, `list'#?, `mlist'#? etc., now react upon the setting of *verbose*#? and(/or) *debug*#?. - `write'#? uses iconv(3) as appropriate. - *mbox-rfc4155*#? has first been dropped, and then reintroduced with different semantics. Because, it can be helpful if a messed up MBOX is read: by setting it, reopening the MBOX, unsetting it again and then doing "copy * SOMEWHERE" we will ensure the new SOMEWHERE is a valid MBOX. - `call_if'#? is new; kept it even after "ignerr call" came up. - The new *smime-ca-flags*#? and *ssl-ca-flags*#? can be used to fine-tune X509_STORE_set_flags(3). (In the following, the first `wysh' enables the ';' to be recognized as a shell token delimiter, the second allows shell-style expansion of the variable value.) ? wysh set ssl-ca-flags=partial-chain;\ wysh set smime-ca-flags="${ssl-ca-flags}" - Socket connections use TLS S(erver)N(ame)I(ndication) as appropriate (RFC 7817). - A new `charsetalias'#? command. (Pietro Cerutti, mutt#3925) git(1) shortlog (abbreviated) ''''''''''''''''''''''''''''' f01291d extract_date_from_from_(): dig more invalid MBOXes (Antonio Radici).. 69bf721 *pipe-TYPE/SUBTYPE*: add "@" triggers and $NAIL_FILENAME_TEMPORARY.. bb5d0e2 *pipe-TYPE/SUBTYPE*: add "!" trigger ("needsterminal") df8768b Add *mime-counter-evidence* bit 4 (Aharon Robbins).. d3fe980 Ftmp(): drop "mode" argument (not wrong: Mike Frysinger).. f6fbcc4 Add *mime-alternative-favour-rich*.. 86159db nail.1: we support searching, really (Predrag Punosevac) 5b61a08 nail.1: talk about address lists (again) (Michael Convey).. 0eeffc4 nail.1: try improve states / MBOX etc. relation (Michael Convey) 43ea039 nail.1: what is an environment variable (Michael Convey) 13e0804 nail.1: fix typo (Hariskar (archlinux Wiki)) 03d6af5 nail.1: more on sortability (Rudolf Sykora).. 4da9043 Not "binary", but "boolean" variables! (Predrag Punosevac).. 7064ef2 Add *message-inject-{head,tail}*, obsolete *NAIL_{HEAD,TAIL}* 4fde608 Add *history-{file,size}*, obsolete *NAIL_HIST{FILE,SIZE}* 36578d1 Add PS_SETFILE_OPENED (affects hooks), *bsdcompat*<>*emptystart*.. 600d449 Drop the `inc' alias of and for `newmail' 5296040 Decouple -H from -L: it used to be -eL instead! dad4e94 Obsolete *SYSV3* c85f56d Support :d specifier for at least `from' (Martin Neitzel).. 30d0bb7 `netrc': add "load" subcommand to only load, not also "show" b12e1ed Be more friendly when composing mails (Martin Neitzel).. b50eac0 nail.1: use display/show not type/print (Michael Convey).. 6feafaf Add `search' alias for `from' (Predrag Punosevac) a4e2612 Support 256-colour terminals (Gavin Troy) 16b57ab Drop `mono'+, change `colour' and `uncolour' commands.. d535db0 Implement `dotmove': move the "dot" up or down by one c1c1ee5 `source': support shell pipes (if filename ends with "|") 8655aff Error framework: print UAGENT prefix (ident in pipes; Salvatore Bonaccorso) e96baaa Introduce $LOGNAME, the POSIX equivalent of $USER (Todd C. Miller) 0d0c523 Support |PIPE targets for `move', `copy' ++.. 76e6364 Add `customhdr' (Sergey Matveev).. ad58c91 Support *customhdr*, too (Sergey Matveev).. 6322e0a Support _any_ user header via ~e (Sergey Matveev).. 19b3afb Drop support for $ORGANIZATION in favour of `customhdr' 77d4f5c Fix SSL init order, change *ssl-rand-file* behaviour.. 8daeda9 send.c:sendpart(): "support" malformed messages.. eddf684 Drop *print-all-chars* f733f61 Don't set *dot* in -# batch mode 5d52578 Add -: command line option (Robert Elz).. 53b5f07 README: use git(1) --single-branch (Mantas Mikulėnas) 420131f Fix mispelling: can|to be send->sent (Respiranto (archlinux Wiki)) 0dd85b1 n_iconv_open(): use *charset-unknown-8bit* also for "binary".. 3fd94e3 Default `localopts' to YES for `account' and *folder-hook*s! 983d22f `if'+: allow "if ${VARNAME}" in addition to "if $VARNAME".. d6902e1 Add *on-compose-{enter,leave}* hooks (Jens Schleusener, Rudolf Sykora).. abf2e5d .netrc: support comments (Walter Alejandro Iglesias, Ralph Corderoy).. 37e0c26 nail.1: .netrc comma separator was in original Berknet parser! (Ralph Corderoy) 7e85aa9 Drop WANT_EDITLINE support.. 512069b Rewrite for a generic termcap(5) interface.. 40522c3 nail.1: use -v option to cat(1) if available (Thomas Dickey) cf3ccfe Deduce colours via *termcap* instead!; support all/*.. 64eabef Turn NCL into M(ailx) L(ine) E(ditor).. 27f3e9d Add terminfo(5) support (via WANT_TERMCAP_PREFER_TERMINFO).. Note: later renamed to OPT_TERMCAP_VIA_TERMINFO 1aa64b6 Add WANT_KEY_BINDINGS.. d935e65 (BWDIC!) Allow `source' in `call'ed macros.. c8c1393 n_lex_input(): truly support line continuation via backslash.. 7f52ae7 make.rc+: add WANT_NOMEMDBG to allow valgrind(1)+ with DEBUG/DEVEL 2497240 homedir: if not $HOME, use pw_dir (of $LOGNAME or getpwuid()) 94b3635 (BWDIC!) make.rc: add defaults _here_ (as VAL_xy, e.g., VAL_SENDMAIL!) f0ac705 (BWDIC!) Rewrite variable handling.. 724751e nail.1: drop `(un)?setenv' and *bsdset*; add `environ' f4577e6 FIX (fix?) `localopts'.. d8f7cd7 (BWDIC!) Redefine -u / $LOGNAME / $USER (Afan).. e337e00 Support expansions in $MAIL!; more on `account's (Afan).. d596d74 Compare *newfolders* case-insensitively (Justin Ellingwood).. 57744f9 Redefine *folder* / getfold->folder_query() / *HOME* (Justin Ellingwood).. 3c57c83 n_path_mkdir(): create recursively as necessary (Justin Ellingwood) 66553bc `list': with non-WS argument, don't sort alphabetically b95e6be Introduce `wysh' command prefix to change argument parser.. 08b8f48 Only support sh(1)-style quoting for some new commands.. 67c2acb (BWDIC!) Only use new sh(1)-style quoting for attachments! f4b0153 (BWDIC!) Only use new sh(1)-style quoting for `write' a89e1e3 `remove': use sh(1)ell-style quoting 858374b Drop wordexp(3), instead unroll via fnmatch(3).. 0945726 MLE: change HT expansion.. 0bbe981 nail.1: fix spelling errors as by igor(1) (Ingo Schwarze) f1a775b Add -M and -m options (Viktor Szépe, Ralph Corderoy).. 42b42da `list': include argument-type etc. if *verbose* 79f2053 `if'+: support sh(1)-style comments on the line.. 1bd8e48 Add *umask*, and set actively (Walter Alejandro Iglesias).. 6b1cd93 Now with *umask*, just drop fchmod(2)++ calls (Walter Alejandro Iglesias) 2b45cd0 Add *netrc-pipe*: allows e.g. encrypted .netrc files af8261e Obsolete WANT_AGENT / *agent-shell-lookup* (Sorry!) ba22166 Change make targets; add $MAILJOBS; don't track $DESTDIR (Gaetan Bisson).. cd244b1 Add WANT_CROSS_BUILD make.rc option (Juan RP).. 95141f6 Tweak VERBOSE handling (William Yodlowsky).. 73545ad Rename ADD(C|LD)LAGS to EXTRA_(C|LD)FLAGS.. ca81646 make.rc, mk-conf.sh: allow y/n booleans d74a18a mk-conf.sh:path_check(): skip any "fakeroot" path (Hilko Bengen) 7ce6a17 (BWDIC!) nail.rc: nodot, emptystart, fullnames, m-c-e=0xE; pimp PDF handler 44a3be6 sendout.c:__savemail(): try to file_lock() *record* 5ef5261 cmd2.c:save1(): try to file_lock() target of `save'/`move'/etc. 10990e4 Add n_O_NOFOLLOW, disallow symlinks for writable files (Matthew Dillon).. c83e153 (BWDIC!) Require explicit "from_" to `retain' etc. From_ lines! d7a15e4 page_or_print(): query $PAGER environment, use it 1dc9bb6 (BWDIC!) Make `top' real-life capable! Add `Top', *topsqueeze*.. df4954c Add $SOURCE_DATE_EPOCH (reproducible-builds.org; Colin Watson) b412ea8 mime.types: add x-lzma, x-lz4 and x-lzip MIME type extensions dc92f2c savedeadletter()->sendout.c; tweak POSIX compliance (Ralph Corderoy) 8a3638c MLE: add `bind' and `unbind' etc... 4c93f66 (BWDIC!) Obsolete *sendmail*++ in favour of *mta*++; obsolete *smtp*.. 284db64 Obsolete *spam-interface*=spamd.. 61aac0f All: OPT_ not WANT_, VAL_XY not XY.. 45d488d README: add The Mail Archive -- Gmane.org reduced to NNTP 48eb7da SEND_TODISP(_ALL)?: append newline if message does have no final one 63bf464 (BWDIC!) Drop readline(3) support.. 863f1e8 tty.c,MLE: gracefully honour *line-editor-disable*++.. 844bedb Support LEXINPUT, thus `bind', contexts.. b9e4e61 Drop `features', change `version', adjust make system.. 20f3cd2 nail.1: more explicit `set' references instead of saying 'Set' (Donald Mugnai).. == Preview 1 == 1b462ed -#: also set *MAIL* to /dev/null 2d53b46 url_parse(): better take better care for path parts (Stephen Isard).. 8650fa6 sendmp(), setfile(): FIX: ensure time_current is actualized 21f0eaa mk-conf.sh: find terminfo on Sun (Thomas Dickey).. e33dfa0 n_termcap_query(): FIX: did real work even with PS_TERMCAP_DISABLE.. 58423ea MLE.bind.a_tty_bind_create(): properly align durable buffer, too (sic) f449fe1 MLE.bind.a_tty_bind_create(): tweak previous (encapsulate+notify knowledge) 4496e9a Many: drop support for *mbox-rfc4155* - a no-brainer.. a26d4c2 is_head(): change compat argument to check_rfc4155.. 5cf41d4 mime_types.c:_mt_by_filename(): basename() path (fix/tweak relative paths) e4ddaa8 Change n_iconv*() protos, add enum n_iconv_flags (Ralph Corderoy).. 83313f1 Allow -X options to take multiline arguments.. 204531f cmd_tab.h: allow history for `environ', `set', `varshow' a1eee83 Add a RFC 6068 url_mailto_to_address() hack for List-Post: 99e96f3 FIX "," message specification (since [1c4b8c9], v14.8.4).. 1587069 FIX [44cec1f] (Fix "address" message specifications (John Dodson)).. e40e181 nail.1, nail.rc: set *sendwait* by default (Ralph Corderoy) 0879986 First (rather small) step in reworking getmsglist().. 3051546 Move `help' to lex_input.c, show argument type with *verbose* 0ef4291 `z': add ^: goes to first screen; fix max calc for 0 modulos 7adcf99 `write'++: !interactive: urlxenc() attachment paths (Ralph Corderoy).. b14aae7 `write'++: !interactive:.. But now, really (Lyndon Nerenberg, David Levine).. 20082ee THANKS: David Levine and Lyndon Nerenberg 5270bf1 Simplify *folder* (implicit trail solidus) (Stephen Isard, Ralph Corderoy) f1313c0 Add `urlcodec', obsolete `url{en,de}code' a638bcf Add *typescript-mode*, set it for -# (Ralph Corderoy, Martin Neitzel).. 053e19f Add *inbox* (Stephen Isard, and Jürgen Daubert).. 9d364e1 mk-conf.sh, auxlily.c: fix va_copy(3) detection with -std=c89 20e3240 Add OPT_ALWAYS_UNICODE_LOCALE (Predrag Punosevac).. 14b5a3a Make combinetime() overflow safe (Vincent Lefevre).. 2bf0888 getmsglist(): if user gives A-B, try fulfill even in threaded mode 0bd7cbb Dotlock: O_TRUNC is meaningless with O_CREAT|O_EXCL; etc. == Preview 2 == 3fa035ac mk-conf.sh: fix bmake(1)/portable, it fails to import $CFLAGS/$LDFLAGS 7a657d9c cc-test.sh: add S/MIME disproofs via smime(1) (Sven Neuhaus).. a445996e THANKS: Sven Neuhaus de8f750b n_termcap_suspend(): oops, fix capability reverse ke<>te, te<>ke 9e08fe35 README: go away from Gitlab; hello, unagitated repo.or.cz! ae86c884 cmd1.c:__hprf(): compensate for add. bytes of UTF-8 seq.(s) (Martin Neitzel) 38426102 extract_header(): FIX: multiple In-Reply-To: names are allowed! 0472b0d6 More or less completely rewrite memory.c.. 096e6021 Allow Base64 and QP en- and decoding to fail d91a4bd0 More or less completely rewrite mime_enc.c.. d33285fa `bind': new "default" context and changed "base" semantics.. abf00559 (BWDIC!) Rewrite prompt handling via new n_tty_create_prompt().. 38fd5de7 (BWDIC!) *encoding*: change default to base64, provide documentation.. 83115c3b Allow - as an output filename.. 675d825b nail.rc, nail.1: set *editheaders* by default, and pimp "A starter" 44ff5125 TLS/SSL: make OPENSSL_API_COMPAT=0x10100000 clean.. 411e9f7a Allow `errors' in send mode, too 03309960 The time has come: $POSIXLY_CORRECT, *posix* have arrived 975e6869 (BWDIC!) Only rm sysboxes, unless *posix* (Walter A. Iglesias, trondd).. a3a1d38e Add `headerpick'; Localize stuff, and rename ignoretab.c -> ignore.c.. 81e33751 Throw away file_expand() (Ismael Bouya).. f1fdc933 THANKS: Ismael Bouya 3779baad Obsolete -E and -B (-> STDOUT always LBF, STDIN with -#) 0352f2f6 -s, ~s: normalize NL/CR characters (Debian #419840) 791c5e97 Give error if compose failed (later better; Debian #37104) 5026ea36 MLE: take advantage of new "default" `bind' context 7745ea13 cmd_tab.h: allow `source', `source_if' and `shell' during composing?! c7d42236 Add *on-compose-done-shell* hook e4499f98 Add ~^ plumbing command escape d8737937 Add a `read' command (like read(1), but yet a bit basic) f8e9cc30 Drop `customhdr' again (keep *customhdr*): `~^' is better! 0824682c collect(): fix twice dump of -q file (since [d6902e1], 2016-05-03) 5ae556f8 Add *r-option-implicit* (Felipe Gasper, Martin Neitzel).. 534fd725 THANKS: Felipe Gasper 9fc22b15 Final step to support Base64 with multibyte charsets.. a8897b02 Add an *on-compose-done* macro (running in a subprocess) 645e44ec BWDIC! Add `echoerr'; FIX *bang* (bwdic!); and some cmd*.c ordering 629035e1 Dump to a "-" file recipient even with *debug* enabled! 33709163 nail.1: some more words for *inbox*, and such sort (Stephen Isard) 88c19049 mk-release.inc: place OpenPGP signatures last (learned from Paul Eggert) ebf2a584 THANKS: Paul Eggert 3d7835fc (BWDIC!) Extend semantics of -a and `~@' (bwdic!); attachments for `~^'.. 2b33a8cb Add new "failinvaddr" keyword for *expandaddr* 0ede309c Rudely fix the RFC 5322 dot-atom, the "Dr. Problem" (Dr. Werner Fink) 261f205b THANKS: Dr. Werner Fink e441efb4 Integrate S/MIME passwords into usual credential lookups (a bit).. 1ad6817d nail.1: disable "The Mailcap files" for v14.9.0; sigh and sorry == Preview 3 == 303d46cd FIX [3d7835fc] aka `~^' attachments, especially Content-ID: (Ralph Corderoy) f797c27e FIX privsep.c, yes, vulnerability (wapiflapi).. 847a21b5 THANKS: wapiflapi f2699449 FIX privsep.c vulnerability, II (forgot hostname!) (wapiflapi) 303d46cd FIX [3d7835fc] aka `~^' attachments, especially Content-ID: (Ralph Corderoy) 4ce4eb55 privsep.c: and just verify the box is also in CWD (wapiflapi) 88253be0 send.c:sendpart(): iconv(3) when `write'ing to a file! 1b1d7184 *on-compose-leave*: allow *autob?cc* from within 5319762a README: adjusted repository layout 374ccb98 Implement some command modifiers, allow recursive `ghost' expansion.. ef903a66 Sigh. So, reintroduce *mbox-rfc4155*, but slightly different! 0dc7ad9b Disallow turning off `localopts' in compose-mode hooks.. 25d9e6e2 Generate Content-ID: as applic. (Ralph Corderoy, Ken Hornstein, David Levine) 17706f28 THANKS: Ken Hornstein 76583f83 (Heavily) Tweak [8daeda90], "really support" malformed messages.. b8bcff9d Implement `call_if' e6895402 main.c:_setup_vars(): verify $HOME and $TMPDIR 084d7e9e (BWDIC!) NAIL_ -> MAILX_, or even drop!.. 24fe9387 `show': no more colours, they counteract its purpose!?! b034478f INSTALL,makefile: $MAKEJOBS, not $MAILJOBS 8af80164 `call': parameters via *[*@#]*, *[1-9][0-9]**; add *?*, drop *-exit-status* 4c7be869 `file'+: reallow globbing for arguments, fnmatch(3) is save! 8389819e Add *-alternates*, check `alternates' arguments Note: later renamed to *alternates* c6e0b04e Implement `shift', to shift macro parameters 6c39d928 Security fix: never fall back to getenv(3).. 65bb8d98 Implement `return', to return from macros and accounts 4eadbd76 Support getrandom(2); revert stupid [5d345bd0]: OpenBSD has arc4random(3)! c11ef2cb The lunatic is on Solaris.. b274e20a Improve *expandaddr*=failinvaddr even interactive, e.g., with ~e.. b421c15b (BWDIC!) Drop usage of strtou?l() in favour of our own n_idec_*().. 682a7595 (BWDIC!) Add n_source_inject_input(), get rid of some hacks.. 57e84415 Implement `vput' modifier: store result in variable.. 197bea7c Implement `addrcodec' 437da9fd (BWDIC!) New `urlcodec' semantics cd0cfc16 Implement `vexpr', something analogues to expr(1) 3e40e899 `call', `~': do not require `wysh' for new quoting rules ce8c357c Implement `eval' 0ff45bde Fix *[*@#]*/*[1-9][0-9]** access corner cases; allow over-`define's.. acc9b2f3 *reply-strings* was falsely documented as *reply_strings*.. 70e9de08 `history': support relative to top access (negative numbers) c8f6c18d `ghost': avoid self-recursion 6409c886 nail.1: clarify/FIX doc. of \cX (Noel Chiappa, Random832).. 90bdf7e4 THANKS: Noel Chiappa e0bf944d THANKS: Random832 5a1c023c nail.1: furtherly clarify doc. of \cX (Doug McIlroy).. fb88d4fb THANKS: Doug McIlroy a396678a Implement `echon' and `echoerrn' ("echo -n" and "echo >&2 -n") 7e4ff2d0 FIX: actually honour ARG_H (never place in history; SINCE EVER!) c5197719 cmd_tab.h: `wysh' for more commands! d33294c2 mk-release.inc: use %B for $DATE_MAN (Baptiste Daroussin).. ad34b768 THANKS: Baptiste Daroussin f53248dd Support `vput' for `cwd' eafa9411 (BWDIC!) Defaults for *datefield{-markout-older}* (Debian #855582; r.ductor).. 871a1e3f THANKS: Riccardo Ductor a743a900 Avoid crash due to a strictly standard compliant memcpy(3).. a256ebb2 (BWDIC!) sendout.c:__mta_start(): with SMTP *mta*, do not send to aliases! 52004130 Add n_lex_input_clearerr(); limit *ignoreeof* count to 4.. 5ab93627 MLE: set FEXP_NOPROTO for mle-complete expansions (Ralph Corderoy) 78c30e08 `read': work more like shells.. ada72661 ~<: add "- [HERE-delimiter]" for pasting etc. (Ralph Corderoy) 5669e8a2 `vexpr': add "random" subcommand 5524e1be `vput': generalize and use shell-parser (i.e., itself expandable) acb887b4 (BWDIC!) *mta-arguments*: parse via shell-style quoting 9cddf95c (BWDIC!) For all shell commands, use shell-style quoting 72faa445 New quoting rules for `unset', `varshow', `varedit' ceaac3b7 `vexpr': add "hash" subcommand 96888b9a Add *{smime,ssl}-ca-flags*.. 3bfd2182 Use TLS S(erver)N(ame)I(ndication) as appropriate (RFC 7817) d4d46c42 Add `charsetalias', and use it (Pietro Cerutti, mutt#3925) c9051911 THANKS: Pietro Cerutti 72b43d61 README: Add "Security record" section f83564ea c_[Ss]croll(): use new shell-style argument quoting 63a167f8 `source', `source_if': use new shell-style argument quoting 5ce2b406 (BWDIC!) FIX false decision: for `if' etc., add -le,-gt.. operators.. f3404bc1 (BWDIC!) Redefine all CODECS, add `shcodec', change `addrcodec'.. 215c5cc2 Our own layer onto errno, yet too high 911bf9d1 Add *^* multiplexer; yet $^ERR{,DOC,NAME}{,-xy}.. 65e2b75f Redefine VIP handling of variables (Ralph Corderoy).. 8235d440 Implement `xcall' stack-avoidance optimization 5e75768e Finally add `sleep' (to be able to test ^C more easily) 6c8b5c77 `headerpick': no more multiplexer, add `unheaderpick' 1c342dd5 C****Y BSD signal handling! Try improve ^C stability.. 90529c5f Add `(un)?commandalias', obsolete `(un)?ghost' 5fd6da65 (BWDIC!) No! Let $! be errno, and $? the sole exit status.. f7f2781b `addrcodec': add `skin' subcommand, add an `encode' mode 59cb4714 Add *log-prefix* (with i3val), for reproduceabilities sake 658567b5 (BWDIC!) make.rc,mk-conf.sh: VAL_NAIL -> VAL_MAILX == Preview 4 == Appendix ^^^^^^^^ The complete changelog of commits in between two versions OLD and NEW can be inspected by using the git(1) `log' command: $ git log --reverse --topo-order --abbrev-commit OLD..NEW # Only topic branch headers (--no-merges for content commits only): $ git log --oneline --reverse --topo-order --merges OLD..NEW # Same, but truly accessible: $ git log --oneline --reverse --topo-order --merges --parents OLD..NEW | while read c1 c2 c3 c4 c5 c6; do printf "%-24s: \$ git log --oneline --no-merges %s ^%s\n" \ "${c6}" "${c1}" "${c2}"; done Even elder announcements: v14.8.0 - v14.8.6: 00292 v14.8.7 - v14.8.8: 00374, v14.8.9: 00435, v14.8.10: 00445 [v14.8.11: 00495], v14.8.12: 00502, [v14.8.13: 00514], v14.8.14: 00519, v14.8.15: 00547, v14.8.16: 00551 v14.7: 00094 v14.7.1: 00129, v14.7.2 - v14.7.8: 00193, v14.7.9 - v14.7.10: 00216, v14.7.11: 00240 Replace the XXX in the following URL with the shown number: \https://www.mail-archive.com/s-nail-users@lists.sourceforge.net/msgXXX.html --steffen ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot __________________________________ S-nail-users@lists.sourceforge.net