diff options
author | Andrew M. Kuchling <amk@amk.ca> | 2000-06-10 23:06:53 (GMT) |
---|---|---|
committer | Andrew M. Kuchling <amk@amk.ca> | 2000-06-10 23:06:53 (GMT) |
commit | d0939fa592ea5d4e3c627cc2355072e90acd2459 (patch) | |
tree | b2daa0189222d0391a0b090bf3d4690dc687d916 /Lib/curses | |
parent | c0328f014bd3563d5bc00d8d434fe2749872247c (diff) | |
download | cpython-d0939fa592ea5d4e3c627cc2355072e90acd2459.zip cpython-d0939fa592ea5d4e3c627cc2355072e90acd2459.tar.gz cpython-d0939fa592ea5d4e3c627cc2355072e90acd2459.tar.bz2 |
Add contents of curses package
Diffstat (limited to 'Lib/curses')
-rw-r--r-- | Lib/curses/__init__.py | 18 | ||||
-rw-r--r-- | Lib/curses/wrapper.py | 50 |
2 files changed, 68 insertions, 0 deletions
diff --git a/Lib/curses/__init__.py b/Lib/curses/__init__.py new file mode 100644 index 0000000..8e8f7d8 --- /dev/null +++ b/Lib/curses/__init__.py @@ -0,0 +1,18 @@ +"""curses + +The main package for curses support for Python. Normally used by importing +the package, and perhaps a particular module inside it. + + import curses + from curses import textpad + curses.initwin() + ... + +""" + +__revision__ = "$Id$" + +from _curses import * +from curses.wrapper import wrapper + + diff --git a/Lib/curses/wrapper.py b/Lib/curses/wrapper.py new file mode 100644 index 0000000..1de17ee --- /dev/null +++ b/Lib/curses/wrapper.py @@ -0,0 +1,50 @@ +"""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 sys, curses + +def wrapper(func, *rest): + """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) + + res = apply(func, (stdscr,) + rest) + except: + # In the event of an error, restore the terminal + # to a sane state. + stdscr.keypad(0) + curses.echo() ; curses.nocbreak() + curses.endwin() + # Pass the exception upwards + (exc_type, exc_value, exc_traceback) = sys.exc_info() + raise exc_type, exc_value, exc_traceback + else: + # Set everything back to normal + stdscr.keypad(0) + curses.echo() ; curses.nocbreak() + curses.endwin() # Terminate curses + + return res + |