• Christian Heimes's avatar
    Merged revisions 60990-61002 via svnmerge from · 05e8be17
    Christian Heimes yazdı
    svn+ssh://pythondev@svn.python.org/python/trunk
    
    ........
      r60990 | eric.smith | 2008-02-23 17:05:26 +0100 (Sat, 23 Feb 2008) | 1 line
    
      Removed duplicate Py_CHARMASK define.  It's already defined in Python.h.
    ........
      r60991 | andrew.kuchling | 2008-02-23 17:23:05 +0100 (Sat, 23 Feb 2008) | 4 lines
    
      #1330538: Improve comparison of xmlrpclib.DateTime and datetime instances.
      Remove automatic handling of datetime.date and datetime.time.
      This breaks backward compatibility, but python-dev discussion was strongly
      against this automatic conversion; see the bug for a link.
    ........
      r60994 | andrew.kuchling | 2008-02-23 17:39:43 +0100 (Sat, 23 Feb 2008) | 1 line
    
      #835521: Add index entries for various pickle-protocol methods and attributes
    ........
      r60995 | andrew.kuchling | 2008-02-23 18:10:46 +0100 (Sat, 23 Feb 2008) | 2 lines
    
      #1433694: minidom's .normalize() failed to set .nextSibling for last element.
      Fix by Malte Helmert
    ........
      r61000 | christian.heimes | 2008-02-23 18:40:11 +0100 (Sat, 23 Feb 2008) | 1 line
    
      Patch #2167 from calvin: Remove unused imports
    ........
      r61001 | christian.heimes | 2008-02-23 18:42:31 +0100 (Sat, 23 Feb 2008) | 1 line
    
      Patch #1957: syslogmodule: Release GIL when calling syslog(3)
    ........
      r61002 | christian.heimes | 2008-02-23 18:52:07 +0100 (Sat, 23 Feb 2008) | 2 lines
    
      Issue #2051 and patch from Alexander Belopolsky:
      Permission for pyc and pyo files are inherited from the py file.
    ........
    05e8be17
wrapper.py 1.61 KB
"""curses.wrapper

Contains one function, wrapper(), which runs another function which
should be the rest of your curses-based application.  If the
application raises an exception, wrapper() will restore the terminal
to a sane state so you can read the resulting traceback.

"""

import curses

def wrapper(func, *args, **kwds):
    """Wrapper function that initializes curses and calls another function,
    restoring normal keyboard/screen behavior on error.
    The callable object 'func' is then passed the main window 'stdscr'
    as its first argument, followed by any other arguments passed to
    wrapper().
    """

    res = None
    try:
        # Initialize curses
        stdscr=curses.initscr()

        # Turn off echoing of keys, and enter cbreak mode,
        # where no buffering is performed on keyboard input
        curses.noecho()
        curses.cbreak()

        # In keypad mode, escape sequences for special keys
        # (like the cursor keys) will be interpreted and
        # a special value like curses.KEY_LEFT will be returned
        stdscr.keypad(1)

        # Start color, too.  Harmless if the terminal doesn't have
        # color; user can test with has_color() later on.  The try/catch
        # works around a minor bit of over-conscientiousness in the curses
        # module -- the error return from C start_color() is ignorable.
        try:
            curses.start_color()
        except:
            pass

        return func(stdscr, *args, **kwds)
    finally:
        # Set everything back to normal
        stdscr.keypad(0)
        curses.echo()
        curses.nocbreak()
        curses.endwin()