                                   TODO

  Brainwave I just had (9/7): it might be excellent to be able to split
a hierarchical view into two panes, with the left-hand listing one level and
the right-hand showing the particular level which is selected on the left.
This won't work everywhere, but in some places could be a really good idea.
It probably requires that long-planned rewrite of the tree widget, which I still
haven't figured out how to do, except that I need to separate the UI from the
underlying data structure.

  I've tried to move more of the 'world domination' type stuff to its own
section and add some shorter-term goals.

  Simpler things:

 -> Let packages be flagged as "interesting", and provide useful functions to
  make use of that (view only interesting packages, skip to next interesting
  package, etc)  -- this flagging should be sticky.

 -> Add histories for the status-line editing routines.

   This is very simple -- just make a list storing pointers to strings (STL
  strings, please!) and store one for each different edit history needed, then
  allow the vs_statusedit class to get a pointer to these in its constructor,
  and use it in the obvious ways.

 -> It would be nice to make it easy to email a maintainer (just run
   the mailclient as requested)

 -> mutt-style 'tagging' of packages and operations on tagged packages.  This
   feels like it should be done in Lisp.  Will I be strung up if I embed
   an interpreter into aptitude? ;-)

 -> Strip html entities in downloaded changelogs

 -> Refcounting of packages?  (most helpful if I also track what was installed
    just for dependencies)

 -> (possible suggestion) Commands to clear all actions of a given type
   (installs, removals, upgrades, etc)

 -> For reverse depends, perhaps the dependency itself should be shown after
   all?

 -> Fix the behavior when running aptitude for the first time (instead of
   making all the packages new, we should sort them out)

  Harder things:

 -> Write a vtxxx emulator using the vscreen class, to run dpkg (and debconf,
   for the time being -- see below) inside.

 -> Action browsing.  Make undoable actions subclasses of
   vs_treeitem/vs_subtree and let the user see what he/she has done in the
   past.  Also generic (?)

 -> Mulithread this.  (necessary to make the next option fairly
   simple) This may require taking mutexes before doing UI-type stuff,
   so the window doesn't get yanked out from under us!  Probably best
   not to encode this into the inlines in the header; instead, make
   get_lock() and release_lock() routines in the vscreen class which
   users must call when doing curses calls or modifying the window
   variable.

 -> Allow the user to examine and modify the list of packages to be upgraded
   *while* a download and upgrade are progressing.  That is, let them switch
   from the download and unmark or mark packages and have said packages
   dynamically queued for download, or let them unmark packages from within the
   download screen.  It would also be nice to have progress indicators within
   the main tree for packages that are downloading, and a master indicator (in
   the status or header line?)
     This might not be possible without modifications to the core APT code,
   and Jason has indicated that such modifications are unlikely. :-(

 -> Embed an interface to bugs.debian.org .  Very cool idea, could be tricky
   to implement due to undocumented Web page/LDAP database formats.


     The following are (mostly!) insane ideas that, as one person put it,
   border on 'world domination'.  However, some of the (simpler) items
   originally in this list have actually been implemented!  Be afraid, be very
   afraid..

 -> Integrate debconf support -- make debconf just another vs_treeitem, and
   add debconf-frontend vscreens.

 -> Mouse support (actually easier than you might think)

 -> Assimilate Debian menu system!  That is, allow a user or root to view and
   edit the current Debian menus.

 -> Insert plumbing.

 -- Daniel Burrows <dburrows@debian.org>
