                                   TODO

  Obviously, aptitude is very unfinished.  Here's a sketchy todo list in
approximate order of importance.  Note that some of these might take a
long, long time to get done, due to their complex nature.

  Simple things:

 -> Allow the user to target a particular release or version for installation.
   Allow stable and unstable to co-exist in /etc/apt/sources.list, tracking
   stable unless explicitly asked not to.

    This really, really belongs in libapt, and I believe it's on the TODO
   there.  But with the persistent state info I added, it could easily be added
   at the aptitude level as well.  (note that removing aptitude's persistent
   state might be a good idea..)

 -> More stuff, no time to list it.

  Harder things:

 -> Write a vtxxx emulator using the vscreen class, to run dpkg (and debconf,
   for the time being -- see below) inside.
      (they said I was mad, but they were just the voices in my head so I
       ignored them ;-) )

 -> Add sort policies (one sort policy for each group policy?
   One terminal sort policy?  Dunno..)

 -> Work out how to trap the set of package states which changed as a result
   of a user action.  That is, what got selected as a result of the last
   selection?  Perhaps present this, along with some alternative choices, to
   the user for confirmation/modification.  Note that the depends tree and
   items are probably *incredibly* useful here!

 -> Undo support.  No-one else has it.  I don't know why.  Simple once the
   above is done.  Probably should be implemented generically, independent of
   apt code.

 -> 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 (?)

 -> Should searching be rethunk?  Dunno.

 -> Mulithread this; make each vs_screen a separate thread.  (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.

 -> Add a vscreen type (or derive appropriate classes from vs_treeitem) which
   allows the user to examine and change program options.

 -> 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. :-(

 -> Split-screen modes.  Would this really help anything?  I'm doubtful..

                       And now for some totally insane ideas:

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

 -> Add a pager to view changelogs, copyright info, etc either after
   installation or as downloads progress.

 -> Mouse support (actually easier than you might think, minor special-casing
   for splitscreens)

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

 -> Add a Tetris game.

 -> Insert plumbing.

   That's all folks.  Enjoy what's there, pine over what isn't yet -- or cause
it to be there.  Whatever :)

 -- Daniel Burrows <Daniel_Burrows@brown.edu>