send.c: keep entire colour stuff on a single line..
[s-mailx.git] / NEWS
blob18aa130eb0261018c42e06a3e2b3d1f7c800e033
1 S - n a i l  N e w s
2 ====================
4 The complete changelog of commits in between two versions can be
5 inspected by using the git(1) `log' command as shown below, where `OLD'
6 and `NEW' are the two versions to be compared, e.g., v14.4.5 and v14.5.1:
8   # All commits:
9   $ git log --reverse --topo-order OLD..NEW
10   # Only topic branch headers:
11   $ git log --oneline --merges --reverse OLD..NEW
12   # Same, but truly accessible:
13   $ git log --oneline --parents --merges --reverse OLD..NEW |
14     while read c1 c2 c3 c4 c5 c6; do
15       printf "%-24s: \$ git log --oneline --no-merges ${c1} ^${c2}\n" "${c6}";
16     done
18 v14.5.1, 2013-12-27
19 -------------------
21 ChangeLog (packager-affine)
22 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
24 - The build system *only* uses the automatically detected $CFLAGS and
25   $LDFLAGS if WANT_AUTOCC=1.  I.e., even unset or empty $CFLAGS and
26   $LDFLAGS are not touched until then.
27   (We do however still set $CC if that is unset or empty or set to the
28   plain string "cc".) [856625f6]
30 ChangeLog
31 ^^^^^^^^^
33 - Fixed segmentation faults / bus errors when setting *nofolder*
34   / *line-editor-cursor-right* to the null string (only with WANT_NCL),
35   respectively. [d1f1a19b, 21e5c285, 9f6ff25d]
37 - *prompt* handling is now really POSIX compliant (thus no prompting
38   occurs not only for 'set noprompt', but also for setting *prompt* to
39   the null string).
41   This was indeed a rather large changeset that also introduced the new
42   *prompt* escape character \&, which expands to `?' by default and to
43   `&' if *bsdcompat* is set.
45   Like that we now can simply assign "\& " to *prompt* at program
46   startup, which (a) allows to do 'set noprompt' without error (once)
47   and (b) allows for POSIX compliance in respect to prompt handling
48   without any complicated conditional code, but (c) gives us the
49   opportunity to continue to support BSD prompts.
50   [0dfe53db]
52 - For completeness: new command: `features'.  (Rather useful for being
53   able to implement more tests in the future, and act according to what
54   is really compiled into the tested binary.
56 - The `-#' command line option now also sets *quiet* by itself.
57   [7b5a5c87]
59 - nail.1: a newly introduced empty line in the manual produced error
60   messages on some systems.  Fixed.
62 - The return value of the `mimetypes' command has been reversed and
63   should now be fixed. [acf56ac52]
65 - In threaded display the Subject: followup suppression no longer
66   takes into account invisible messages.
67   Also, rudely hack in a messages-already-written-in-this-round counter,
68   so that the followup suppression knows when "the top of the screen" is
69   reached, which (seems to) help(s) against missing subjects up there as
70   well as after a `newmail'. [topic/subject]
72 - Added a WANT_REGEX=1 toggle in `conf.rc'.
73   When we find regular expressions then a new regex-enabled IMAP-style
74   search is available (see the manual for more) [1ec8fe68]
76     ? f (/or subject ^\[S-nail (subject ^\[nail-devel))
77     ? f (/subject ^\[S-nail) (/subject ^\[nail-devel)
78     ? f (/subject "^\\[(S-nail|nail-devel)")
80   I'm looking forward for being able to add another, simplified, syntax.
82 ChangeLog (purely technical)
83 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
85 - The cc-test.sh has seen some tweaks, for easier future extension, and
86   for adding a test for [d1f1a19]. [several, mentioned: 21e5c285]
88 - On systems without a real wordexp(3) implementations deadlocks could
89   occur because we sometimes hold_all_sigs() to avoid longjmp(3)s away
90   (and will do so for quite some time, still), and that resulted in the
91   SIGCHLD that reported the exit of the started subshell to be blocked,
92   too (e.g., after '? *.h<Tab>': endless hang).  Fixed.
94 v14.5, 2013-12-19
95 -----------------
97 Many thanks: Gaetan Bisson, William Yodlowsky, Gavin Troy,
98 Thomas (wasd AT gmx DOT net), Ypnose.
99 And Gavin Troy definetely deserves a very special credit.
100 But thank you all, and very much indeed!
102 ChangeLog (packager-affine)
103 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
105 - The `test' make target has been fixed. [f0991e14]
106   (Gaetan Bisson)
108 - It is possible to gain a different kind of make(1) verbosity by
109   using a VERBOSE=1 command line argument (this knob is not taken into
110   account when deciding wether a rebuild is needed). [498e4ad0]
111   (William Yodlowsky)
113 - On Crux 3 Linux and OpenBSD the readline(3) and editline(3),
114   respectively, libraries will now be found when desired. [a7d1aa78]
115   (William Yodlowsky)
117 - WANT_LINE_EDITOR has been renamed to WANT_NCL, *plus*.
118   So now there are WANT_READLINE, WANT_EDITLINE and WANT_NLC, each of
119   them can be set individually, and they are tested in the shown order.
120   Also, WANT_TABEXPAND and WANT_HISTORY have been introduced and can be
121   used to fine-tune functionality. [ae4e01e1, b2635feb, 9742bf40]
123   (While here, i've fixed WANT_TABEXPAND code so that it is more
124   sensitive to line excess; on Linux etc., where MAX_INPUT is 255,
125   strange behaviour could be seen because we didn't take into account
126   the length of the prompt at all.  The NCL is assumed to have only
127   one remaining, but unfixable problem: backspace often is incapable
128   to cross visual line boundaries; use ^A/^E + ^L, then. [e832c04a]
130   Also, cursor (now ^B and ^F) and history movement (now ^P and ^N) of
131   the NCL have been changed. [d7d928da])
133 - WANT_QUOTE_FOLD is now enabled by default.  And WANT_ASSERTS has been
134   renamed to WANT_DEBUG. [1e10da1f]
136 - The build system has seen yet another overhaul in general.  CC, CFLAGS
137   and LDFLAGS plus are now tracked and changes will force rebuilds.
138   The new WANT_AUTOCC option can be used to let the build system figure
139   out a compiler and choose known-to-work flags.  Use the new ADDCFLAGS=
140   and ADDLDFLAGS= command line arguments to add your specific flags on
141   top of those -- the final CFLAGS etc. are what is change-tracked.
143   This rather massive internal rework revealed that old Bourne shells
144   were yet not supported by the new build system, and so did testing
145   that UnixWare installation was yet impossible due to tool
146   incompatibility. [75c4b74e]
148 - The new WANT_AMALGAMATION option will force compilation of all the
149   sources in a single compilation unit.  This requires a rather large
150   amount of memory, but may produce a more compact, maybe more optimized
151   binary.  (Implementing this revealed quite some bugs which could
152   therefore be fixed.) [topic/amalgam]
154 - `nail.rc' has been pimped a bit (mostly comments, but
155   *mime-counter-evidence* is now always set). [e3094ba7]
157    That changeset was however buggy. [f3dcb46]
158    (Gavin Troy)
160 - We no longer use install(1) for `install'ation make rules. [80b02cd9]
162 ChangeLog
163 ^^^^^^^^^
165 - Even '$ s-nail & fg $!' will now work with the NCL. [2a8b5c55]
167 - Several off-by-one (off-by-two) fixes. [32ce9836, 71e6d013, f139dc36]
168   (Gavin Troy, Thomas)
170 - Setting *noprompt* now prevents prompting, as per POSIX. [ecefaf63]
172 - *prompt*: new \$ (exit status of last command) and \@ (name of
173   currently active mailbox) escape sequences. [6f652046]
175 - One may now omit the space in '? unc' ('?unc') [05fcb383]
177 - New commands: `ghost' and `unghost' define command aliases (since
178   `alias' is taken for a different purpose) [topic/commands]
180     ? ghost ps '!ps axu'
181     ? ps |grep nail
183 - There is now a pseudo account `null' (case-insensitive).
184   Also a new `localopts' command exists; when used from within an
185   `account' block, options changed will be reverted back to its former
186   value when the account is left (e.g. by switching to `null'):
188     define sdn_ {
189        alternates sdaoden@users.sf.net sdaoden@users.sourceforge.net \
190           sdaoden@googlemail.com sdaoden@gmail.com
191        set Sign="\n--steffen\nForza Figa!" sign="\n--steffen"
192        set smtp=smtp.gmail.com smtp-auth=plain smtp-use-starttls
193        #..
194     }
195     account sdn_gm {
196        localopts 1
197        call sdn_
198        set from="Steffen \"Daode\" Nurpmeso <sdaoden@gmail.com>"
199     }
200     account sdn_sf {
201        localopts 1
202        call sdn_
203        set from="Steffen \"Daode\" Nurpmeso <sdaoden@users.sf.net>"
204     }
206   E.g., after
208     ? acc sdn_gm
209     ? acc null
211   neither of *Sign*, *sign*, *smtp** nor *from* should be set.
212   Please see the manual for more.
213   TODO - neither command-ghosts nor alternates etc. are yet tracked
214   TODO - we should have a boolify() so as to say 'localopts yes' etc.
215   [topic/acmava]
217 - New command: `cwd' (print current working directory).
218   Also fixing the `chdir' return value. [eff4397c]
220 - The *ssl-method* now allows explicit setting of 'tls.1.1' and
221   'tls1.2' values. [c66b4196]
223 - When sending to display, be aware that filenames in MIME parts may of
224   course be MIME-encoded! [1454be03]
226 - *hostname* is now honoured even if *smtp* is not set.  (We always
227   supported *from*, so why not *hostname*?)
229 - The `-u user' option now acts identically to setting the $USER
230   environment variable and both now tend to mean something like
231   "impersonate as user in some aspects".  Note that we have always used
232   the latter in one or the other way, and `-u user' always ment more
233   than just "open mailbox of user", so i think this change sharpens the
234   edge in the right direction. [09632731]
236 - Filename argument quoting has been tweaked for (some) function(s which
237   take a filename argument last).  The following snippet as reported by
238   Gavin Troy should work now: [2bb9b80e]
240     ? mv +inbox.Junk\ Mail
242 - The GNU implementation of wordexp(3) is also (i've added a workaround
243   for the very same bug for Mac OS X in S-nail v14.3 [63273772]) buggy,
244    which causes segmentation faults when expansions failed (`fi &VOID').
245   [470527b7]
246   (Gavin Troy)
248 - The `fi' command no longer uses the (possibly truncated) display
249   version of a filename, but the full path. [5cd85b07]
251 ChangeLog (purely technical)
252 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
254 - Large rework of internal structure: bundle inclusion of most of the
255   external and the content of most of the internal #include files in the
256   new nail.h.  If that would have been done very first bugs like the
257   infamous MAXPATHLEN bug as reported by Paul Vojta (see v14.4.2) would
258   never have occurred. [21f3155b]
260 - Support for -fstrict-overflow cc(1) flags. [topic/strict-overflow]
262 - Fixed the quotation filter which yet allocated memory even if not
263   used. [c98cdaf5]
265 - String relaxation reduces memory pressure rather drastically when
266   working with many (especially MIME) mails at a time, e.g., when
267   writing a modified mailbox.  Before all messages of a mailbox had to
268   be worked without releasing any memory in between, now we give back
269   memory (to our pool, not the system) after each and every message.
270   [topic/srelax]
272 - The other memory source now uses bound canaries, which also found some
273   errors. [3d9fe741]
275 - We now use the EL_PROMPT_ESC editline(3) mode for prompting, which
276   should offer the possibility to use coloured prompts etc. with
277   (even those) editline(3) (versions which do offer it -- older versions
278   should just do fine by themselves).
279   S-nail uses the special trigger control character \1. [ea30d818]
280   (Ypnose)
282   Note however that all tested editline(3) versions are buggy and
283   either don't get it right (`\1COLOR-ON\1stuff\1COLOR-OFF\1') or are
284   incapable of proper repainting (`\1COLOR-ONstuffCOLOR-OFF\1').
286 - We now use the MD5 digest code from the OpenSSL library if that is
287   usable. [893b16c0]
289 v14.4.5, 2013-10-19
290 -------------------
292 Many thanks: Gaetan Bisson, Stephen Isard, Jérémie Courrèges-Anglas,
293 William Yodlowsky, and Adam Sjøgren from GMANE.org!
295 ChangeLog (packager-affine)
296 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
298 - The packager-install: target has been fixed. [a8c1b0b]
299   (Gaetan Bisson and William Yodlowsky)
301 - As suggested by Gaetan Bisson the several build system tasks are now
302   individually addressable, i.e., 'make [OPTIONS] config', 'make build',
303   'make test', 'make packager-install'); nothing changes unless you want
304   to, in which case: please see INSTALL. [4d3b799]
306   The new target 'test' will call cc-test.sh with its new --check-only
307   option which will only perform the (too few) function tests on the
308   ready binary.
309   And cc-test.sh will no longer create output files, but simply echoes
310   to STDOUT and STDERR. [629e1ee, 786f219]
311   (Gaetan Bisson)
313 - The default configuration file now sets *bsdannounce* and *bsdflags*,
314   all in one line, as suggested by William Yodlowsky.
315   (If *header* is disabled, *bsdannounce* is ignored, but *header* must
316   be enabled by default according to POSIX, and *bsdannounce* is just
317   the same as *header*, but for the folder-switched event.  Thus setting
318   *bsdannounce* is the more sane default, imho.) [6161f10]
319   (William Yodlowsky)
321 - Announcement messages are now tagged '[ANNOUNCE]'. [26e1b35]
322   (Tagging suggested by Stephen Isard and Jérémie Courrèges-Anglas)
324 - The manual NAME now includes the version (but it's somewhat ugly).
325   [8adcca4]
327 ChangeLog
328 ^^^^^^^^^
330 - When switching folders when in compose mode, message attachments
331   become invalid.  For v14.4.5, at least warn when this happens.
332   [47eb1ab]
334 - When reading multipart/alternative messages which do not contain
335   a text/plain part, the (most likely HTML) part is not displayed (even
336   if S-nail is configured to display HTML).  The reason is a bug i've
337   introduced with [0d43a999] (Change "Part X:" display message..,
338   2012-12-20).  (Note that the committed fix i've posted to the list was
339   not correct either and has been fixed itself.) [225c02b, ecfa149]
341 v14.4.4, 2013-10-03
342 -------------------
344 Thanked, Gavin Troy, Gaetan Bisson.
346 - Fix output buffer confusion that would have occurred when parts of
347   a multipart mail had a pipe command set.  Longer story in [e75d16dd].
348   (Gavin Troy)
350 - The makefile now supports a `packager-install' target that bypasses
351   the reevaluation of the configuration (after checking that there is
352   one) and directly steps ahead to the install process.
353   (Gaetan Bisson)
355 - Notes in INSTALL that CFLAGS and LDFLAGS need to be overwritten from
356   within (conf.rc or) the command line.
357   (Gaetan Bisson)
359 v14.4.3, 2013-10-02
360 -------------------
362 I convey special thanks to Karol Błażewicz and Gaetan Bisson.
364 - The new build system didn't allow to overwrite CFLAGS= when used in
365   conjunction with GNU make(1).  To make a long story short, removing
366   a `.POSIX:' directive from the makefile fixed the problem.  Luckily.
367   [e6b26526]
369 - More INSTALL notes for UnixWare 7.1.4, which suffers from the same
370   problem: here the fix is to use the -e option of make(1).
372 - Karol Błażewicz reported a segmentation violation he got when using an
373   Arch Linux S-nail test package, and Gaetan Bisson informed me about
374   that.  The problem was that we didn't assign the resulting default
375   address (which gets used when *from* is not set) to the result which
376   gets used, effectively resulting in a NULL dereference. [cfd60479]
378 v14.4.2, 2013-09-21
379 -------------------
381 Many thanks to Paul Vojta.
383 - On GNU/Linux there is no MAXPATHLEN constant defined by default, as
384   this is a non-standard legacy constant.  Mozilla ran into this some
385   time ago, though a bit different [1].  It made it easier for S-nail.
387     [1] <https://bugzilla.mozilla.org/show_bug.cgi?id=412610>
389   We could include `sys/limits.h' to get at MAXPATHLEN, there it is
390   defined to be PATH_MAX, but let's just include the standard `limits.h'
391   and ensure MAXPATHLEN ends up >= PATH_MAX.  With this condition being
392   true even FORTIFYd sources won't bail with reported buffer overflows
393   because realpath(3) expects a buffer of PATH_MAX bytes. [bee5e57c]
394   (Paul Vojta)
396 - With the builtin LINE_EDITOR, ensure proper interaction with GNU
397   rlogind(8), which is alone in its quest to set the ISTRIP termios(4)
398   flag. [61e00f2d]
400 - Bugfix a codepath that would have prevented compilation when
401   HAVE_ICONV is not set.
402   While there, allow to unselect message attachments when using the `~@'
403   tilde command interactively, which i mysteriously had forgotten when
404   allowing selection of 'em.  (oops?) [4f58ffea]
406 - It's now easier for packagers to get at debug-enabled CFLAGS; simply
407   use WANT_ASSERTS=1 (should not be enabled in shipouts, please).
408   [d8663406]
410 - Fixed a terrible bug that i've introduced in november 2012, that would
411   have corrupted MBOX files when using the `resend' command.  (The
412   so-called "From_ line" would have been quoted to ">From_ line" instead
413   of simply being stripped.) [19d449e2]
415 - Fixed a SIGSEGV for the builtin LINE_EDITOR, that would have occurred
416   if a history traversal (^B or ^F) would have been continued by
417   a reverse history completion (^R).
418   While there, avoid some multiple-beeps-in-a-row that yet occurred due
419   to code reuse, and document that ^G etc. reset the multibyte state
420   machine. [003d9f6f]
422   Also, the expand-on-tab code could have excessed line input maximums,
423   e.g., after `? /usr/bin/*<Tab>'.  This was of course known, but
424   i wanted to keep it because all tested (modern) terminals "mess up but
425   won't break", and thus made it possible to use the data, even if it's
426   visual representation was messed up.  The real solution will be much,
427   *much* more complicated, i.e., show possible *completions*, page-wise,
428   etc., i.e., just like is known by tab *completion*.  This will need
429   far more time because it doesn't make sense to embed such complicated
430   code into the current bed.
431   Now i've chosen to simply don't display excess, but replace the
432   content with a message that says that there was excess.  It simply
433   looks better. [0320c8ba]
435 - I've changed the use of `[?]' as a replacement sequence for invalid
436   / non-displayable characters to `?' (again).  There are still code
437   paths (from the original codebase) which use the real Unicode
438   replacement character instead, so our display is still not unique.
439   On the long term the codepath can anticipate in all levels wether
440   use of Unicode is possible, so that, then, we will be unique again,
441   using either only `?' or the Unicode replacement character. [faf6380]
443 - I've anticipated in v15.0 and implemented *quote-fold* as a stream
444   filter.  It is now multibyte safe and takes into account the visual
445   width of characters, i.e., ideographs etc.  It is working almost as
446   good as an algorithm can work that looks at data linewise, but is yet
447   experimental and incomplete in that it will break lines even if only
448   whitespace or a backslash escape follows.  It is code that is only
449   a few hours old, which is why it is not enabled by default. [
451 v14.4.1, 2013-09-14
452 -------------------
454 How terrible.
456 - Fix some harmless stylos and typos in the manual and `conf.rc'.
457   [1a6b880, 417b066]
459 - Ensure *complete* proper cleanup on signal-caused configuration run
460   aborts. [7a08bda]
462 - Bugfix: reenable empty configuration variable overrides, as in
464     $ make install SID= NAIL=mailx ...
465   [171861d]
467 - Bugfix: rename the `conf.rc' variables SHELL, LISTER and PAGER because
468   they clash with the POSIX standard variables of the same names, which
469   hurts now that the configuration is run through the shell itself.
470   The configuration names are now XSHELL, XLISTER and XPAGER (ouch).
471   [ef93c4e]
473 - nail.rc: comment out some non-portable S-nail(1) specifics, for those
474   who install this file as mailx.rc or so, somewhere. [3f14b01]
476 - From now on S-nail will use simple version tags, as, e.g., `14.4.1',
477   i.e., no more `s-nail-14.4.1'. [a75437d, 183d59c] (Jürgen Daubert)
479   Also move UAGENT out of `version.h' [f7be5be]
481 Uh! v14.4 must have originated in a bad dream; good it's vanished.
483 v14.4, 2013-09-13
484 -----------------
486 Thanks to the entire vivid and virile S-nail(1) user community is
487 proper, especially Stephen Isard, Gavin Troy, Martin Neitzel.
488 Not to forget Ryan Kavanagh and Ayan George.
490 Note this time the changes are in reverse order, i.e., oldest first.
492 Topic Branches
493 ^^^^^^^^^^^^^^
495 15fbe09 ^bf9173f 'topic/varmac-unite'
496   Simplification and unification of variable and macro handling
497 40f6f58 ^15fbe09 'topic/cledit1'
498   Command line editor; new manual section `Line editor'
499 ad28a32 ^40f6f58 'topic/termsize'
500   Honour POSIX mailx(1) and respect $COLUMNS and $LINES on startup
501 dc3cd49 ^a446fd8 'topic/qf'
502   You don't wanna know
503 b8738f7 ^0651fd0 'topic/spam1'
504   Interaction with SpamAssassin; new manual section `Handling spam'
505 5419d6f ^b8738f7 'topic/make1'
506   Reworked build system; please read `INSTALL' and `conf.rc'
507 9ab4d6b ^5419d6f 'topic/list1'
508   Slightly tweaked message thread display, fix `:u :r' to mean it
510 ChangeLog
511 ^^^^^^^^^
513 - The default PAGER is now more(1).  (But read on.)
515 - The `echo' command is now compliant, and fully supports XSI.
517 - The `group' and `ungroup' command aliases have been removed, they are
518   `alias' and `unalias'.
520 - We now have the capability of line editing and history.
521   One may choose from not less than three different implementations:
522   a builtin editor as well as possible linkage against BSD editline(3)
523   and also a GNU readline(3) compatible layer.
524   Please read the new manual section `Line editor'.
526   Input is now compliant in that an interactive line may be continued
527   after escaping the newline character with a backslash.
528   [topic/cledit1]  (all of them)
530   The *prompt* variable may now contain shell escapes, just like the
531   `echo' command. [0938d8a]
532   As a special extension the new \? escape, when used within *prompt*,
533   will expand to the exit status of the last command. [41076d2]
535 - The POSIX standard environment variables $COLUMNS and $LINES are now
536   honoured upon startup. [topic/termsize]
538 - The `help' / `?' commands now support abbreviation, i.e.,
539   ``$ ? unc'' should now find `uncollapse'. [7b86195]
541 - The `~' abbreviation that has been introduced as an alias for `call'
542   is now a real command, not a magic shortcut. [9987289]
544 - The new variable *quote-as-attachment* can be used to additionally
545   embed the quoted message as a `message/rfc822' MIME attachment.
546   [topic/qf]
548 - The compose-mode command `~@' will now attach messages from the
549   current mailbox if given a filename of the style `#NUMBER'.
550   Please read the corresponding manual section `Tilde escapes', though.
552 - The `WANT_JUNK' and `WANT_SCORE', as well as Gunnar Ritters junk mail
553   management have been removed.
555   Instead S-nail(1) can now support interaction with SpamAssassin, but
556   sofar only via the spamc(1) / spamd(1) client / server pair of
557   programs that ships as part of SpamAssassin.  The new configuration
558   directive `WANT_SPAM' controls wether this feature is desired.
560   Please read the new manual section `Handling spam'.
561   [topic/spam1] (Martin Neitzel)
563   (S-nail(1) is now *definitely* floating-point free.)
565 - The configuration and make system have been overhauled / reorganized.
566   The configuration is now in `conf.rc', also contains directives like
567   `PREFIX' etc, and is always read in.  However, only those directives
568   which are not yet set (via environment or command line overwrites) are
569   incorporated into the set of configuration options.  Therefore
571     $ make WANT_IMAP=0
572     $ make WANT_IMAP=1
574   will now build S-nail(1) twice, because of the changed configuration.
576   Note that `WANT_GSSAPI' is now by default disabled, which shrunk
577   a freshly started s-nail image by more than 30 percent.
579   We're not finished yet in that there is no dependency graph etc.
580   Please do read `INSTALL' and `conf.rc'.
581   [topic/make1]
583 - Message selection has been slightly bugfixed in that `:u :r' really
584   means `:u' AND `:r'.  Compared to NetBSD Mail(1) it's still a shame.
586   Threaded message display has been slightly changed in that within
587   a thread identical Subject: lines are not repeated.  It may not be
588   perfect yet due to the general list / thread state. [topic/list1]
590 - If, upon startup, the environment variable `NAIL_NO_SYSTEM_RC' is set,
591   then the system wide initialization file isn't read, just as if the
592   `-n' option had been given. [1b31535]
594 - It is now possible to use CTRL-C during connection hangs.  (But in
595   general error recovery capabilities of the socket related
596   infrastructure is non-existent, practically speaking.) [45a9f36]
598 - *quote-fold* has been temporarily disabled, as it is not multibyte
599   safe.
601 No review for v14.4.  And today is Friday, the 13th.  Ouuuh!
603 v14.3.2, 2013-06-21
604 -------------------
606 I should *maybe* should have and want to give prominence to
607 Martin Neitzel for this, i maybe have misunderstood.
609 - Bugfix *synchronous* *pipe-** execution..
611   Well, unfortunately yet another newly introduced bug slept in
612   S-nail v14.3[.1] -- [a8d724b3, Add @ and @& shell command prefixes
613   for pipe-MIMETYPE, 2013-05-03] falsely changed the waiting state
614   for subprocesses, as has shown up by a HTML-only mail on the
615   Unicode list today.
616   'Seems i'm collecting one line fixes in this codebase; this needs
617   to change in the future.
619 v14.3.1, 2013-06-08
620 -------------------
622 I want to give prominence to Juergen Daubert (jue AT jue DOT li), who
623 reported that i've broken plain-old unfancy send mode in 14.3.
625 + Ok, i'll hope we're out of new errors for the v14.3 series with that.
627 - New variable: *batch-exit-on-error*.
628   Only works if the new -# command line option has been given, and will
629   check the "current" exit status whenever one operation completes
630   (S-nail returns to the command prompt).
631   If the exit status implies error (e.g., sending the last message
632   failed) then we exit forcefully with that error status.  (The normal
633   behaviour is that the status is reset when the command loop ticks.)
634   [4cddd55]
636 - While here again, i've added the new -# command line option.
637   This is the first step to implement a reliable batch mode;
638   unfortunately it still selects the users system mailbox on startup,
639   because we simply cannot go to "no" mailbox for quite some time -- at
640   some future time we will be able to go to some VOID thing, and then
641   this will end up as a rather efficient batch mode.
642   For now it sets *dot*, *emptystart*, *noheader* and *sendwait*, and
643   also implies the -~ command line option.  [7549569]
645     (
646       printf "m ${MBOX}\n~s subject1\nE-Mail Körper 1\n.\n" &&
647       printf "m ${MBOX}\n~s subject2\nEmail body 2\n.\n" &&
648       echo x
649     ) | MAILRC=/dev/null "${NAIL}" -n -#
651 - Also, -N set *header* instead of *noheader*.  [7b4a13f6]
652   (Juergen Daubert.)
654 - Plain old unfancy invocations like
656     $ s-nail user@host
657     $ echo bla|s-nail ./FILE1
659   had been broken (by [522cb3ec]).  [260e19d]
660   (Juergen Daubert.)
662 v14.3, 2013-06-03
663 -----------------
665 Thanks to Gavin Troy (gavtroy AT gmail DOT com) who inspired the @ and
666 @& pipe-command prefixes.
668 Random notes
669 ^^^^^^^^^^^^
671 - S-nail has been registered at Coverity Scan, and the third build
672   (after topic branches *coverity-444* and *coverity-444.2*) produced no
673   more errors.  (<http://scan2.coverity.com/projects/444>.)
674   (Then i used POP3 and IMAP and fixed some SIGSEGV. ;)  Still didn't
675   look at S/MIME, Maildir, caches etc... o()
677 - S-nail v14.3 doesn't produce any spurious linker warnings on
678   OpenBSD 5.3; all (correct!) use cases of strcpy() and strcat() have
679   been replaced.  [7bdf330, 2c8d7cb]
681 - This is the first release with a (though very short) review -- i'm
682   slowly getting comfortable with the code.  (But i'm too stupid to
683   perform reviews on patches, 'always did reviews on C++/Perl/xy
684   classes.  Aaah, how beautiful ... objects.)
686 ChangeLog
687 ^^^^^^^^^
689 - It is now possible to "call" macros without using the `call' command
690   by prefixing them with a tilde, as in
692     ? define au {
693       echo auau
694     }
695     ? ~au
696     auau
697   [93ea8acd]
699 - Added the *pop3-bulk-load* option.
700   Yes, there are mailing lists etc. which use plain text email, and,
701   there, headers are often more data than the body, so it doesn't make
702   sense to download the headers twice (unfortunately POP3 doesn't
703   support a BODY command; if only it would support a RETRDELE command..)
704   [978e13a7]
706   And yep, from this changeset on i personally use S-nail even over the
707   network, no longer my stale and incomplete S-Postman.  And i can tell
708   you, this damn thing is so silent, i always set *verbose* not to go
709   grazy ... but .. i hate to say it .. the healing will take time.
711 - POP3 will now try to use APOP authentication automatically; thus the
712   *use-apop* stuff has been replaced by *pop3-no-apop* options (just in
713   case there are POP3 servers which advertise they support APOP but in
714   fact fail to do so; anyone?)  [6c3c5575]
716 - Some IMAP segmentation violations have been fixed:
718     ? fi imaps://user1@localhost
719     Password:Interrupt            <- CNTRL-C
720     ? set imap-auth=cram-md5      <- hey, 'forgot to set correct auth
721     ? fi imaps://user1@localhost
722     IMAP write error: error:140D00CF:SSL routines:SSL_write:protocol is shutdown
723     Segmentation fault
725   And also, when *folder* was set to an IMAP account but hasn't been
726   opened yet, and no IMAP account ever has been opened, a string
727   comparison against a NULL pointer yet caused a SIGSEGV, too.
728   [417c01f, 413c23d9]
730 - `set folder=' now tolerates `%:' and expands PROTOs stuff etc.:
732     ? short xp %:imaps://user1@localhost
733     ? set folder=xp
735   Pure convenience so that it doesn't need to be typed twice (still no
736   completion in sight...).  Note that setting *folder* to a POP3 box
737   will now be actively rejected.  [b12b17f5]
739   NOTE: while implementing this i've detected another dead-end
740   miscondition in S-nail -- you really should ensure that your target
741   folder/box is connected before you leave your current POP3/network
742   based folder, if there is data to be moved to the target (i.e.,
743   mbox).  This problem will persist for a long time due to the way the
744   entire codebase functions; i hope i can find a short/mid-term
745   solution, but the real healing will take years.  The mentioned
746   solution would at least make S-nail interruptable, currently we get
747   stuck and interrupts are blocked...
749 - If you're using S-nail on Mac OS X and have seen some segmentation
750   faults when expanding shell stuff then you may be pleased to hear that
751   S-nail now works around an Apple bug.  [63273772]
753 - The builtin mime.types have been corrected and a lot of new ones have
754   been added.  New data from
755   <http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/resources/\
756   org/apache/tika/mime/tika-mimetypes.xml>, thanks!  [8072fcb6]
758 - BEWARE: handling of command line arguments has changed a bit!
760   1. The -D, -d, -E, -i, -N and -v command line options are now
761   implemented by means of setting the respective option, as via -S.
762   (This means that from now on resource files can only *temporarily*
763   overwrite command line arguments.)
765   2. The -I and -T command line arguments have been dropped.
766   It seems Gunnar Ritter stopped developing nail/Heirloom mailx once he
767   started implementing Newsreader functionality.  It'll take a long time
768   until we get there, so for now drop all the Newsreader stuff.
770   3. Handling of -r has been changed.  E.g.:
772     s-nail -A test -Snoeditalong -r 'La mort est <fem@me>' -d
773     ? set from=bummer@m1.com
774     ? m t1
775     Subject: s1
776     .
777     Sendmail arguments: "sendmail" "-i" "-r" "fem@me" "t1"
778     ? set from=bummer@m2.com
779     ? m t2
780     Subject: s2
781     Sendmail arguments: "sendmail" "-i" "-r" "fem@me" "t2"
783   ...
785     s-nail -A test -Snoeditalong -r '' -d
786     ? set from=bummer@m1.com
787     ? m t1
788     Subject: s1
789     .
790     Sendmail arguments: "sendmail" "-i" "-r" "bummer@m1.com" "t1"
791     ? set from=bummer@m2.com
792     ? m t2
793     Subject: s2
794     Sendmail arguments: "sendmail" "-i" "-r" "bummer@m2.com" "t2"
796   [*main-fun-cleanup* topic branch]
798 - *smime-sign-include-certs-** stuff works again, oops..  [9a8597c6]
800 - A whole lot of smallest and small fixes due to registration at
801   Coverity Scan, as project 444.  Error handling in S-nail is ridiculous.
802   [*coverity-444* and *coverity-444.2* topic branches.  The sheer number
803   of fixes was the reason to sit down and go for unplanned S-nail v14.3]
805 - *idna-strict-checks* has been dropped.  It's silly to have in a MUA,
806   especially given that GNU LibIDN doesn't ship with a lot of rules.
807   We were able to drop quite some code (and a use-after-free, too :().
808   [c81fd41d]
810 - The ~p tilde command displays attachments more verbose.
811   Until the big big MIME and send layer rewrite :) this is intermediate
812   since until then we do not really know neither MIME type nor charset
813   of an attachment at the time this is displayed (for sure).  Yet
814   i think it's nicer to show what we have than keep it the way it was.
815   [60e70463]
817 - @ and @& shell command prefixes have been added for the pipe-MIMETYPE
818   mechanism.  The former suppresses filters if multiple messages are
819   displayed at once, the latter adds asynchronous program execution on
820   top of that.  E.g., to display PDF documents, but only if you
821   *explicitly* address the message *alone and by itself*, and without
822   blocking S-nail and the $PAGER, do:
824     set pipe-application/pdf="@&cat >"${TMPDIR}"/s-nail${$}.pdf;\
825       mupdf "${TMPDIR}"/s-nail${$}.pdf; rm "${TMPDIR}"/s-nail${$}.pdf"
827   (Inspired by Gavin Troy.)  [a8d724b3]
829   Note: most of that had been posted to nail-devel@ already, but it was
830   tweaked ([251b636]) so that you now *really* have to say `p MSGNO' to
831   get there.
833 - The NETLESS CONFIG= has been removed; it is almost identical to
834   MINIMAL now (i.e., without WANT_JUNK and WANT_SCORE).
836 - WANT_JUNK and WANT_SCORE have been disabled by default.
837   They don't seem to be too useful; i hope i can implement
838   a SpamAssassin hook for (downloaded) mail messages for v14.4.
839   If so, expect these two "modules" to become removed completely.
841 v14.2.2, 2013-05-01
842 -------------------
844 Another unplanned (minor) bugfix release after Gavin Troy (gavtroy AT
845 gmail DOT com) pointed out that MIME CTE decoding was broken, who
846 i therefore want to give a lot of prominence right here.
848 - Fix MIME content decoding which has been broken by [01c0e135].
849   [882caedd]
850   (Gavin Troy.)
852 v14.2.1, 2013-04-30
853 -------------------
855 An unplanned (minor) bugfix release after i've found two bugs today and
856 heard from Jérémie Courrèges-Anglas (jca+nail AT wxcvbn DOT org) that
857 there exists a S-nail OpenBSD package.
859 I want to give prominence to the following people that helped to
860 improve S-nail(1) during this development cycle, in order of
861 appearance: Dirk Peters (peters AT schwertfisch DOT de).
863 Thank you very much, and best from Germany!
865 - Some warnings of newer clang(1) versions were silenced, including yet
866   another alloca(3) problem (see *memtracer* topic branch in v14.0
867   series).  [6f846efe]
869 - Tweaking the MIME boundary detection left a little hole that could
870   cause boundaries not to be detected, as has been shown by a Microsoft
871   Word generated mail on the ICU list.  [11e5fb5b]
873 - A format string could overflow bounds if unrealistic
874   (18446744073709551615) line numbers or message sizes would have been
875   produced.  [faa65c40]
877 - An algorithmic error could cause overlong lines which wrapped around
878   to the next display line.  [ade52660] 
879   (Dirk Peters.)
881 v14.2, 2013-03-15 [v14.1, 2013-03-12]
882 -------------------------------------
884 I want to give prominence to the following people that helped to
885 improve S-nail(1) during this development cycle, in order of
886 appearance: Martin Neitzel, Christos Zoulas, Stephen Isard, jgw@txo.org
887 and Gavin Troy.
889 Thank you very much, and best from Germany!
891 + v14.2 differs from v14.1 only by one commit, one that fixes
892   (mime_fromhdr(): partial rewrite using n_iconv_str(), 2013-03-12),
893   which i hastily implemented just hours before the release of v14.1,
894   and simply shouldn't have made it (into there).
895   The v14.1 tarball has been removed from the server.
897 - A fix for the quoted-printable codec: "message truncation" occurred
898   when a mail maliciously used a soft linebreak to escape the linebreak
899   of a completely empty line.
900   (That resulted in 0 written and 0 leftover bytes, a condition that was
901   declared erroneous back in november 2012 when i started handling I/O
902   errors.)
904 - The "folders" command will work again when given an argument.
905   A fault of mine introduced in (cmd1.c: expand() may fail, 2012-10-23).
907 - The Base64 codec has been touched again, and we are finally capable to
908   perform sequential decoding; this was targeted for the MIME/send layer
909   rewrite, but it actually was possible today.
910   The result as seen in ps(1), running on the Base64 encoded HTML5
911   standard (4622545 bytes HTML, with a NUL appended to force Base64
912   encoding, resulting in a 6244793 bytes email):
914    7420 s006  S+    2:22pm 0:10.65 plain-nail -f HTML5
915    1440 s006  S+    2:23pm 0:00.36 ./s-nail -f HTML5
917   (So the only thing that is left for a good throughput is sequential
918   decoding of quoted-printable encoded parts that maliciously use soft
919   linebreaks to convert an entire part to a single line.  And i've seen
920   that from Apple Mail.)
922 - New option: *mime-allow-text-controls* (rather long manual entry).
924 - *smtp-auth-password-user@host* and *smtp-auth-user-user@host* will
925   finally work!
926   (Reported by jgw@txo.org in November 2011, fixed by Gavin Troy in
927   January 2012.)
929 - Most *headline* formats now do support the '-' left-alignment flag.
930   Note that you most likely have to change your *headline* accordingly.
931   (The still missing %n format is one reason why there will be v14.2.)
933 - *datefield* and *datefield-markout-older* can now be set to
934   strftime(3) format strings (except %n).
935   (From Stephen Isard's wishlist.)
937 - A possible SEGV has been found and also fixed by Stephen Isard.
938   (The "legendary" cross-world stereo fix!)
940 - Wow!  S-nail will finally compile on GNU based Linux systems like
941   Slackware 14 etc.  (Found while hunting bug reported by
942   Stephen Isard.)
944 - New option: *datefield-markout-older* can be used to choose
945   a different date display for mails that are older than six months,
946   in equal spirit to what POSIX describes for the -l option of the ls(1)
947   command (Stephen Isard).
949 - (Exotic) Years are (would) now (be) interpreted correctly according to
950   RFC 5322, 4.3.
952 - CRAM-MD5 usage has been fixed.
954 - *folder* updates are now tracked when set, and we will show the
955   realpath(3) name of it, showing PREFIX..SUFFIX if that wouldn't fit on
956   the display.
957   Tracking updates made it also possible to perform other more expensive
958   tasks when setting *folder*, so that it is now possible to do
959   something like:
961     :set folder=$HOME
962     :set folder=~
964   et cetera (both ideas by Christos Zoulas).
966 - Bugfix for the ~@ tilde-escape in non-interactive mode.
967   (readtty(): quick shot: work in pipelines (on non-TTY).., 2013-01-25)
968   introduced the possibility to "read data from the terminal" (STDIN
969   that is) in non-interactive mode.
970   The manual documents that attachment input must be terminated with an
971   empty line, but if that had been omitted, as in the example below, we
972   would have yet entered an endless loop.
974      $ cat <<_EOT | /s-nail -~ -s boom ./OUT
975     ~@
976     test.c
977     charset
978     _EOT
980 - Alias expansion will now be performed for members of Reply-To: fields
981   (Martin Neitzel).
983 - Decoding quoted-printable will now be more relaxed.
984   (Even though the standard says that users should be given a hint when
985   input is not absolutely clean; a possible warning will be added later,
986   when we have an error message ring.)
988 - New option: *mimetypes-load-control* can be used to control which of
989   the mime.types resources will be loaded.
991 - The builtin default mime.types have been extended a bit.
993 v14.0, 2013-02-10
994 -----------------
996 I want to give prominence to the following people that helped to
997 improve S-nail(1) during this development cycle, in order of
998 appearance: John Dodson, Gianluca Ramunno, and Anon Ymous from the
999 NetBSD project.
1001 Random notes
1002 ^^^^^^^^^^^^
1004 - Encoding defaults to *quoted-printable* not *8bit*.
1005   This has no technical background except that i think it's the better
1006   default.
1008 - Small progress for the "getting stuck due to the current folder
1009   becomes inaccessible due to whatever reasons"  problem.
1010   (schdir(): realpath() local files before leaving CWD.., 2013-01-08)
1012 - The names of temporary files have changed.  Whereas not all uses of
1013   temporary files already use really meaningful names, it has yet become
1014   possible to use the pattern "*mail-*"; or, to be compatible with
1015   NetBSD Mail(1) in one go, "*mail*".  (E.g., in my ~/.vimrc you'd read:
1016     :au   BufRead,BufNewFile *mutt*,*mail* setl fenc= | setf mail
1017   [the *mutt* is a leftover from times when i've used MUAs that suck].)
1019 ChangeLog
1020 ^^^^^^^^^
1022 - The Quoted-Printable MIME handling has been rewritten completely.
1023   We now correctly encode files with the MS-DOS newline sequence (CRLF).
1024   (Part of the *mime-cte* topic branch.)
1026   S-nail(1) continues to be able to handle text messages and text
1027   attachments without a trailing newline, but because these
1028   Content-Transfer-Encoding related things are now handled by the C-T-E
1029   layer instead of by sendout.c a text message body that comes in as
1030   part of a complete message via the -t command line option will loose
1031   the missing final newline (i.e., it'll gain one).
1032   This problem does *not* occur when *only* the message body comes in
1033   via STDIN, as in 'cat FILE | s-nail', but *only* when the -t option is
1034   used.
1035   (sendout.c: does no(t/ longer) know about CTE internals!, 2013-02-09)
1037 - Filename arguments for -a are now processed *after* all the resource
1038   files have been loaded etc., so that the usual "folder" specifics can
1039   be used (provided that proper care for shell quoting was taken).
1040   ((main(): delay -a processing.., 2013-01-10), as a part of the
1041   *mainaflags* topic branch.)
1043 - (d38c5bd, When the write command asks.., 2004-11-23) added support
1044   for pipes when saving attachments during a "write" command.
1045   It however used the wrong SIGPIPE signal handler; e.g.:
1047     Enter filename for part 2 (application/x-gzip): |exit
1048     Segmentation fault
1050   Of course, it still performs a jump and that most likely leaves memory
1051   chunks behind, thus causing some memory leaks.  This will be
1052   a long-term problem (you may want to read [mime.c:fwrite_td(): TODO
1053   notes on unfixable leaks, 2013-01-14] for more).
1054   (send.c:sendpart(): fix longjmp() SIGSEGV.., 2013-01-29)
1056 - Fixed a name quoting regression that i've introduced in
1057   (Rewrite *extract().., 2012-10-20), that would have caused
1058   "x \"y\" z" to become "x"y" z" instead of "x "y" z".
1059   (S-nail still does not really have RFC compliant parsers, just as
1060   NetBSD Mail(1) has, i.e., there are structured and unstructured fields
1061   etc...  I hope i can provide them in v15.0.)
1062   (names.c:yankname(): fix quote regression.., 2013-01-29)
1064 - The IDNA conversion now assumes domain names are specified in
1065   *ttycharset*, rather than in the LC_CTYPE locale charset.
1066   I.e., it integrates into the usual character set specifications.
1067   (IDNA: honour *ttycharset* for domain names, 2013-01-18)
1069 - The new *editalong* variable will automatically spawn an editor when
1070   composing a mail in interactive mode, just as if `~e' was given.
1071   (Add new *editalong* variable, 2012-01-07)
1073 - The manual has been converted to mdoc.
1074   (The manual has been converted to mdoc, 2012-12-28)
1076 - The ~@ tilde escape, when given filename arguments, will treat the
1077   arguments as a comma-separated instead of a whitespace-separated list.
1078   (collect: change separator of ~@ tilde escape.., 2012-12-28)
1080   The interactive mode of ~@ has also been changed, rather massively.
1081   Please do reread what the manual says.
1082   ((collect: support multiple attachment charsets.., 2013-01-23), as
1083   part of the *attach* topic branch.)
1085 - Thanks to Gianluca Ramunno (ramunno DOT gianluca AT gmail DOT com)
1086   S-Nail will no longer try to issue a STARTTLS command when it is about
1087   to establish a SMTPS connection, a task that logically fails since the
1088   connection is already secured.
1089   (Interestingly the nail codebase performs the necessary test for IMAP
1090   and POP3 already.)
1091   While here the undocumented nail v11.0 *smtp-use-tls* legacy option
1092   has been removed.
1093   (Fix SMPTS with a set *smtp-use-starttls*.., 2012-12-22)
1095 - The RFC 4155 compliant MBOX quoting is now exclusively used, the
1096   shitty *posix-mbox* variable has been removed again.
1097   (Shitty because i've implemented RFC 4155 compliant MBOX quoting and
1098   tested it, then added *posix-mbox* for those who liked the old
1099   behaviour and did not re-test -- the final code path was buggy.)
1101   In mails newly created and saved by S-nail(1) no From_ quoting at all
1102   will be used no more, but instead the rewritten MIME file classifier
1103   will detect unquoted From_ lines and enforce quoted-printable encoding.
1104   (This is an approach that is S/MIME compatible all through the way as
1105   the file data is not modified at all, but only encoded, so that the
1106   data checksum is not changed.)
1108   In yet existent mails that S-nail copies or moves around without
1109   reclassification an RFC 4155 compliant From_ line detector will apply
1110   MBOXO quoting (prepend a single '>') as necessary.
1111   Different to the old MBOXRD behaviour S-nail will neither quote yet
1112   quoted From_ lines ('>>From xy' -> '>>>From xy') nor will it unquote
1113   one quote level when reading etc. mails ('>> From xy' -> '>From xy').
1114   As a result the code could be simplified.
1116   This changeset also incorporates a fix for NetBSD PR bin/47453, as
1117   reported by Martin Brandenburg.  I.e., some mailers, noticeably
1118   UW-imap (with MBX format only?), use non-compliant From_ lines with
1119   RFC 822 date specifications.  Be aware of 'em.
1120   (RFC 4155 MBOX, and drop *posix-mbox* and foldergets().., 2013-01-06)
1122 - *rfc822-show-all* has been removed.
1123   It didn't work properly for more complex MIME structures, like
1124   message/rfc822 messages with attachments etc., just as i've seen today
1125   on the file(1) mailing list.
1126   So, instead of hacking it now i've dropped it and will come back with
1127   a better solution when the MIME and send layers have been overhauled.
1128   I.e., the real intent was to be able to specify that an embedded
1129   message/rfc822 is treated as a *unity*, and that's the goal.
1130   (Drop *rfc822-show-all*, 2013-01-23)
1131   [The manual will be adjusted in a different commit.]
1133 - *rfc822-no-body-from_* has been renamed to *rfc822-body-from_*.
1134   It thus must be set explicitly.
1135   On the other hand it now catches all cases...
1136   (*rfc822-no-body-from_* -> *rfc822-body-from_*, 2013-01-23)
1137   [The manual will be adjusted in a different commit.]
1139 - The new *charset-7bit* (defaults to US-ASCII) and *charset-8bit*
1140   (defaults to UTF-8) have been introduced.
1141   These are used if seven bit clean data is to be sent, and no
1142   *sendcharsets* are set or the convertion of all of them failed,
1143   respectively:
1145   - There is no functional change unless there is iconv(3) support.
1146   - There is no functional change unless you set them.
1147   (Introduce *charset-8bit* and *charset-7bit* variables.., 2013-01-18)
1148   [The manual will be adjusted in a different commit.]
1150   In addition the new *sendcharsets-else-ttycharset* variable can now
1151   be used to automatically use *ttycharset* as a *sendcharset(s)*,
1152   regardless of the new *charset-8bit* variable.
1153   (Add *sendcharsets-else-ttycharset* variable, 2013-01-24)
1154   [The manual will be adjusted in a different commit.]
1156   NOTE: before we apply charset conversion we now perform a string
1157   comparison to see wether character sets are identical.  If the strings
1158   match (case-insensitively), then *no* conversion is performed.
1159   This means that code like
1161     $ printf "LATIN1: \0376" | s-nail -Ssendcharsets= -s boom ./out.txt
1163   *succeeds* in an UTF-8 environment now, whereas older versions would
1164   fail with an "illegal byte sequence" error (unless the iconv(3)
1165   library of the system would not perform any conversion that seems
1166   superflous, of course).
1168   I thought about making this optional, but, in fact, if this would be
1169   done in an environment without iconv(3) support then the result would
1170   be equally corrupt.  And the way it is now we save the expensive and
1171   superflous conversions.  (See TODO for more.)
1173   Please *do* reread the manual section "Character sets".
1174   +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1176 - An attempt was made to improve MIME Content-XY: detection.
1177   It should be more RFC compliant, and just overall better :);
1178   a simple one-pass classifier cannot match libmagic(3), of course.
1180   This changeset removes support of the long obsoleted (4fee1ef,
1181   2005-01-06) *charset* variable, as well as for the
1182   *maximum-unencoded-line-length* variable that has been introduced in
1183   (48a652bd, 2005-07-26).
1185   For S-nail v14.0 it'll be no longer necessary to do
1187     $ tr -d '\015' < input | s-nail ...
1189   to transport files which use the $-DOS (terminal) newline (sequence).
1190   We still depend upon *sendcharsets* for a while, though.
1191   (Rewrite file-content classification.., 2013-01-02)
1193 - The new *mime-counter-evidence* variable can be used to force
1194   a classification of non-text MIME parts (attachments) by their
1195   filename, i.e., a "reverse-classification" just as would be performed
1196   if S-nail(1) would itself *send* the file(name).  This can help
1197   against some stupid MUAs (Apple Mail?) that send .diff etc. files as
1198   `application/octet-stream' parts etc.
1200   At a later time this may become a valued option, causing a temporary
1201   save of unnamed attachments followed by a MIME classification of the
1202   file contents, followed by forced treatment as plain text if it seems
1203   to be human readable.  But not yet.  Just to warn you.
1204   (Add *mime-counter-evidence* variable.., 2012-12-29)
1206 - The special "pipe-" command "@" can be used to force treatment of
1207   a MIME message part as plain text (e.g.,
1208   'set pipe-application/pgp-signature=@' will henceforth print those
1209   signatures inline and as plain text).
1210   (Introduce the special "@" "pipe-" command, 2012-12-27)
1212 - The MIME types (as from mime.types(5)) will now be cached.  Before
1213   all possible sources would have been opened, read and parsed for each
1214   and every message part that required detection of the MIME
1215   Content-Type:.
1216   The new "mimetypes" command can be used to show or clear that cache.
1217   (Add mime.types(5) cache.., 2012-12-27)
1219 - A small set of MIME types (template: ./mime.types) will now become
1220   compiled into S-nail(1), and be used as a fallback if there are no
1221   ~/.mime.types and/or no /etc/mime.types, or those didn't contain
1222   a matching type.  E.g., NetBSD 6 doesn't ship a default database.
1223   Also, file extensions will be matched case-insensitively (case of
1224   attribute values is not specified afaik?).
1225   (Introduce compiled-in mime.types(5).., 2012-12-21)
1227 - The undocumented *charset7* variable was removed.
1229 - The "Message X:" display leader has been changed and will henceforth
1230   be matchable via "^[-- Message \d+ -- \d+ lines, \d+ bytes --]:$".
1231   These lines can no longer be suppressed by setting the *quiet*
1232   option (which was yet possible for print and top, though undocumented).
1233   (Change "Message X:" display message.., 2012-12-20)
1235 - When displaying multipart messages the "Part X:" introductional string
1236   has been changed; if the Content-type: header is not *retain*ed, then
1237   this string will include the part's type and size.  Ditto for
1238   Content-disposition: and a mentioned attachment filename.
1239   This is a first step only, for the final version the MIME and send
1240   layers will have to be adjusted.  But the string will be matchable via
1241   a "^[-- #.* --]$" regular expression from now on.
1242   (Change "Part X:" display message.., 2012-12-20)
1244 - MIME boundaries in multipart messages are now handled better in that
1245   no boundary string should get through to the display.
1246  (Tweak MIME boundary detection.., 2012-12-20)
1248 - A couple of long standing, even pre-Heirloom mailx(1) memory leaks and
1249   segmentation violations, most of them related to configurations
1250   without alloca(3) support, as well as one leak that i have introduced
1251   when i implemented RFC 4155 MBOX handling, have been fixed.
1252   But S-nail should now survive non-alloca(3) configurations.
1253   (*memtracer* topic branch.)
1255 - The Base64 MIME handling has been rewritten completely.
1256   This was an urgent topic, because the old implementation (a) read in
1257   all lines of a base64 encoded text part, repeatedly resizing a string
1258   storage and repeatedly decoding that string until all the lines have
1259   been swallowed (i.e., or by accident the last decoded byte was
1260   a newline character, and that in turn may of course have fucked up for
1261   multi-octet encodings, dependent on the actual byte-order), (b) used
1262   function local static data to keep state in between multiple
1263   invocations, which messed up multi-byte/-octet encodings like this
1265     �5��ɽ���Aɥ����́��٥��������[lots of data follows]
1267   and (c) did not perform any error checking at all.
1268   The new one does not run into the problem that (a) tried to circumvent
1269   since leftover decoded data (as opposed to leftover *encoded* data) is
1270   transported along the call-chain for later use.  It adds a minimal set
1271   of error handling ('may now see "[Invalid Base64 encoding ignored]"),
1272   with more to become possible in later S-nail versions when the entire
1273   layers are reworked.  (Until then DOS newline sequences [CRLF]
1274   embedded into base64 will no longer be decoded to Unix LF newlines.)
1275   Base64 encoded lines will now be 76 characters long, as stated (as
1276   a maximum value) in RFC 2045, not 72 as before.
1278   The Base64 code core has been shamelessly stolen from NetBSD's
1279   Mail(1), and i guess it was the second time that this happened :=).
1280   (*base64-rewrite* topic branch; and reworked later on the *mime-cte*
1281   topic branch.)
1283 - The string allocation strategy has been tweaked some more to, i think,
1284   a final version (regarding algorithm).
1285   In normal non-interactive send mode it should now no longer need any
1286   dynamic memory at all (unless some dozen recipients are specified).
1287   (Several other places still use normal dynamic memory, of course.)
1288   (*dope-stringdope-again* topic branch.)
1290 - Support for NSS (Network Security Services) has been removed.
1291   I've never worked with it and are, regarding the complexity of
1292   network security, not willing to spend any time on it.
1293   SSL is installed on all systems i'm using and/or testing on by
1294   default, and so i've choosen to go this way.
1295   (It may be that sometime in the future S-nail will add support for
1296   libcurl(3) connectivity, and then it may happen that not only NSS
1297   support is reintroduced again, but also GNU TLS.  All of that applies
1298   to network connectivity only, however, not to S/MIME afaik.)
1299   (*drop-nss-support* topic branch.)
1301 - I finally got a glue and understood that Sourceforge does (a) not
1302   support symbolic links and (b) doesn't like dots as regular parts of
1303   filenames.  This means that all this time the promised s-nail.tar.gz
1304   symbolic link did not work, and that s-nailv13.3.tar.gz wasn't
1305   accessible either (via the web interface).
1306   In the future S-nail(1) will not provide any more symbolic links (the
1307   Sourceforge website offers a "download latest" thing which seems to
1308   work), and use underscores in filenames -- s-nailv13.3.tar.gz has been
1309   renamed to s-nailv13_3.tar.gz.  The tags continue to use dot notation.
1310   Thanks.
1312 - The *heirloom-plus* support branch has been removed.
1313   The code bases diverged a lot and even more to come.
1314   It doesn't make sense to put any effort in that.
1316 v13.3, 2012-11-11
1317 -----------------
1319 - Configuration on UnixWare 7.1.4 will succeed (shell issue fixed).
1321 - Even on DragonFly BSD the IMAP GSSAPI is now found
1322   (in /usr/pkg/include/krb5/gssapi/gssapi.h).
1324 - Support for pkgsrc(7) systems and automatic integration of
1325   C_INCLUDE_PATH and LD_LIBRARY_PATH path configurations.
1326   Please see INSTALL.
1328 - Fixes a mortally embarassing regression that the current maintainer
1329   introduced before i really knew what i was doing, in (If *record* is
1330   set, avoid writing dead content twice.., 2012-09-14).
1331   It hit users that send through a MTA and have *record* set; in this
1332   combination data would not have reached the MTA.
1333   Interested parties may read the comment in savedeadletter() (part of
1334   the changeset) or the (Fix MTA/*record* descriptor clash..,
1335   2012-11-10) commit log.
1337   Deepest apologies to tortured users from the current maintainer!
1339 - RFC 4155 compatible MBOX file handling has been introduced, and so
1340   S-nail is now on par with (at least) NetBSD Mail in respect to this.
1341   It can be turned off with the new *posix-mbox* variable, which you may
1342   need to use since not all MUAs are capable to dig those MBOX files.
1343   E.g., less cutting-edge (.-) MUAs fail for this:
1345    |From - Thu May 10 20:40:54 2012
1346    |Date: Wed, 07 Nov 2012 11:48:30 +0100
1347    |To: super@duper.com
1348    |Subject: super1
1349    |
1350    |From me.
1351    |
1352    |From - Thu May 10 20:40:54 2012
1353    |Date: Wed, 07 Nov 2012 11:48:30 +0100
1354    |To: super@duper.com
1355    |Subject: super2
1356    |
1357    |>From - Thu May 10 20:40:54 2012
1358    |From - Thu May 10 20:40:54 2012
1360   I'm not completely happy since S-nail *does* still quote those lines,
1361   how rare they may be -- it *does* modify message content.  mutt(1)
1362   implements something more clever and that is quoted-printable encoding
1363   of the "F" from "From", when seen at the beginning of a line.
1364   This, when applied to just *any* "^From", will be a non-modifying and
1365   all-compatible solution.
1367 - SEND_MBOX handling has been changed to discard any Content-Length: and
1368   Lines: headers when it rewrites a message by default.
1369   I know that mutt(1) generates them (why, after
1370   http://www.jwz.org/doc/content-length.html?).
1371   Anyway, S-nail does neither use nor manage them, so that any
1372   modification renders those fields invalid, and then it seems best to
1373   discard them anyway.
1374   You may turn the new behaviour off with *keep-content-length*.
1376 v13.2, 2012-11-03
1377 -----------------
1379 The problem was that i really wanted to release on a 25th.
1380 But i have been able to improve S-nail(1) some more, so that this is
1381 possibly the first real release of it.  So i'll add only things that
1382 have changed since v13 -- please see below for the complete picture.
1384 - A new CONFIG=CUSTOM make directive was added, and the new user.conf
1385   variables WANT_SCORE and WANT_DOCSTRINGS have been added.  It is
1386   possible to create a floating-point free S-nail(1) now.
1387   Please see INSTALL.
1389 - If a feature is disabled not even functions stubs should remain now.
1391 - Many places which will work only with local filenames do now actually
1392   check that the target is a local filename.
1394 - Space-separated lists should work again, at a few places at least.
1396 - Tilde commands will be possible, even with -r.
1398 - The *sendmail-progname* has been added after NetBSD 6 dropped the
1399   send-mail entry in mailer.conf(5), which broke S-nail(1).  Now users
1400   have an option.
1402 - When editing messages via ~e or ~v file and pipe addressees will no
1403   longer be lost.
1405 - If recipients occur multiple times spread over lists, i.e., To:, Cc:,
1406   Bcc:, then only one occurrence remains, and in the "highest-order"
1407   list.
1409 - The "list" command prints the list alphabetically sorted (somewhat).
1411 - The "help" and "?" commands take an optional argument that shows
1412   a synopsis string for the given command (unless WANT_DOCSTRINGS was
1413   false).
1415 - String allocations are now more efficient.  The situation can still be
1416   improved.  However, for the first time Berkeley Mail(1) integrates
1417   harmonically into the system allocator, which may madvise(2) unused
1418   memory to the operating system as necessary and/or possible!
1420 v13.1, 2012-10-25
1421 -----------------
1423 Well, a version number 13 is anyway an ugly thing...
1425   commit 4f534bb33b7c911272cc66a0e3a9e47b73ad8deb
1426   Date:   2012-10-25 20:46:07 +0200
1428       FIX MIME quoted-printable encoding (char cast)..
1429       
1430       (;-{
1431       Auauauauau!!
1432       
1433       Well, one of the things that have already been started in v13 is
1434       the turn from using "int" when working with 8-bit characters to
1435       "unsigned char" (and as long as we do not support wide
1436       characters).
1437       
1438       Unfortunately one very important piece of code, that is handling
1439       encoding to quoted-printable, still used integer instead of
1440       unsigned char, which caused an automatic extension cast to take
1441       place, and that resulted in a messed up output.
1442       Sorry!
1444 v13, 2012-10-25
1445 ---------------
1447 I want to give prominence to the following people that helped to improve
1448 S-nail(1) during this development cycle, in order of appearance: Martin
1449 Neitzel, Ezequiel Garzón, Björn Persson, Paul Vojta, and, especially,
1450 John Dodson for warm words from beautiful Australia!  Many thanks also
1451 to Christos Zoulas.
1453 After i've officially forked nail(1) aka Heirloom mailx(1) as S-nail(1)
1454 on 2012-09-18 i have been able to work five weeks almost fulltime on
1455 S-nail(1) development.  The first three weeks can be characterized as
1456 hectic fireworks here and there, but then it got better and i was able
1457 to work more or less topic-centric.  In the meanwhile S-nail(1) is more
1458 than 230 commits away from the Heirloom base--and drifting further apart.
1460 S-nail(1) v13 is the first release of S-nail(1), but it was forked from
1461 Heirloom mailx(1) 12.5 7/5/10 that arose from Berkeley Mail 8. unless
1462 i'm mistaken.  What characterizes S-nail(1) v13?
1464 - The build system has been reworked almost completely.
1465   It is possible to fine-tune which features should be present in the
1466   binary and which don't.  The name of the binary can be chosen, and
1467   that choice is reflected all through the manual and the template
1468   resource file.  The manual is always complete and thus may document
1469   features that are not supported by the actual binary, though.
1470   Please see INSTALL for more.
1472 - Compiler warnings can now be used.  Please see the example WARN= flags
1473   in the Makefile, but '-Wall -Wextra -pedantic' should be silent though
1474   certainly insufficient to reflect the complex work of modern compilers.
1476 - The following recipient address list combines some of the major
1477   improvements that have been made:
1479     <addr1@cdröm.de>  (bier) , ./file1,
1480     Steffen Smöregäs (Humbabä) <sauer@bäüer.de> (Hummpäa)    ,
1481          sabberlot@träbbel.de  ,  (bier2) <a2@bür2.de> ,
1482        a3@b3.de (bier3)  , <a4@b4.de> (bier4, und \"bier5\")  ,
1483     |cat > pipe1 ,   (bier 6) <a6@bür6.de>  ,   ./file2        ,
1484     (co\$mm1) abc1@düf.de (cö,bmm,2)   (co\"m\"m.3) ,
1485     co\$bmm1 \"c,ömm2\" co\"m\"m.3 <abc2@däf2.de>  ,  |cat > pipe2 ,
1486     moppel@höppel.org
1488   That, on a single line, may be given to ":m" or (quoted) on the
1489   command line, or to "~c" or whatever, and it will work as expected
1490   (well, everything else would be a bug..) and result in the following
1491   sendmail(1) invocation:
1493   SENDMAIL.SH
1494   <-i a2@xn--br2-hoa.de a3@b3.de a4@b4.de a6@xn--br6-hoa.de abc1@xn--df-xka.de abc2@xn--df2-qla.de addr1@xn--cdrm-7qa.de moppel@xn--hppel-jua.org sabberlot@xn--trbbel-cua.de sauer@xn--ber-qla4j.de>
1495   >>>>>>>>>>>>>>>>>
1496   Date: Thu, 25 Oct 2012 17:12:15 +0200
1497   To:
1498   Cc: Steffen =?utf-8?Q?Sm=C3=B6reg=C3=A4s?=
1499     =?utf-8?Q?_(Humbab=C3=A4)?= <sauer@xn--ber-qla4j.de> (=?utf-8?Q?Hummp=C3=A4a?=),
1500     sabberlot@xn--trbbel-cua.de, moppel@xn--hppel-jua.org,
1501     <addr1@xn--cdrm-7qa.de> (bier),
1502     co$bmm1 =?utf-8?Q?"c,=C3=B6mm2"?= co"m"m.3 <abc2@xn--df2-qla.de>,
1503     (co$mm1) abc1@xn--df-xka.de (=?utf-8?Q?c=C3=B6,bmm,2?=) (co"m"m.3),
1504     (bier 6) <a6@xn--br6-hoa.de>, <a4@b4.de> (bier4, und "bier5"),
1505     a3@b3.de (bier3), (bier2) <a2@xn--br2-hoa.de>
1506   Subject: Re: SubjectTest
1507   MIME-Version: 1.0
1508   Content-Type: text/plain; charset=us-ascii
1509   Content-Transfer-Encoding: 7bit
1511   body
1512   <<<<<<<<<<<<<<<<<
1514   So list parsing has been fixed, IDNA support has been added, and it is
1515   possible to mix pipe and file recipients *and* multiple thereof, and
1516   the result is still correct for *all* of them.
1517   I think this kind of list can be given wherever a user can directly
1518   enter such a list.  And i think all that is unique to S-nail(1).
1520 - When writing back edited messages the target MBOX mailbox can no
1521   longer become "corrupted" when the trailing newline was removed during
1522   the edit.  Also affected FreeBSD and NetBSD mail(1).
1524 - A security fix for CVE-2011-2895 was applied.
1526 - The generated Message-Id: is now more human-friendly.
1528 - The -h command line option has been dropped.  Use "-O -h XY" if your
1529   MTA really supports that.
1531 - The -O and -r command line options no longer enforce a one-shot send
1532   mode, and instead persist for the duration of the entire session.
1534 - Variables set via the -S command line option are now (un)set twice;
1535   immediately and after all the resource files have been loaded.
1537 - Other new or changed options/commands, in order of appearance:
1538   recipients-in-cc, smime-sign-include-certs, quote-fold, stealthmua,
1539   add-file-recipients, write, rfc822-no-body-from_, rfc822-show-all,
1540   mail/Mail, idna-disable, idna-strict-checks, ??
1542 - In the codebase itself an effort to reduce duplicate work and
1543   introduce caching, and to minimize the use of local variables, was
1544   started, but that is long term.  A lot of improvements here and there,
1545   too, like using the well MD5 optimization from Wei Dai, Chris Torek's
1546   hash algorithm for hash tables etc.
1548 - Incredibly important: an heraldic animal was found: snailmail.jpg!
1550 The full history can be inspected by issuing the git(1) command
1552   $ git log --reverse s-nail..s-nailv13
1554 A new TODO has been introduced, and it is getting longer and longer.
1555 Thanks.