mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """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, *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()
 | 
