PyNcurses now requires the Python Distutils to build and install, they can be obtained from the pyncurses ftp site. The INSTALL file included with PyNcurses can be used as installation instructions for both PyNncurses and the Python Distutils. PyNcurses now includes the C source code generated by SWIG, so SWIG is no longer required to build the distribution. If you do have SWIG there is now a makefile included in the ncurses directory which will regenerate C source files for any interface files that have been altered. This will have to be done before running setup.py if you alter any interface files. If you get a group of "conflicting types for `*'" errors run the following command: debian/apply-patch.sh This will apply a patch fixing the problem. PyNcurses is now complete in the sense that all classes can be initialized. In addition the curses module has been tested to make sure it is usable (for me.) If anyone can tell me what places it is not usable for them I will do my best to fix them (especially if you have a fix ready for me to apply :) ) My email address is hgebel@inet.net . Rudimentary examples can be found in the examples/ directory . I will gladly accept any other samples provided. CVS, a mailing list, and a bug reporting system can be found on the Source Forge project page, a link to which can be found near the bottom of http://pyncurses.sourceforge.net . There are no user pointer functions in this library, if you wish to store date about an object in that object it is easily accomplished in Python: # store user data in PANEL: sample = [] sample.append(PANEL(10,10,5,5)) sample[-1].about = "Keep me" sample.append(PANEL(10,20,0,0)) sample[-1].about = "Get rid of me" sample.append(PANEL(5,15,10,10)) sample[-1].about = "Keep me" for index in xrange(len(sample) - 1, -1, -1): if sample[index].about == "Get rid of me": del sample[index] Note that all objects contain an attribute called user_data (initialized to None) which is intended to be used to store this sort of data. This is to help prevent NameErrors which could otherwise be caused if you only set an attribute on a few objects. curses: no delwin function or method, called automatically when WINDOW class instance is garbage collected. no functions which use SCREEN pointers no functions which use FILE pointers no functions documented on the curs_terminfo manual page few functions implemented as macros. callback functions except for field validation in libform. No mouse support. Note that some of these functions are in the _curses module if they are required If you use any of these often notify me so I can move them into the curses module where they will be more convenient. the ACS constants can be accessed with functions ie to access ACS_LLCORNER call ACS_LLCORNER() My programs do not use color, I would appreciate it if someone who does can tell me if this module has sufficient color support. panel: panel imports all names in the curses module, so it is not necessary to import both curses and panel. panel.doupdate() automatically calls panel.update_panels() it is not necessary to call both. PANEL classes include a WINDOW object, which is deleted when panel is garbage collected. panel_above and panel_below take as an argument a list of PANELs and return a reference to the appropriate PANEL. If you wish to use these functions keep your PANELs in a list, take care that when you want to destroy a panel you remove all referances to it. All support for mixing WINDOWs and PANELs has been removed as of version 0.0b3 . I felt that the functions involved, in addition to making the library hard to maintain, where unnecessary and needlessly confusing to people trying to use the library. If I was wrong and this capability is necessary for some reason you will have to tell me. new functions get_top and get_bottom take a list of PANELs and return a reference to the appropriate panel. I don't use libpanel, so it is up to users to tell me about places where it is not effective. menu: MENU.current_item() no longer requires that a list of ITEMs be provided as an argument, however it still support being called that way for compatability. menu imports all names from panel. It adds a module level variable called "_update_mode" whose default value is "curses" . If it's value is "panel" then doupdate will call update_panels, if it is "curses" then it will not. The function menu_set_update_mode() and menu_get_update_mode() have been provided to access this variable. Note that the default value of _update_mode was 'panel' in previous releases, programs which assume panel is the default mode will have to be altered. form: form also has and _update_mode variable, it can be accessed with form_set_update_mode() and form_get_update_mode. form has a class LABEL that represents fields to be used as labels, it's arguments are different than the FIELD class, read the source for documentation. form now supports field type validation. The SWIG pointer manipulation functions can be found in _curses .