
$Header: /afs/gza.com/software/xrn/src/RCS/TODO,v 1.28 1994/11/07 16:04:36 jik Exp $

The Ever growing list of things that should be done and things that would 
be nice if they were done.... (and even worse, it's not up to date)

- PGP support?
- Add a mode in which only the header of an article is fetched, unless
  the user tries to scroll down, in which case the rest of the article
  is fetched.
- Make the program multithreaded, or use a subprocess for
  communication for the server, or something so that the UI and NNTP
  stuff can work independently of each other (the WorkProc stuff used
  now to do prefetching is a hack that approximates this, but it
  really isn't good enough splitting the NNTP stuff into a separate
  thread or process is the right way to do this, but it's a lot of
  work).
- When the last newsgroup in the newsgroup list is read and exited
  from, make sure that the cursor doesn't end up floating in space
  past the end of the newsgroup list in the index window.  Reported by
  philippe@pablo.physics.lsa.umich.edu (Philippe Brieu).
- Clean up the code in getlineslist() in server.c that extracts the
  number of lines in a posting from a line returned by XHDR.  It's
  much more complicated and obtuse than it needs to be, and
  furthermore, it doesn't deal with "Lines:" headers that have more
  than one whitespace character after the colon before the number of
  lines.  Problem reported by dstarks@rc.tudelft.nl
  (D. Starks-Browning).
- Add X resources (and command line options) corresponding to the
  USER, HIDDENHOST, HIDDENPATH and FULLNAME environment variables.
- In artListOldFunction, display an error message for every range of
  articles that isn't available, instead of displaying an error
  message for every article that isn't available.
- Fix up the action of "Followup & Reply" so it only includes mail
  headers in the mail message and news headers in the posting, and
  comments out other headers with "X-" or something.
- Add something to the buttonList X resource syntax to allow someone
  to say, "Put all buttons not listed explicitly here."  It should
  obviously only be specifiable once in any particular button list.
  This will allow people to move specific buttons to the beginning or
  end of the list in the order they want, without having to update
  their resources for new buttons after every release.  Suggested by
  phigro@phigro.rnd.symix.com (Phil Gross).
- Compile with gcc -Wall and fix all the warnings that pop up.
- When you try to pipe an article into a command that fails and exits
  without reading all the input, XRN exits (under SunOS, at least).
  I'm not sure why, since it does seem to be trapping SIGPIPE in
  ehInstallSignalHandlers.  Need to investigate this and fix it.
- Add an XRN_SAME_LINE option to mesgPane, which is similar to
  XRN_APPEND but causes the new message to be appended to the end of
  the line that the previous message is on, instead of displayed on a
  new line.  Use the new option where it's appropriate, where
  XRN_APPEND is being used now but XRN_SAME_LINE would be better.
- Should XRN try to connect to a news server with host name "news" by
  default if NNTPSERVER isn't set and SERVER_FILE doesn't exist (and
  the server name can't be determined from the INN configuration
  file)?
- Update the XtInitialize call to an XtAppInitialize call, and modify
  all the places that determine the application context themselves to
  use a global application context variable instead (maybe; it might
  actually not be best to use a global variable, in case XRN wants to
  use multiple application contexts at some point in the future.  need
  to think about it).
- The Xaw code uses a text widget for the list of newsgroups or list
  of articles in the top window.  It displays a cursor to show the
  current article, and highlighting to show when an article has been
  selected.

  The Motif code, however, uses a list widget instead of a text widget
  for the top window.  As a result, it can't display a cursor, so it
  uses highlighting for everything.

  There is therefore some ambiguity.  XRN uses selecting an article in
  the index to mean a specific thing -- e.g., if "Catchup" is pressed
  when an article is selected, only articles up to that one are marked
  read.  It's easy to tell when an article is selected when using the
  Xaw interface, but it's not possible to tell when using the Motif
  interface, because the current article looks the same as a selected
  article.

  Either the XRN documentation needs to be updated to indicate this
  ambiguity, or (better) the Motif code needs to be fixed somehow
  (perhaps by switching it back to using a Text widget, or by finding
  out if the Motif widget supports multiple kinds of highlighting in
  the same widget) so that it's possible to distinguish between the
  current position and a selected item in the top window.
- Merge the functionality of the post, followup and gripe functions
  into the followup_or_reply function, so that all of the
  header-adding code only needs to happen in one place.
- Add a 'Post & E-mail' button to go along with the 'Followup & Reply'
  button.
- When done prefetching a newsgroup and still in newsgroup mode, the
  newsgroup list should be updated.  However, doing so may cause
  problems, so need to make sure it's OK before doing it.
- When someone clicks on "Followup" for an article marked
  "Followup-To: poster", the dialog that pops up should offer three
  options -- followup, reply, and followup & reply, not just the
  followup and reply options.
- I clicked on "Followup & Reply" for a posting in news.groups that
  had "Followup-To: sender" in its header.  Ignoring for a moment the
  fact that "sender" is an invalid thing to put there, the compose
  pane that I got said "X-Newsgroups: sender" in it.  It should have
  said "X-Newsgroups: news.groups", since the X-Newsgroups header
  should list the newsgroups that the original article was posted in,
  not the newsgroup that the followup is being posted in.
- Say the newsgroup under your cursor has unread articles in it but
  that all of them will be KILLed when you enter the newsgroup.  Say,
  too, that the next newsgroup is in the same situation.  When you hit
  the space bar to enter the group, it will try to enter the group,
  realize that it's empty, and stay in newsgroup mode; however, it
  will also start a prefetch for the second group.  When you hit space
  to enter the *second* group after the prefetch is finished, it'll
  again try to enter the group, realize that it's empty, and stay in
  newsgroup mode, but this time it won't start to prefetch the next
  group (i.e., the third group from where your cursor originally was).
  At least, I *think* this is what's happening.  Need to investigate
  to confirm that it's really happening, and if so, figure out how to
  make the prefetch keep going until it finds a group with unread
  articles in it.
- Make DO_NOT_EAT_TYPE_AHEAD work.
- Fix mesg.c so that instead of displaying the full output of ctime,
  including the day, date and year, in the message pane, it displays
  just the current time.  After all, the user is using the program
  interactively and therefore doesn't need to be told what the current
  day, date and year are, and the extra information is clutter that
  should be gotten rid of.
- Make matchTranslations support the bottom button box too.
- Merge DXRN into this version of XRN.
- Make the "Continue" button insensitive when there was no previous
  Subject search in the current newsgroup, thus making the "No
  previous regular expression" check (and message) unnecessary.
- Figure out how to make the KILL file stuff support case-insensitive
  searches.  The best way to do this is probably to add an option for
  XRN to use the GNU regexp routines, which I believe take options to
  tell them to do case-insensitive searches.  Need to investigate
  further.
- Turn info() and infoNow() into varargs functions like mesgPane(),
  and fix all calls to them -- calls with strings with % in them need
  to have the %'s escaped, and calls that use sprintf into a buffer
  first can get rid of the buffer.
- Add a "saveSentMessages" option and command line flag
  ("-saveSentMessages" to disable, "+saveSentMessages" to enable,
  disabled by default) to save all successfully sent messages
  automatically in app_resources.savePostings.
- getarticle return
- read updated .newsrc file (XRN detects this, but should allow you to reread)
- prefetch should occur at end of list, not largest number (sorted subject...)
- spawn child for posting, sigchld in parent for confirmation...
- clean up KILL file support
   - handle '{' correctly
        The regular expression \{<m>,<n>\} is supposed to match between
        m and n occurences of the previous character. To kill an expression
        of the form "{foo}", xrn requires the braces to be quoted. Rn, on
        the other hand complains if the braces are quoted.  Rn, on
        the other hand complains if the braces are quoted since the
        expression is not valid.  Test: /{foo}/:j
   - allow field names (Subject/From) in an entry
   - prompt for KILL expression in article mode
	local kill (current subject and typein)
	global kill (current subject and typein)
	local author kill (current subject and typein)
	global author kill (current subject and typein)
   - kill author globally...
   - edit kill file
   - closer to RN
   - don't just replace all special characters with '.'.  Some of them
     should can be quoted with a backslash instead, which will make
     for more specific (and more correct) regular expressions.
     However, have to be careful not to quote with backslashes
     characters that have different meanings when quoted with
     backslash; note that this is dependent on which regular
     expression routines are being used (which is probably why
     replacing with '.' was used in the first place -- to avoid having
     to get it right).
- look at input during prefetch to see if it should be cancelled (or handled).
- remove tmp files as you go, not at the end of the group
  (necessary for large groups with large postings)
- replace popen of mailer with something better so status code can be checked
- fixup postArticle to do Header fixup, not sendFunction...
- check if follow-to is same as newsgroup, warn if not, option to turn this off.
- warn if followup will go to more than one group.
- option to capitalize, not-cap the group name when saving.
- don't refetch article for saving
- thread support
- break up buttons.c into multiple files
	generic stuff, art buttons, all buttons, ng buttons, add buttons, ...
- XHDR message on server timeout
- handle =ng in active file
- command to skip quoted/included sections
- user selectable cursors
- text and reference based searching
- strip leading and trailing spaces from newsgroup name in the Newsgroups field
- control C to disconnect/reconnect and return to top level...
- allow partial selection on subject line - partial selection determines
  what amount of the subject or author is to be killed....
- local server (clientlib.c replaced with something that accesses local files)
- reading an MH folder as a newsgroup (suggested by Luigi Semenzato
  <luigi@CS.Berkeley.EDU>).

