Items which are showstoppers for the next major release are marked with '!'
in front of them (feel free to up/downgrade and/or add or fix bugs, this
file is not read only ,-). See also grep -E 'FIXME|TODO' src/*.c include/*.h

Bugs
----
o  PostponeOverride "Y" conflicts with PromptYes "yY" so PostponeOverride
   is unusable right now. Remap somehow to e.g. "oO" (that would also
   require a key rename)? Restrict PromptYes in that single prompt
   to anything but PostponeOverride (if it has multiple keys assigned)?

o  get_respcode() doesn't handle the 401 response code. as we have to
   evaluate the response text as well we have to fix every
   nntp_command(..., NULL, 0) call.
   [20100429 Urs Janssen <urs@tin.org>]

o  col_response is a misnomer as the counter doesn't count responses
   anymore (except on the very first article). The man page is outdated too.
   [20080826 Urs Janssen <urs@tin.org>]

o  unexpected multiline responses confuse tin, e.g.:
   | 240 Article posted =?ISO-8859-1?Q?=3C=3D=3Fiso=2D8859=2D1=3Fq=3F=3F=3D87r7k8na?=
   |   =?ISO-8859-1?Q?vt=2Efsf=40urs=2Did=2Etest=2Eka=2Enu=3E?=
   (the servers response should be a single line (INN 2.2))
   [20050207 Urs Janssen <urs@tin.org>]

o  batch mode has several bugs
   - -vc could be more verbose (like -vcZ is)
   - -o currently is not a 'batch_mode' option (it may ask questions)
   [Urs Janssen <urs@tin.org>]

o  upgrade_keymap_file() doesn't update ConfigFirstPage, HelpFirstPage,
   PageFirstPage to GLOBAL_FIRST_PAGE; ConfigLastPage, HelpLastPage,
   PageLastPage to GLOBAL_LAST_PAGE; PostPost to GLOBAL_POST.
   adjust doc/keymap.sample accordingly

o  add version number to other config-files (e.g. tin.defaults)
   and do the same checks as for TINRC_VERSION/tinrc. for the
   tinrc, filter and attributes file store the charset the file is written
   in (e.g. ISO-8859-x vs. unicode) and for the filter file the filter method
   used (wildmat or regexp (or TRE))
   [Urs Janssen <urs@tin.org>]

o  Add docs to explain how to create system-wide overviews

o  iso2asc conversion is missing for 'internal' strings (e.g. 'M'enu)
   (eg. via _()/P_() beening a wrapper abround *gettext() with additional
    if (iso2asc_supported >= 0) process_charsets(..., FALSE))
   [20020319 Urs Janssen <urs@tin.org>]

o  comments in attributes get lost (we need to do something like we do for
   the filter file)
   [20080425 Urs Janssen <urs@tin.org>]

o  if falling back to HEAD/NEXT ([X]OVER not working) tinrc.getart_limit
   isn't honored
   [20090112 Urs Janssen <urs@tin.org>]

o  the keys GroupToggleSubjDisplay / GROUP_TOGGLE_SUBJECT_DISPLAY and
   ThreadToggleSubjDisplay / THREAD_TOGGLE_SUBJECT_DISPLAY are misnamed,
   as they toggle the display of the sender address, not the subject.
   [20130839 Urs Janssen <urs@tin.org>]

o  the key ToggleHelpDisplay / GLOBAL_TOGGLE_HELP_DISPLAY is misnamed
   (like txt_help_global_toggle_mini_help, but at least text now is
   updated) wrong as it toggles tinrc.beginner_level which also controls
   displaying the posting etiquette
   [20210106 Urs Janssen <urs@tin.org>]

o  the literal IPv6 with embedded IPv4 addresses part in URL_REGEX is buggy
   and does not catch all valid combinations

Pager Problems
--------------

Posting Problems
----------------
o  keep RFC 6532 in mind as parts of it will sooner or later make it into
   NNTP (sic!).
   [20120220 Urs Janssen <urs@tin.org>]

o  repost ('x') ignores some ~/.tin/attributes
   [fixed for mailing_list, Urs]

o  forged cancelling via Supersedes:/Also-Control:/Control:-header is possible
   if it is supplied by hand (inews_prog=--internal)

o  cancel sanity check FromSameUser() uses strcasestr() on the full address,
   ignoring the fact that the local-part is actually case sensitive.

o  mailers other than sendmail (f.e. mutt) and interactive_mailer=0 may lead
   to 'duplicated'-headers and multiple signatures

New features
------------
o  add code for more TLS/SSL libraries, e.g.
   mbed TLS <https://github.com/Mbed-TLS/mbedtls>, BearSSL, MatrixSSL,
   axTLS, wolfSSL, ...)

o  configure check for OpenSSL currently depends on pkg-config

o  with -T and an expired cert we could try to give more info then just
   "certificate has expired" and then quitting, e.g. "was valid till ... "
   or "not yet valid ..."  with the corresponding dates (and the current
   date); with -k we could emphasise the fact on connect.
   (done for 'J' ConnectionInfo-page)

o  with -T and hostname mismatch (OpenSSL: X509_V_ERR_HOSTNAME_MISMATCH)
   we could give more info than just "TLS handshake failed: hostname mismatch"
   (show CN (vs. used hostname)); with -k we could mention the mismatch on
   the 'J' ConnectionInfo-page.

o  add possibility to dump the current key mapping to a file or even
   add a keymap-menu to see and change the mapping from inside tin.

o  make the group status flag (moderated, new, bogus, ...) configurable
   like the thread and article flag (select.c:build_gline(%f))
   [20210709 Urs Janssen <urs@tin.org>]

o  add configure check for cl_clear_secret() in libcanlock and CL_API_MAJOR,
   CL_API_MINOR in canlock.h and if suitable prefer over bundled
   libcanlock (--with-canlock).
   [20190212 Urs Janssen <urs@tin.org>]

o  update included libcanlock to >= 3.3.1
   [20211024 Urs Janssen <urs@tin.org>]

o  default_post_newsgroups, default_repost_group may hold groups not valid
   on the current server, these are candidates to move to serverrc.

o  implement SAVE_APPEND_FILE_ALL ('A') and SAVE_OVERWRITE_ALL ('O') keys
   which just ask once if file(s) already exist (open_save_filename()).
   [20170811 Urs Janssen <urs@tin.org>]

o  add second pipe command when piping multiple articles to use one
   pipe per article (currently it is one pipe for all). ':' could be
   used as key (only in use at the pager where this feature doesn't make
   sense).
   [20160412 Urs Janssen <urs@tin.org>]

o  allow to cancel piping / saving multiple articles, ESC/'z' just stops the
   current one
   [20160409 Urs Janssen <urs@tin.org>]

o  add per scope getart_limit via attributes
   [20131114 Urs Janssen <urs@tin.org>]

o  add per scope render_bidi via attributes

o  add per scope hideline_regex via attributes e.g. to exclude *ascii-art

o  add support for %A (Address), %C (Firstname), %N (Fullname) to
   group_format and thread_format
   (what about "conflicting" settings for show_author and %[ACIN]?)
   [20130925 Urs Janssen <urs@tin.org>]

o  add a key to "drop" pending data from the server (either by
   disconnect/reconnect (fast but reconnect may fail due to rate limit or ...)
   or via calling drain_buffer() (might be slow if there is much pending
   data)) so one doesn't have to quit and restart tin if the client/server
   communication gets desynced (i.e by reading an article which has a non
   dot-stuffed lone '.' in it or the like)
   [20130615 Urs Janssen <urs@tin.org>]

o  add nntp_default_server to tin.defaults to override compile time setting.
   if given strings starts with / or ~ the value is taken from the referenced
   file, if it starts with $ it is read from the referenced variable.
   [20101118 Urs Janssen <urs@tin.org>]

o  tin.defaults allows to preset mm_charset which will preset
   mm_charset without charset conversion but mm_network_charset
   if charset conversion is available. This is useful (and matches
   $MM_CHARSET) but not emphasised in tin(5).

o  the old space_goto_next_article=ON && space_goto_next_unread=OFF is not
   possible with the new goto_next_unread rc-var, we need something like
   an additional goto_next_read rc-var
   [20101101 Urs Janssen <urs@tin.org>]

o  add DEFAULT_SIGDASHES_REGEX and related 'M'enu-entry for signature
   detection in cook.c
   [20080925 Urs Janssen <urs@tin.org>]

o  allow remapping of the 'z' abort-key (lynx style) in wait_for_input().

o  add more user defined screen layout at different levels (e.g. posting
   history screen; add a page_header_format{1,2,3} to customize
   draw_page_header(); ...)
   (mostly done for selection, group, thread, attachment and page level)
   [20041025 Urs Janssen <urs@tin.org>]

o  add more AUTHINFO SASL (RFC 4643, RFC 5802) support (DIGEST-MD5,
   EXTERNAL, ...) and a fallback if no libgsasl is found (e.g cyrus-sasl
   or a handrolled version for at least PLAIN)
   [20080316 Urs Janssen <urs@tin.org>]

o  add XZVER (and XZHDR) support (zlib compressed yyencoded overview data)
   <http://helpdesk.astraweb.com/index.php?_m=news&_a=viewnews&newsid=9>

o  add In-Reply-To threading for mailgroups
   [20030518 Urs Janssen <urs@tin.org>]

o  make auto'S'ave also work for inrange groups
   (unfortunately 'S' at select level is used for something else)
   [20030508 Urs Janssen <urs@tin.org>]

o  turn ask_for_metamail into $MM_NOASK support (see metamail(1))
   [20030314 Urs Janssen <urs@tin.org>]

o  fetch overview data in chunks (e.g. 100 arts/chunk) to allow
   faster read interruption.
   [20020326 Dirk Nimmich <nimmich@muenster.de>]

o  add bold-italic, bold-underline, italic-underline, bold-italic-underline
   word highlightings.
   [20020721 Urs Janssen <urs@tin.org>]

o  allow bold, underline, italic, ... as color substitution for
   monochrome terminals (map green=underline, italic=yellow)
   (see also
   <nntp://news.tin.org/20020416202232.A4575@bloatware.reston01.va.comcast.net>)
   [20030218 Serge Matveev <sm@cl.spb.ru>]

o  hierarchical 'M'enu, e.g. put all art_marked_* into a 'submenu',
   restructure/sort 'M'enu items, some display-options (render BiDi) are
   currently under expert options, some options in display options are
   navigation options (catchup thread, use mouse, ...)
   [20020322 Urs Janssen <urs@tin.org>]

o  add a postponed 'browser' (store postponed arts in MH or maildir
   format to make things easier?)
   [20020305 Dirk Nimmich <nimmich@muenster.de>]

o  should the postponed 'file' (and posted messages 'file') be in
   mailbox_format (even if that's a one file/message format, thus
   the 'file' actually needs to be a directory?).

o  add postpone option for mail-actions;
   reusing p'o'stponed articles in mailing_list groups doesn't work
   (possible fix: store Newsgroups (and other info) via msg_add_header()
    (to overwrite any old values) in X-Tin-Postponed:-header and remove it
    before posting.)
   [20010623 Urs Janssen <urs@tin.org>]

o  add maildir/maildir++ support (besides MBOX{O,RD} and MMDF},
   MH (not only reading but also writing), mailstore, BABYL, Kendra (MMDF
   like with 20*CTRL-A as sep.), MBX and MIX (indexed MBOX from UW-IMAP)
   and add man-pages for the various formats.
   (see <https://quimby.gnus.org/notes/BABYL> for BABYL,
    <http://www.qmail.org/man/man5/maildir.html> for maildir,
    <http://www.qmail.org/man/man5/mbox.html> for MBOXCL and MBOXCL2,
    <http://www.washington.edu/imap/listarch/2000/msg00363.html> for MBX,
    <http://www.washington.edu/imap/documentation/mixfmt.txt.html for MIX)
   [20020215 Urs Janssen <urs@tin.org>]

o  add $LOCKEXT support
   [20030611 Urs Janssen <urs@tin.org>]

o  add xxencode (<http://www.debath.co.uk/code/xxencode.c>),
   base224 (<http://b-news.sf.net/>),
   base91 (<http://base91.sourceforge.net/>) and yenc decode-support
   (see <http://yydecode.sourceforge.net/> for readable code. also check
   <http://www.exit109.com/~jeremy/news/binaries/> which might replace yenc
   etc.pp. some day.
   [20020216 Urs Janssen <urs@tin.org>]

o  add "Face:" (incompatible "X-Face:"-replacement) support?
   [20040107 Urs Janssen <urs@tin.org>]

o  turn CA_ERROR_SPACE_IN_NEWSGROUPS, CA_ERROR_NEWLINE_IN_NEWSGROUPS,
   CA_ERROR_SPACE_IN_FOLLOWUP_TO, CA_ERROR_NEWLINE_IN_FOLLOWUP_TO into
   CA_WARNING_s (see RFC 5536 3.1.4. and 3.2.6.) and mark them
   for removal in the future.
   [define ALLOW_FWS_IN_NEWSGROUPLIST to turn the mentioned errors into
    warnings. 20011226 Urs Janssen <urs@tin.org>]

o  support "Suggested Minimal Digest Format"
   <ftp://rtfm.mit.edu/pub/usenet/news.answers/faqs/minimal-digest-format>

o  add new threading method: thread by reference, but split threads on
   subject change
   [Urs Janssen <urs@tin.org>]

o  rewrite thread-method selection that users can easily combine different
   threading methods (THREAD_SUBJ + THREAD_MULTI || THREAD_REFS +
   THREAD_MULTI || ...) - see also note in art.c
   [20011117 Urs Janssen <urs@tin.org>]

o  add counter to post-processing commands (processing file x of y)
   (Is post-processing really that slow? [Jason Faultless
   <jason@altarstone.com>] no but if you post-process more than a
   handful of files it would be useful [Urs Janssen <urs@tin.org>])

o  add key to toggle article and thread sorting preferences on the fly
   (like 'u' for threading)

o  check if servers high mark is lower than the one in users newsrc, if so
   issue a warning and allow the luser to reset the highmark in the newsrc
   to the servers 'l'ow or the servers 'h'igh mark or 'i'gnore it.

o  check if the articles Subject/From in the pager matches (minus
   whitespaces) the one on the overview file (if available) - if not
   issue a warning that the servers overviews seem to be broken. trust
   the headers, not overviews. (see note in rfc2046.c)
   do the same with the article numbers in the (cached) overview
   data (we already do this, but currently this will lead to article "loss").
   if they are higher than the server's high-mark don't trust them (and
   discard the locally cached data).

o  attributes (still) needs some work; See doc/config-anomalies.
   [20030303 Dirk Nimmich <nimmich@muenster.de>]

o  add IPv6 support
   (add protocol independent wrappers which use IPv6 (functions)
    whenever possible).
   there are two small problems with the minimalistic IPv6 support which is
   currently in tin: when getaddrinfo() is used to get the name/ip of the
   newsserver it always uses DNS (gethostbyname()/gethostbyaddr() checked
   /etc/hosts first) and getaddrinfo() seems to have a (huge) delay in some
   cases. use getipnodebyname()/getipnodebyaddr() (if available) instead.
   check for gethostbyaddr_r()/gethostbyname_r() and use them instead
   of gethostbyaddr()/gethostbyname() if available.

o  add cmd-line/tinrc-switch to fetch only headers of unread articles;
   in that case, make 'r' reading the rest of the articles
   [-G is a start]
   allow setting a per group limit via attributes

o  check if server supports 'LIST MODERATORS' and
   if it does parse the output so it can be shown to the user. (e.g. when
   posting to a moderated group, show the moderators mail-address, but still
   leave the mailing to the server)

o  item_by_item_etiquette_warnings [compile-time?]
   (e.g. enable x-posts without f'up warning, disable long-sig warning)

o  posted_articles_file is not available in attributes
   [20130628 Urs Janssen <urs@tin.org>]

o  unify Fcc and posted_articles_file
   [20031012 Dirk Nimmich <nimmich@muenster.de>]

o  MIME-pgp support according to RFC 2015, RFC 3156 - (should be easy now)
   and/or in the format that used by signcontrol/pgpverify (see also
   tinews.pl)
   As MIME-pgp verification needs the undecoded mime-part with its headers
   storing the raw-offset of each part in the article would be very helpful.

o  pgpverify invocation with a single key instead of '|''a''pgpverify' or a
   built-in pgpverify solution.

o  pgp-{6,7} support

o  use runtime config for pgp instead of hardcoded values depending on compile
   time detection, i.e. have tinrc vars for pgp_decode, pgp_verify, ...
   like in mutt (and use fork()/exec*() instead of system() where %F is
   replaced (wordexp(3)-like (ulBuildArgv()-but quote aware)) with the
   filename (and %U by the user); e.g.
      pgp_verify=gpg --no-batch --verify %F
   -> execlp("gpg", "gpg", "--no-batch", "--verify", artfile, NULL);
   ) and/or

o  add check for GPGME (<http://www.gnupg.org/related_software/gpgme/>) and
   if found use it for pgp actions.

o  add feature Cc:

o  add feature show_new_newsgroups_since

o  add new key which tags articles based on a prompted regex, could be used
   for GROUP_MARK_THREAD_READ,PAGE_MARK_THREAD_READ,THREAD_MARK_ARTICLE_READ
   and/or something like GROUP_SELECT_THREAD/THREAD_SELECT_ARTICLE which
   works on tagged arts (the later might be useful in conjunction with
   GROUP_MARK_UNSELECTED_ARTICLES_READ)
   [20051110 Urs Janssen <urs@tin.org>]

o  Additions to the page menu:
     key to toggle hideline_regex on/off (e.g. '{' or '}') as toggle-raw
     may not help to show original article (e.g. base64 encoded article).

o  Additions to the thread menu:
     ']'  (GLOBAL_QUICK_FILTER_KILL)
     '['  (GLOBAL_QUICK_FILTER_SELECT)
     'r'  (reply to) /* not 'R' cause it conflicts with mail_bugreport */
          r should be toggle show all/show only unread
     ''   (f'up with all headers included) ^W conflicts with MARK_FEED_UNREAD
     'N'  (next unread article)
     'P'  (previous unread article)
     'V'  (View/pipe/save multimedia attachments)
     'X'  (mark all unread articles that have not been selected as read)
     ';'  (mark unread arts as hot if >= 1 art in thread is hot)
     '+'  (mark thread as hot)
     '='  (mark pattern as hot)
     '@'  (toggle selections)
     'Y'  (check for new articles in thread)
     '%'  (toggle rot13 encoding of screen content)
     'x'  (repost)
     'e'  (edit mailgroup article)
     keys to go to previous/next thread

o  Additions to the group menu:
     'V'  (View/pipe/save multimedia attachments)
     'Y'  (check for new articles in group)
     '%'  (toggle rot13 encoding of screen content)
     key to search in (raw) article headers (and body).

o  Additions to the select menu:
     '%'  (toggle rot13 encoding of screen content)
     key to toggle groupname abbreviation

o  Add to the attachment menu ('V'):
     'F'  post followup to current article, not including current attachment
     'f'  post followup to current article, including current (or tagged)
          attachment(s)
     'm'  mail attachment
     'o'  print attachment
     'r'  reply through mail to author, including current attachment
     ''   reply through mail to author, not including current attachment
          ('R' is already taken by GLOBAL_BUGREPORT)
     't'  tag attachments for '|', 'p', 's', 'm' (done for 's')
     '#'  tag range of attachments (n-m)
     'x'  repost current attachment to another group
     '%'  (toggle rot13 encoding of screen content)
     'M'  (GLOBAL_OPTION_MENU)
     '&'  (GLOBAL_TOGGLE_COLOR)
     'I'  (GLOBAL_TOGGLE_INVERSE_VIDEO)
     '\'' (PAGE_ARTICLE_INFO) (the key would then be miss-named, but 'V'
          is only reachable from page-level so not a big issue).

o  Add to the posting history screen ('W'):
     'M'  (GLOBAL_OPTION_MENU)
     'J'  (GLOBAL_CONNECTION_INFO)

o  Add to the URL Menu ('U'):
     'M'  (GLOBAL_OPTION_MENU)
     'J'  (GLOBAL_CONNECTION_INFO)

o  Add to the Options Menu ('M'):
     'I'  (GLOBAL_TOGGLE_INVERSE_VIDEO)

o  integrate multi-part tagging with regular tagging, eg.
   "This article appears to have multi-parts, try and find them (y/n)?"

o  Add a command-line switch (-[v]V) that prints out all values of
   cpp-symbols etc. [partly done, but should be cleaned up]

o  Reorganize tinrc into related sections for easier editing
   e.g., Display, Posting etc.

o  A system-wide tinrc configuration file (to hold some defaults).
   [done: /etc/tin/tinrc] A key code to reset to the system defaults.
   Maybe a second file which could be used to force settings (eg.
   inews & mailer) (tin.defaults [--with-defaults-dir] is a start)

o  when From: only contains "First-name Last-name" (invalid) tin strips
   the Last-name in group/thread-level
   [20020319 Urs Janssen <urs@tin.org>]

o  for config_page(OPT_MAIL_ADDRESS) verify the the given address
   and reject it if invalid.

o  Bounce duplicate Message-ID's when the headers are read. This will
   make the threading code happier too.
   [Jason Faultless <jason@altarstone.com>]

o  Merge the selection code with the range code. Having two similar methods
   of picking articles with similar goals is wasteful.
   [Jason Faultless <jason@altarstone.com>]

o  add check for liblzma/libbzip2/zlib (>=1.1.4)/[mini]lzo, lzlib, liblz4,
   liblrzip, libzstd, lzfse, ...
   (<http://tukaani.org/xz/>, <http://sources.redhat.com/bzip2/>,
    <https://zlib.net/>, <http://www.oberhumer.com/opensource/lzo/>,
    <http://lzip.nongnu.org/lzlib.html>, <http://code.google.com/p/lz4/>,
    <http://freecode.com/projects/long-range-zip>,
    <https://github.com/facebook/zstd>,
    <https://github.com/ebiggers/libdeflate>,
    <https://github.com/lzfse/lzfse>) and add an option to write/read
    compressed local overviews (done for zlib).
   the libs might also be used for post-processing articles.

o  rewrite/cleanup all the debugging code, the output in /tmp is messy; the
   on screen output either slows down things dramatically or is unreadable;
   split DEBUG_MISC (drop numeric levels when doing so)!
   always log the terminating "." in multiline responses, so we
   have a timestamp even if not running with -vD 1 (make verbose and
   non verbose more consistent).
   document the different debug-files and the effects of increasing
   the verbosity.
   [Urs Janssen <urs@tin.org>]

o  Add 'M'enu option to define chars for utf8_graphics.
   (and rename option to unicode_graphics or the like)

o  allow user defined mouse button bindings (like keymap).

o  add support for plan9's nntpfs with -9 /path/to/spool or the like
   <https://9p.io/magic/man2html/4/nntpfs>

o  do real $MAILPATH parsing (misc.c:mail_check()) to show custom-message
   if given instead of our generic one.

Posting enhancements
--------------------
o  sort Followup-To:/Newsgroups: after stripping doubled newsgroups and
   before checking if they are identical, if so, strip Followup-To: and
   use unsorted but stripped Newsgroups:-line only
   ulBuildArgv() would be good for this

o  if Newsgroups:-line has groups in it which are not present in the users
   active file ask the user if he wants to strip these groups from the
   newsgroups-line (N/y)
   do the same for Followup-To:

o  check if any valid groups are in the Followup-To:-line and if not inform
   the user and use Newsgroups: instead (at the start of post_response())

o  bring up a warning on a long Newsgroups: (>=5) line and
   force the user to confirm every single group he wants to post (or
   redirect followups to) in. (N/y)

o  bring up a warning when trying to f'up into a binary group
   (use a regexp to detect binary groups e.g.:
    (?:\.binae?r|de\.alt\.dateien\.))
   (Warning, sending a followup to a binary group is undesired, post it
    anyway? N/y)
   [Urs Janssen <urs@tin.org>]

o  posting to a binary group should warn if no followup is set to another
   group/poster (you have not set a target for a possible discussion on your
   post, would you like to go on anyway? N/y)
   [Urs Janssen <urs@tin.org>]

o  when posting to a group containing uppercase-letters: bring up a
   warning: "Newsgroup-names should be all lowercase, correct it? (Y/n)"

o  add config option for (external) viewer to show postings stored in
   posted_articles_file
   [20021003 Michael Gerhards <HM-Gerhards@uni.de>]

Filtering enhancements
----------------------
o  add used filter-type to filter file or filter rule or use different
   filter files for wildmat/regexp; or at least check the filter file
   before usage and inform the user if its format seems not to match
   the wildcard-tinrc entry, e.g. read the filter-file (count the
   rules and if any ignore everything but the lines which take a regexp
   or wildmat (subj|from|msgid(?:|_last|_only)|refs_only|xref|path) and
   try to compile_regex() it - if there are errors like
   PCRE2_ERROR_QUANTIFIER_INVALID warn the user if wildcard-tinrc is
   regexp ("looks like a wildmat filter file, but ... q)uit r)rename ...).

o  add command: mark all articles older/newer than <date> (or <days>) as
   read (useful when subscribing to a new group with high-traffic...)

o  fix kill/hot mechanism so that it is possible to match articles on
   arbitrary headers
   [done for Path, Dennis]

o  don't strip "Re: " out of the subject before applying the filter on it
   (note: we now have the raw subject in subject_raw)

o  allow any given amount of days in default_filter_days not only
   {1, 2, 4} * 28 days

o  allow expiring filter entries n-days after the last time they matched

o  add command to generate filter rules for all currently tagged articles

o  allow editing of the strings presented in the kill-Menu for
   "Kill Subject", "Kill From", "Kill Msg-Id" without having to edit
   the full filter-file
   [20120201 Urs Janssen <urs@tin.org>]

o  allow ranges in gnksa-filters "gnksa=200-399" or "gnksa=101,103,201"
   [20200709 Urs Janssen <urs@tin.org>]

Pager enhancements
------------------
o  add 'autoview' (spawn external viewer) 'autohide' (don't even show info
   about that part) for different content-types

o  add MIME Multiple Language Content Type (RFC 8255) analysis

o  add toggle attachment depth indentation 4 <-> 2 like ^T for tabs

o  add toggle dont_break_words

o  suppress hide_uue=2 checking unless first line in an article or following
   a blank line

o  add missing mailcap (RFC 1524) features: %n, %F, copiousoutput, print,
   if no %s appears in the view-command (or edit fields) the body part needs
   to be passed to the command as standard input, ...
   [20111205 Urs Janssen <urs@tin.org>]

o  add BiDi handling to page header

o  possibility to recook the article with a manually supplied charset
   (e.g. to override a false guess or the like)

Internal Changes
----------------
o  check remaining fopen(..., "r") calls if they should replaced by
   tin_fopen() to get some default error-handling and if not put a
   comment to them.

o  add configure check for (missing) ngettext(3) (see P_()/NP_() in tin.h).
   fix the "untranslatable" strings and use full sentences instead.
   (grep for "plural-forms")
   [20150113 Urs Janssen <urs@tin.org>]

o  rename disable_gnksa_domain_check to enable_gnksa_domain_check and
   invert logic now the default changed
   [20131119 Urs Janssen <urs@tin.org>]

o  curses.c:input_pending() and curses.c:get_arrow_key() have
   #ifdef HAVE_SELECT and a code path for the case when we don't have
   select(2), but read.c:wait_for_input() has no code path for the
   !HAVE_SELECT case. we should add a !HAVE_SELECT case there (or at
   least have adjusted messages in txt_reading_article and txt_group)
   [20110506 Urs Janssen <urs@tin.org>]

o  always display (also) the servers error response string to the user,
   currently tin sometimes gives generic messages (e.g. when authentication
   fails), but the servers response may include additional info (like
   bandwidth exceeded)
   [20101230 Urs Janssen <urs@tin.org>]

o  rewrite mini-help, remove the long strings and generate them dynamically
   one help text for each key makes translations more easy and unique and can
   use the available space on the screen much better if not running on 80
   columns.
   [20100326 Urs Janssen <urs@tin.org>]

o  rewrite auth.c
   - it is overcomplex and the current codeflow has issues (e.g. prompts
     for user/pass if not in newsauth even for e.g. SASL ANONYMOUS).
   - sasl-libs likely have callbacks, make use of them!

o  fix aclocal.m4:CF_FUNC_SYSTEM and/or misc.c:invoke_cmd() that
   --enable-broken-system-fix/IGNORE_SYSTEM_STATUS isn't needed anymore.
   [20090520 Urs Janssen <urs@tin.org>]

o  move several (server related) files into the per-server dir e.g.:
      ${TIN_INDEX_NEWSDIR-"${TIN_HOMEDIR-"$HOME"}/.tin"}/.news${NNTPSERVER+"-$NNTPSERVER"}/
   should be
      ${TIN_INDEX_NEWSDIR-"${TIN_HOMEDIR-"$HOME"}/.tin"}${NNTPSERVER+"/$NNTPSERVER"}/.news/
   [20050807 Urs Janssen <urs@tin.org>]

o  remove untranslatable constructs like txt_saved_to, txt_saved_to_range,
   txt_mark_arts_read, txt_mark_art_read, ...
   [20050413 Urs Janssen <urs@tin.org>]

o  keys which could be renamed/merged:
   - 'l' GroupListThd, PageListThd
   - 'm' GroupMail, PageMail, PostMail, ThreadMail
   - 'D' GroupCancel, PageCancel, ThreadCancel
   - 'N' GroupNextUnreadArt, PageNextUnreadArt, (SelectNextUnreadGrp)
   - 'S' GroupAutoSave, PageAutoSave, ThreadAutoSave
   - 'P' GroupPrevUnreadArt, PagePrevUnreadArt
   - '@' GroupReverseSel, ThreadReverseSel
   - '~' GroupUndoSel, ThreadUndoSel
   [20050408 Urs Janssen <urs@tin.org>]

o  read_overview() calls eat_re() which strips the "Re: " out of the
   subject. the modified subject is used for batch_mode opperatios (-N/-M)
   which might not be what ppl. expect and eat_re() is the only function
   which needs the 'regex' overhead in batch_mode... (see also the note
   about "Re: "-stripping at "Filtering enhancements").
   note: we now have article->subject_raw (no re-stripping, but also no
   mime-decoding!), which we may use instead (after mime-decoding).
   [20050225 Urs Janssen <urs@tin.org>]

o  use new_nntp_command() instead of nntp_command() in the rest of the
   code (where useful; if we do a global change, rename it to
   nntp_command()). see check_extensions() for a sample usage.
   [20050211 Urs Janssen <urs@tin.org>]

o  replace various occurrence of "US-ASCII" by DEFAULT(_MIME)_CHARSET
   and define that to "US-ASCII" (to make 'updates' easier). See also
   RFC 6657 and e.g. RFC 7111 (text/cvs now defaults to UTF-8).
   [20040929 Urs Janssen <urs@tin.org>]

o  get rid of CURR_GROUP, use t_group instead
   create a global t_group *CURR_GROUP instead of the current macro
   reduce dependencies on my_group[] & selmenu outside of select.c
   [20030501 Urs Janssen <urs@tin.org>]

o  clean up $AUTOSUBSCRIBE code (the NNTP code path is a mess)
   [20030412 Urs Janssen <urs@tin.org>]

o  make configure look for strrstr() in libpub & publib.h
   [Urs Janssen <urs@tin.org>]

o  reorder several structs to avoid padding e.g. t_capabilities, t_group, ...
   (see gcc -Wpadded and/or pahole(1))
   [Urs Janssen <urs@tin.org>]

o  what type is base[]? (long, see memory.c:init_alloc()~102)
   There is a lot of confusion internally over how it is used
   compare setup_hard_base() with find_base() etc..
   [Jason Faultless <jason@altarstone.com>]

o  check where PRODUCT should be used instead of tin_progname and/or "tin"
   [Urs Janssen <urs@tin.org>]

o  check where the global-var newsrc should be used in lang.c instead of
   string "newsrc"

o  check where iKeyAbort should be used instead of ESC (etc.pp.)
   (AFAICS all fixed except prompt.c and read.c/'z')
   [Urs Janssen <urs@tin.org>]

o  close potential security holes:
   - remove fixed length buffers (find_nov_file(), quote_space_to_dash(),
     escape_shell_meta(), build_messageid(), get_secret(), get_host_name(),
     get_domain_name(), get_fqdn(), get_full_name(), build_sender(), ...)
   - change all system()/popen() calls to fork() and exec() calls
   - check where we should use snprintf() instead of sprintf()
   - check where we should use strncat() (or append_to_string()) instead of
                               strcat()
   - check where we should use strscpy() (configure check needed) or
                               strncpy() instead of strcpy()
   - check possible races with access()/link()/rename()/stat()/
                               unlink()/chdir()/fopen()/fstat()/open()/
                               opendir()/t_open()
   - check getenv() results before using it
   - check where my_strncpy() or STRCPY() should be used
   - check where s2i() or strtol(...,10) with errno checking should be used
     instead of atoi()
   - check where fgets() can be replaced by tin_fgets()
   [Urs Janssen <urs@tin.org>]

o  split tin.h/proto.h for better dependencies in Makefile

o  check where int/long/... should be replaced by size_t, uid_t, mode_t,
   off_t, ...
   [Urs Janssen <urs@tin.org>]

o  check code with
   valgrind (<http://valgrind.org/>),
   cppcheck (<https://trac.cppcheck.net/>),
   Coverity (<https://scan.coverity.com/projects/993>),
   gcc -fanalyzer
   (<https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html>),
   clang-analyzer (<http://clang-analyzer.llvm.org/>),
   infer (<http://fbinfer.com/>)
   Splint (LCLint) <http://www.splint.org/>,
   IKOS <https://github.com/NASA-SW-VnV/ikos/tree/master>,
   zzuf (<http://caca.zoy.org/wiki/zzuf>) and
   aflnet (<https://github.com/aflnet/aflnet>)

o  strip Xref:-header if saving news in batch mode (-S)?
   [Urs Janssen <urs@tin.org>]

o  rewrite code to use INEWS_PATH instead of INEWSDIR
   [20021007 Urs Janssen <urs@tin.org>

o  remove built in path of external commands (metamail, ispell, ...)
   [for ispell $ISPELL can be used to override systempath and progname]

o  mask inline pgp signature/key block like we do for uu-sections
   [20090722 Urs Janssen <urs@tin.org>]

o  some non fixed width strings could be formatted nicer (warp on last space
   before cCOLS), e.g. txt_warn_downgrade
   [20110325 Urs Janssen <urs@tin.org>]

o  too much code is compiled when configured NO_POSTING or without NNTP
   [20210206 Urs Janssen <urs@tin.org>]

o  replace rewind(stream) with fseek(stream, 0L, SEEK_SET) to be able
   to handle errors

o  as rename_file() and copy_fp() now return errno (or 0),
   check where we can make use of it for a more fine grained error handling.

o  without %G and %P expansion, we could read mailcaps only once and keep
   the config in memory

o  tin.h MIME_ENCODING_* and rfc2046.h ENCODING_* are not aligned

Unicode
-------
o  make mm_network_charset an "option_list" to avoid junk input or
   undesired (UTF-1, UTF-7, UTF-16*, UTF-32*, UCS-2, UCS-4, ...) encodings.
   add configure check for the hard coded charsets (try iconv_open(x,
   us-ascii) on each...) and disable those not available.
   (think about more network charsets (GB2312, GB18030, Shift_JIS,
    ISO-8859-6[-{I,E}], ISO-8859-8[-{I,E}], ISO-8859-11, VISCII, VIQR;
    check whether KOI8-RU is still used/valid))
   [done except configure check 20010907 urs@tin.org]

o  make mm_network_charset a user configurable item list
   ("US-ASCII:ISO-8859-1:ISO-8859-9:ISO-8859-15:UTF-8",
    "US-ASCII:ISO 8859-5:KOI8-R:UTF-8",
    "EUC-CN:ISO-2022-CN:ISO-2022-CN-EXT:Big5:UTF-8", whatever)
   and try all given charsets in order till the one is found which matches
   best (i.e. can display most (all) of the chars in the article).
   (see also RFC 2046 4.1.2)
   [20050805 <urs@tin.org>]

o  add IDNA 2003 (RFC 3490ff.) and IDNA 2008 (RFC 5890ff.) support,
   (<http://www.gnu.org/software/libidn/> IDNA 2003,
    <http://jprs.co.jp/idn/index-e.html> IDNA 2008,
    <http://site.icu-project.org/> IDNA (uidna_IDNToUnicode()
     and/or with ICU >=4.6 uidna_nameToUnicode(uidna_openUTS46)),
    <http://www.gnu.org/s/libidn/#libidn2> IDNA 2008)
   (added minimalistic IDNA decoding support if a recent lib was found, urs)
   [20030917 Urs Janssen <urs@tin.org>]

o  add normalization
   (via <http://site.icu-project.org/> or
   <http://www.gnu.org/software/libidn/> or
   <http://www.gnu.org/software/libunistring/> or
   <https://github.com/JuliaStrings/utf8proc/>)
   (done for search strings and threading, missing for filtering etc. pp.)
   [20031209 Michael Bienia <michael@vorlon.ping.de>]

o  rewrite ICU configure checks
   [20180710 Urs Janssen <urs@tin.org>]

o  check for libutf8proc <https://github.com/JuliaStrings/utf8proc>
   and use it (as fallback)?

o  check for wcsftime() and if found use it instead of strftime() (at
   least in page.c).
   [20130129 Urs Janssen <urs@tin.org>]

o  BiDi handling to select-, group-, thread-level (ui-layout expects
   left-to-right text).

o  check for rpmatch(3) and if found use in yes/no questions,
   prompt.c:prompt_yn()?

o  check for libunibreak <https://github.com/adah1972/libunibreak>
   and make use of it if found? (tinrc.dont_break_words)

o  check for libgrapheme <https://libs.suckless.org/libgrapheme/>
   and if found use it for char/word-segmentation?

Docs/online help
----------------
o  document the difference between
   - "-D 1" (nntp dialog with likely long multilines responses and
             sensitive auth data skipped)
   - "-vD 1" (full nntp dialog)
   - "-vvD 1" (full nntp dialog plus diagnostic messages)

o  the documentation of PageFollowupQuoteHeaders (^W) and
   PageReplyQuoteHeaders (^E) is wrong as not all headers but just those
   visible via news_headers_to_display (or all if raw mode is on
   (PageToggleHeaders (^H)) are included.
   [20100911 Urs Janssen <urs@tin.org>]

o  the online help of GroupMarkUnselArtRead 'X' is unclear as it doesn't
   say that the article are marked read
   [20090814 Urs Janssen <urs@tin.org>]

o  document the different signals/actions
   [20080209 Urs Janssen <urs@tin.org>]

o  review the unfinished (man page) translations

o  add installation guide (in html?)

o  add cross-compilation hints
   	CC="crosscc" LD="crossld" AR="crossar" RANLIB=":" MAKE="crossmake" \
   	./configure --with-build-cc=gcc --with-build-cpp=cpp \
   	--target=cross-traget-triple --without-x # usual configure flags

o  better document keymap feature

o  man page always needs work and proof reading
   e.g. 'U', 'V' in pager need better documentation, random organization
   feature isn't documented at all.

o  submit short invocation examples to tldr
   <https://github.com/tldr-pages/tldr> and/or eg
   <https://github.com/srsudar/eg>

o  replace "\\" by "\e" in man pages (portable?)

o  integrate doc/auth.txt into tin.1 man page, mention RFCs for
   available auth methods (AUTHINFO SASL: RFC 4643, SASL PLAIN: RFC 4616,
   SASL ANONYMOUS: RFC 4505, ...)

o  document ${HOST:-"$HOSTNAME"} fallback if gethostname(2) and uname(2)
   do not return a hostname

o  the limited pgp support (inline pgp as of RFC 4880, just signature
   verification or key import but no decryption ...) is nearly undocumented
   in the man page

Not yet classified
------------------
o  add. cmd-line option to override/(ignore) the default serverrc?

o  "-w group,list" uses only the first group found in the servers active
   file to post to

o  tinrc.info_in_last_line has no 'M'enu entry (but a toggle-key at most
   levels: GLOBAL_TOGGLE_INFO_LAST_LINE)

o  flag actions in signal_handler to be done; check the flag outside
   the signal_handler (where? handle_keypad()?) and do the outstanding
   actions there, like:
   	enum sactions {nothing, write_newsrc, tin_done, ...}
   	volatile sig_atomic_t pending_sactions = nothing;
   	/* ... */
   		case SIGUSR2:
   			pending_sactions = write_newsrc;
   (could fix our SIGUSR2 and SIGTERM issue; see SIGWINCH/prompt_list()).

o  add tinrc option to disable charset guessing for group-descriptions
   and MOTD.

o  with USE_ICU_UCSDET add guess_charset() and automatic conversion
   to files added to the article, i.e. msg_add_x_body(),
   msg_add_x_headers(), msg_write_signature(), pgp_append_public_key(), ...?

o  when reconnection fails or is unwanted during "POST", also/only
   postpone_article(article_name) besides/instead of
   rename_file(article_name, dead_article) and
   append_file(dead_article, dead_articles)?
   see nntplib.c:reconnect() ~894

o  multipart/multilingual support (RFC 8255)?

o  make NNTP_TRY_RECONNECT configurable via tinrc?

o  shouldn't misc.c:strfmailer() handle '\n' like misc.c:strfeditor()
   and pass it on as is?

o  should -X (no overwrite) and/or -G/tinrc.getart_limit with
   cache_overview_files=ON warn that tin will not cache the overviews?

o  verbatim regions can't be nested, should they?

o  allow per group cancel_lock_algo setting via attributes?
   [20170810 Urs Janssen <urs@tin.org>]

o  exit HEAD/NEXT loop on 5xx responses to HEAD? (see
   art.c:open_art_header())
   [20161011 Urs Janssen <urs@tin.org>]

o  motd is only shown/checked for if using nntp, subscriptions is also
   evaluated if reading from local spool - look for motd[.nnrpd|.news[|.innd]]
   in the same dir if not using nntp?

o  if reading from local spool, groups which are present in the active
   but all articles are exired (and thus the group-dir got removed from
   the spool) are shown as bogus ('D').

o  follow $LC_COLLATE (e.g. add strxfrm()/wcsxfrm()/strcoll()/wcscoll() to
   subj_comp_*/from_comp_*)?
   [20160421 Urs Janssen <urs@tin.org>]

o  IDNA decode news_headers_to_display?
   [20160227 Urs Janssen <urs@tin.org>]

o  sometimes we convert the supplied server name to lowercaes (for cached
   overviews) and sometimes we don't (nrctbl.c code and -g arg). Thus
   -g Foo.bAr.eXample may result in file not found
   for entries like '*       ~/.tin/.newsrcs/${NNTPSERVER-localhost}'
   even there is a ~/.tin/.newsrcs/foo.bar.example file.
   Should we always lowercase $NNTPSERVER / -g? (but still allow
   upper/camelcase for -f or a fixed filename in newsrctable).
   [20160225 Urs Janssen <urs@tin.org>]

o  allow "begin-base64"/"====\n" as start/end marker for UUE-blocks besides
   the traditional "begin"/"end\n"?
   [20151204 Urs Janssen <urs@tin.org>]

o  cache_overview_files also affects $TIN_INDEX_MAILDIR and $TIN_INDEX_SAVEDIR
   overviews, is this desired?
   [20151112 Urs Janssen <urs@tin.org>]

o  articles without a Message-ID are skipped as the code currently depends
   on Message-IDs, but they might show up in mailgroups - assign a pseudo
   Message-ID to them?
   [20151111 Urs Janssen <urs@tin.org>]

o  make --with-defaults-dir= default to $sysconfdir/tin
   (=/usr/local/etc/tin)?
   [20110809 Urs Janssen <urs@tin.org>]

o  Supersedes (and repost) don't reuse the Reply-To: header of the original
   article
   [20110808 Urs Janssen <urs@tin.org>]

o  what about !us-ascii chars in username/password when using
   AUTHINFO USER/PASS? Currently they are sent as is, RFC 3977 says
   "The character set for all NNTP commands is UTF-8", RFC 4643 doesn't
   mention any special handling.
   [20101104 Urs Janssen <urs@tin.org>]

o  charset conversion fails when converting articles from multibyte charsets
   with 0 bytes (UCS2, UCS4, UTF-16[[LB]E], UTF-32[[LB]E], ...), currently
   we just skip over such parts instead of handling them properly
   [20100905 Urs Janssen <urs@tin.org>]

o  the documentation suggests that novrootdir/$TIN_NOVROOTDIR defaults to
   spooldir/$TIN_SPOOLDIR if unset, which is not exactly what happens as
   this default is set at configure/compile time, not at runtime, so
   setting $TIN_SPOOLDIR to something different than the default will not
   automatically adjust $TIN_NOVROOTDIR at runtime. we should either
   fix the documentation or the behaviour.
   [20100103 Urs Janssen <urs@tin.org>]

o  replace wildmat.c with uwildmat.c
   <http://inn.eyrie.org/trac/browser/trunk/lib/uwildmat.c>? It knows poison
   patterns and can handle UTF-8 strings
   [20091223 Urs Janssen <urs@tin.org>]

o  support $XDG_CONFIG_HOME[S] / $XDG_DATA_HOME[S] / $XDG_RUNTIME_DIR /
   $XDG_CACHE_HOME (eg. for cached NEWSGROUPS_FILE)
   <http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html>
   [20081010 Urs Janssen <urs@tin.org>]

o  add //IGNORE iconv-option like //TRANSLIT? (and UCNV_*_U_CALLBACK_SKIP in
   the ucnv-case)
   [20080824 Urs Janssen <urs@tin.org>]

o  what about REDIRECT_OUTPUT? shouldn't we better add this to DEFAULT_PRINTER
   so ppl. can override it via the 'M'enu? and shouldn't DEFAULT_PRINTER be
   detected via configure?
   [20080625 Urs Janssen <urs@tin.org>]

o  create debug output in
   ${TIN_HOMEDIR:-"$HOME"}/.tin${NNTPSERVER:+"/$NNTPSERVER"}${NNTPPORT:+":$NNTPPORT"}/
   instead of in $TMPDIR (as it may contain username and password,
   access restrictions in $TMPDIR are a bad idea as other users
   need to be able to overwrite the file (multi user system)).
   maybe also add "-O dir" cmd.line option to change the location?
   [20080211 Urs Janssen <urs@tin.org>]

o  -M/-N report is mailed to userid, should we use tinrc.mail_address
   instead?

o  tin uses the first sig-isolator as recent one, USEFOR says it should
   use the last. There is no consensus that tin should follow this USEFOR
   requirement.

o  'K' is still a bit inconsistent:
   - in the group and thread menu it marks current item read & jumps to the
     next unread item.
   - in the article pager (page.c) it marks the rest of the current thread
     read and jumps to the next unread article. should we let 'K' behave
     like <TAB> in the pager?

o  rename prompt_followupto (to prompt_extra_headers) and make it an option
   list like {"Followup-To"; "Summary"; "Keywords";
   "Followup-To & Summary"; "Followup-To & Keywords";
   "Summary & Keywords"; "Followup-To, Summary & Keywords"} or make it a
   user-definable text field like news_headers_to_display? or leave this
   entirely to the user - he could tweak attributes accordingly.
   [20060503 Urs Janssen <urs@tin.org>]

o  in several places only the latest keybinding is shown in prompts
    (e.g. "q=quit, e=edit, i=ispell, g=pgp, M=menu, w=post, o=postpone: w"
     with "PostPost	p	y	w" in keymaps)
   should we try to show them all?
   [20050718 Urs Janssen <urs@tin.org>]

o  remove hard coded keys (eg. 'q') from txt_filter_global_rules,
   txt_reading_article, txt_select_config_file_option, txt_group and
   replace with actual keybinding (after making it rebindable).
   [20200526 Urs Janssen <urs@tin.org>]

o  add PGP_INCLUDE_KEY to pgp_mail_keys?
   [20050426 Urs Janssen <urs@tin.org>]

o  trn and perls Net::NNTP::Auth use ~/.nntpauth (format is
   /^$server\s+$user\s+$password/), shall we also try ~/.nntpauth if we
   can't find a matching entry in ~/.newsauth? and should we look for
   ${TIN_HOMEDIR:-"$HOME"}/.tin/.newsauth if ~/.newsauth is not found?
   What about ~/.authinfo (Gnus; format is .netrc-like:
   /machine\s+$server\s+ login\s+$user\s+ (?:password\s+$password\s+)?
    (?:\s+port\s+$port\s+)?(?:force\s+yes\s+)?/x
   see <https://www.gnu.org/software/emacs/manual/html_node/gnus/NNTP.html>;
   and note the default-token)?
   [20040128 Urs Janssen <urs@tin.org>]

o  what todo if in a CTE: x-uue the CD: filename differs from the one given
   in the begin line? IMHO we should use the one from the begin line for
   saving and in the overview in the pager.
   [urs@tin.org]

o  inverse_okay's Menu description isn't accurate (inverse is also used for
   URL highlighting). mono_mark* do allow "Reverse video" even if
   inverse_okay=FALSE.

o  --disable-inverse-video seems to be ignored - do we still need it?

o  move tinrc.defaults for certain comannds to a pre-filled .inputhistory?
   (if so, also move last_search there)
   [Jason Faultless]

o  what about -a cmd-line flag? is this really needed? IMHO this can be
   dropped, '&' can be used for runtime color toggling.
   [20021106 Urs Janssen <urs@tin.org>]

o  think about group numbering in "only unread" display mode
   (using different numbers in show all/show only unread leads to some
    problems, f.e. group moving)

o  doesn't handle symlinks for .oldnewsrc
   (see <20021003021508.GA28021@akk10.akk.uni-karlsruhe.de> for details, urs.
    if we're going to 'fix' this we must be careful to avoid symlink
    attacks (<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-1999-1091>)
   [20020627 Jeff Sheinberg <jeffsh@erols.com>]

o  missing newsrc file and connecting to a server without groups leads to the
   question "Try and save newsrc file again? (Y/n)" but a newsrc file doesn't
   get written. Same may occur on quitting if newsrc file had been removed
   while tin was running. Useful? Should write_newsrc() try to create a newsrc
   file if it is missing instead of just leaving?
   [20061102 Dirk Nimmich <nimmich@muenster.de>]

o  configure checks for fdopen(3) and defines HAVE_FDOPEN if found, but we
   don't have any code guarded with that macro nor any fallback code if not
   found.

o  add check for libmagic <https://www.darwinsys.com/file/> and if
   found use it to verify given mime-types in attachments

o  add check for libarchive <http://www.libarchive.org/>
   and use for post-processing?
   [20111225 Urs Janssen <urs@tin.org>]

o  add check for liblockfile and/or liblock and use if found?

o  add check for heapsort(3) in libbsd? <http://libbsd.freedesktop.org/wiki/>
   [20130305 Urs Janssen <urs@tin.org>]

o  add check for libtre and offer TRE as matching method for "wildcard"?
   <http://laurikari.net/tre/about/>, <https://github.com/laurikari/tre/>
   [20130706 Urs Janssen <urs@tin.org>]

o  eval $NEWSHOST if $NNTPSERVER is unset (like Net::NNTP(3perl))
   [20141225 Urs Janssen <urs@tin.org>]

o  add show_progress to art.c:setup_hard_base() and filter.c:filter_articles()
   both can be slow in huge groups

o  option to {display,warn,hide} article if it has an Expires:-header in the
   past? or do something via filter?

o  also check for $NEWS_ORGANIZATION (see lynx(1))?

o  add $MAILCHECK alarm-timer?

o  in case of HAVE_LIB_PCRE2 && HAVE_SETLOCALE && !NO_LOCALE && ENABLE_NLS
   (and $LC_CTYPE != C/POSIX[.UTF-8]) do we want to (see pcre2api(3)):
     pcretables = pcre2_maketables_8(NULL);
     pcreccontext = pcre2_compile_context_create_8(NULL);
     pcre2_set_character_tables_8(pcreccontext, pcretables);
     pcre2_compile(..., pcreccontext);
     pcre2_maketables_free(pcretables);
   and add PCRE2_UCP options? Do we want do set PCRE2_UCP unconditionally,
   even though it slows down matching?

o  when saving/decoding articles/attachments use realpath() and
   warn if the canonical absolute path starts with any of
   { "/boot/", "/dev/", "/etc/", "/proc/", "/root/", "/sbin/",
     "/sys/", "/usr/sbin/" /*, ... */ }

o  should NNTP_SERVER_FILE be changeable via configure?
