| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  | """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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-07 15:18:07 +00:00
										 |  |  | def wrapper(func, *args, **kwds): | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  |     """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(). | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2002-09-29 00:25:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-27 00:50:40 +00:00
										 |  |  |     res = None | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2002-09-29 00:25:51 +00:00
										 |  |  |         # Initialize curses | 
					
						
							| 
									
										
										
										
											2000-07-07 21:02:22 +00:00
										 |  |  |         stdscr=curses.initscr() | 
					
						
							| 
									
										
										
										
											2002-09-29 00:25:51 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Turn off echoing of keys, and enter cbreak mode, | 
					
						
							|  |  |  |         # where no buffering is performed on keyboard input | 
					
						
							| 
									
										
										
										
											2000-07-07 21:02:22 +00:00
										 |  |  |         curses.noecho() | 
					
						
							|  |  |  |         curses.cbreak() | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-09-29 00:25:51 +00:00
										 |  |  |         # 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 | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  |         stdscr.keypad(1) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-09 21:11:07 +00:00
										 |  |  |         # 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-08-07 15:20:15 +00:00
										 |  |  |         return func(stdscr, *args, **kwds) | 
					
						
							| 
									
										
										
										
											2004-08-07 15:18:07 +00:00
										 |  |  |     finally: | 
					
						
							| 
									
										
										
										
											2002-09-29 00:25:51 +00:00
										 |  |  |         # Set everything back to normal | 
					
						
							| 
									
										
										
										
											2000-07-07 21:02:22 +00:00
										 |  |  |         stdscr.keypad(0) | 
					
						
							|  |  |  |         curses.echo() | 
					
						
							|  |  |  |         curses.nocbreak() | 
					
						
							| 
									
										
										
										
											2004-08-07 15:18:07 +00:00
										 |  |  |         curses.endwin() |