| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  | """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 | 
					
						
							| 
									
										
										
										
											2012-12-29 23:07:50 +02:00
										 |  |  |    curses.initscr() | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  |    ... | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from _curses import * | 
					
						
							| 
									
										
											  
											
												Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60849,60852-60854,60856-60859,60861-60870,60874-60875,60880-60881,60886,60888-60890,60892,60894-60898,60900,60902-60906,60908,60911-60917,60919-60920,60922,60926,60929-60931,60933-60935,60937,60939-60941,60943-60954,60959-60961,60963-60964,60966-60967,60971,60977,60979-60989 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60980 | georg.brandl | 2008-02-23 16:02:28 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1492: allow overriding BaseHTTPServer's content type for error messages.
........
  r60982 | georg.brandl | 2008-02-23 16:06:25 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2165: fix test_logging failure on some machines.
........
  r60983 | facundo.batista | 2008-02-23 16:07:35 +0100 (Sat, 23 Feb 2008) | 6 lines
  Issue 1089358.  Adds the siginterrupt() function, that is just a
  wrapper around the system call with the same name.  Also added
  test cases, doc changes and NEWS entry. Thanks Jason and Ralf
  Schmitt.
........
  r60984 | georg.brandl | 2008-02-23 16:11:18 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2067: file.__exit__() now calls subclasses' close() method.
........
  r60985 | georg.brandl | 2008-02-23 16:19:54 +0100 (Sat, 23 Feb 2008) | 2 lines
  More difflib examples. Written for GHOP by Josip Dzolonga.
........
  r60987 | andrew.kuchling | 2008-02-23 16:41:51 +0100 (Sat, 23 Feb 2008) | 1 line
  #2072: correct documentation for .rpc_paths
........
  r60988 | georg.brandl | 2008-02-23 16:43:48 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2161: Fix opcode name.
........
  r60989 | andrew.kuchling | 2008-02-23 16:49:35 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1119331: ncurses will just call exit() if the terminal name isn't found.
  Call setupterm() first so that we get a Python exception instead of just existing.
........
											
										 
											2008-02-23 16:23:06 +00:00
										 |  |  | import os as _os | 
					
						
							| 
									
										
											  
											
												Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61064,61066-61080 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r61063 | andrew.kuchling | 2008-02-25 17:29:19 +0100 (Mon, 25 Feb 2008) | 1 line
  Move .setupterm() output so that we don't try to call endwin() if it fails
........
  r61064 | andrew.kuchling | 2008-02-25 17:29:58 +0100 (Mon, 25 Feb 2008) | 1 line
  Use file descriptor for real stdout
........
  r61067 | facundo.batista | 2008-02-25 19:06:00 +0100 (Mon, 25 Feb 2008) | 4 lines
  Issue 2117.  Update compiler module to handle class decorators.
  Thanks Thomas Herve
........
  r61069 | georg.brandl | 2008-02-25 21:17:56 +0100 (Mon, 25 Feb 2008) | 2 lines
  Rename sphinx.addons to sphinx.ext.
........
  r61071 | georg.brandl | 2008-02-25 21:20:45 +0100 (Mon, 25 Feb 2008) | 2 lines
  Revert r61029.
........
  r61072 | facundo.batista | 2008-02-25 23:33:55 +0100 (Mon, 25 Feb 2008) | 4 lines
  Issue 2168. gdbm and dbm needs to be iterable; this fixes a
  failure in the shelve module.  Thanks Thomas Herve.
........
  r61073 | raymond.hettinger | 2008-02-25 23:42:32 +0100 (Mon, 25 Feb 2008) | 1 line
  Make sure the itertools filter functions give the same performance for func=bool as func=None.
........
  r61074 | raymond.hettinger | 2008-02-26 00:17:41 +0100 (Tue, 26 Feb 2008) | 1 line
  Revert part of r60927 which made invalid assumptions about the API offered by db modules.
........
  r61075 | facundo.batista | 2008-02-26 00:46:02 +0100 (Tue, 26 Feb 2008) | 3 lines
  Coerced PyBool_Type to be able to compare it.
........
  r61076 | raymond.hettinger | 2008-02-26 03:46:54 +0100 (Tue, 26 Feb 2008) | 1 line
  Docs for itertools.combinations().  Implementation in forthcoming checkin.
........
  r61077 | neal.norwitz | 2008-02-26 05:50:37 +0100 (Tue, 26 Feb 2008) | 3 lines
  Don't use a hard coded port.  This test could hang/fail if the port is in use.
  Speed this test up by avoiding a sleep and using the event.
........
  r61078 | neal.norwitz | 2008-02-26 06:12:50 +0100 (Tue, 26 Feb 2008) | 1 line
  Whitespace normalization
........
  r61079 | neal.norwitz | 2008-02-26 06:23:51 +0100 (Tue, 26 Feb 2008) | 1 line
  Whitespace normalization
........
  r61080 | georg.brandl | 2008-02-26 07:40:10 +0100 (Tue, 26 Feb 2008) | 2 lines
  Banish tab.
........
											
										 
											2008-02-26 08:18:30 +00:00
										 |  |  | import sys as _sys | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-26 23:54:03 +00:00
										 |  |  | # Some constants, most notably the ACS_* ones, are only added to the C | 
					
						
							|  |  |  | # _curses module's dictionary after initscr() is called.  (Some | 
					
						
							|  |  |  | # versions of SGI's curses don't define values for those constants | 
					
						
							|  |  |  | # until initscr() has been called.)  This wrapper function calls the | 
					
						
							|  |  |  | # underlying C initscr(), and then copies the constants from the | 
					
						
							|  |  |  | # _curses module to the curses package's dictionary.  Don't do 'from | 
					
						
							|  |  |  | # curses import *' if you'll be needing the ACS_* constants. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def initscr(): | 
					
						
							|  |  |  |     import _curses, curses | 
					
						
							| 
									
										
											  
											
												Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60849,60852-60854,60856-60859,60861-60870,60874-60875,60880-60881,60886,60888-60890,60892,60894-60898,60900,60902-60906,60908,60911-60917,60919-60920,60922,60926,60929-60931,60933-60935,60937,60939-60941,60943-60954,60959-60961,60963-60964,60966-60967,60971,60977,60979-60989 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r60980 | georg.brandl | 2008-02-23 16:02:28 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1492: allow overriding BaseHTTPServer's content type for error messages.
........
  r60982 | georg.brandl | 2008-02-23 16:06:25 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2165: fix test_logging failure on some machines.
........
  r60983 | facundo.batista | 2008-02-23 16:07:35 +0100 (Sat, 23 Feb 2008) | 6 lines
  Issue 1089358.  Adds the siginterrupt() function, that is just a
  wrapper around the system call with the same name.  Also added
  test cases, doc changes and NEWS entry. Thanks Jason and Ralf
  Schmitt.
........
  r60984 | georg.brandl | 2008-02-23 16:11:18 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2067: file.__exit__() now calls subclasses' close() method.
........
  r60985 | georg.brandl | 2008-02-23 16:19:54 +0100 (Sat, 23 Feb 2008) | 2 lines
  More difflib examples. Written for GHOP by Josip Dzolonga.
........
  r60987 | andrew.kuchling | 2008-02-23 16:41:51 +0100 (Sat, 23 Feb 2008) | 1 line
  #2072: correct documentation for .rpc_paths
........
  r60988 | georg.brandl | 2008-02-23 16:43:48 +0100 (Sat, 23 Feb 2008) | 2 lines
  #2161: Fix opcode name.
........
  r60989 | andrew.kuchling | 2008-02-23 16:49:35 +0100 (Sat, 23 Feb 2008) | 2 lines
  #1119331: ncurses will just call exit() if the terminal name isn't found.
  Call setupterm() first so that we get a Python exception instead of just existing.
........
											
										 
											2008-02-23 16:23:06 +00:00
										 |  |  |     # we call setupterm() here because it raises an error | 
					
						
							|  |  |  |     # instead of calling exit() in error cases. | 
					
						
							| 
									
										
											  
											
												Merged revisions 61038,61042-61045,61047,61050,61053,61055-61056,61061-61064,61066-61080 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
  r61063 | andrew.kuchling | 2008-02-25 17:29:19 +0100 (Mon, 25 Feb 2008) | 1 line
  Move .setupterm() output so that we don't try to call endwin() if it fails
........
  r61064 | andrew.kuchling | 2008-02-25 17:29:58 +0100 (Mon, 25 Feb 2008) | 1 line
  Use file descriptor for real stdout
........
  r61067 | facundo.batista | 2008-02-25 19:06:00 +0100 (Mon, 25 Feb 2008) | 4 lines
  Issue 2117.  Update compiler module to handle class decorators.
  Thanks Thomas Herve
........
  r61069 | georg.brandl | 2008-02-25 21:17:56 +0100 (Mon, 25 Feb 2008) | 2 lines
  Rename sphinx.addons to sphinx.ext.
........
  r61071 | georg.brandl | 2008-02-25 21:20:45 +0100 (Mon, 25 Feb 2008) | 2 lines
  Revert r61029.
........
  r61072 | facundo.batista | 2008-02-25 23:33:55 +0100 (Mon, 25 Feb 2008) | 4 lines
  Issue 2168. gdbm and dbm needs to be iterable; this fixes a
  failure in the shelve module.  Thanks Thomas Herve.
........
  r61073 | raymond.hettinger | 2008-02-25 23:42:32 +0100 (Mon, 25 Feb 2008) | 1 line
  Make sure the itertools filter functions give the same performance for func=bool as func=None.
........
  r61074 | raymond.hettinger | 2008-02-26 00:17:41 +0100 (Tue, 26 Feb 2008) | 1 line
  Revert part of r60927 which made invalid assumptions about the API offered by db modules.
........
  r61075 | facundo.batista | 2008-02-26 00:46:02 +0100 (Tue, 26 Feb 2008) | 3 lines
  Coerced PyBool_Type to be able to compare it.
........
  r61076 | raymond.hettinger | 2008-02-26 03:46:54 +0100 (Tue, 26 Feb 2008) | 1 line
  Docs for itertools.combinations().  Implementation in forthcoming checkin.
........
  r61077 | neal.norwitz | 2008-02-26 05:50:37 +0100 (Tue, 26 Feb 2008) | 3 lines
  Don't use a hard coded port.  This test could hang/fail if the port is in use.
  Speed this test up by avoiding a sleep and using the event.
........
  r61078 | neal.norwitz | 2008-02-26 06:12:50 +0100 (Tue, 26 Feb 2008) | 1 line
  Whitespace normalization
........
  r61079 | neal.norwitz | 2008-02-26 06:23:51 +0100 (Tue, 26 Feb 2008) | 1 line
  Whitespace normalization
........
  r61080 | georg.brandl | 2008-02-26 07:40:10 +0100 (Tue, 26 Feb 2008) | 2 lines
  Banish tab.
........
											
										 
											2008-02-26 08:18:30 +00:00
										 |  |  |     setupterm(term=_os.environ.get("TERM", "unknown"), | 
					
						
							|  |  |  |               fd=_sys.__stdout__.fileno()) | 
					
						
							| 
									
										
										
										
											2000-06-26 23:54:03 +00:00
										 |  |  |     stdscr = _curses.initscr() | 
					
						
							|  |  |  |     for key, value in _curses.__dict__.items(): | 
					
						
							|  |  |  |         if key[0:4] == 'ACS_' or key in ('LINES', 'COLS'): | 
					
						
							|  |  |  |             setattr(curses, key, value) | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-06-26 23:54:03 +00:00
										 |  |  |     return stdscr | 
					
						
							| 
									
										
										
										
											2000-06-10 23:06:53 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-05 16:08:41 +00:00
										 |  |  | # This is a similar wrapper for start_color(), which adds the COLORS and | 
					
						
							|  |  |  | # COLOR_PAIRS variables which are only available after start_color() is | 
					
						
							|  |  |  | # called. | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2001-04-05 16:08:41 +00:00
										 |  |  | def start_color(): | 
					
						
							|  |  |  |     import _curses, curses | 
					
						
							|  |  |  |     retval = _curses.start_color() | 
					
						
							|  |  |  |     if hasattr(_curses, 'COLORS'): | 
					
						
							|  |  |  |         curses.COLORS = _curses.COLORS | 
					
						
							|  |  |  |     if hasattr(_curses, 'COLOR_PAIRS'): | 
					
						
							|  |  |  |         curses.COLOR_PAIRS = _curses.COLOR_PAIRS | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     return retval | 
					
						
							| 
									
										
										
										
											2001-04-05 16:08:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-01 01:21:11 +00:00
										 |  |  | # Import Python has_key() implementation if _curses doesn't contain has_key() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | try: | 
					
						
							|  |  |  |     has_key | 
					
						
							|  |  |  | except NameError: | 
					
						
							| 
									
										
										
										
											2011-11-29 00:03:50 +01:00
										 |  |  |     from .has_key import has_key | 
					
						
							| 
									
										
										
										
											2011-06-18 20:21:09 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Wrapper for the entire curses-based application.  Runs a 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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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(). | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         # Initialize curses | 
					
						
							|  |  |  |         stdscr = initscr() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Turn off echoing of keys, and enter cbreak mode, | 
					
						
							|  |  |  |         # where no buffering is performed on keyboard input | 
					
						
							|  |  |  |         noecho() | 
					
						
							|  |  |  |         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: | 
					
						
							|  |  |  |             start_color() | 
					
						
							|  |  |  |         except: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return func(stdscr, *args, **kwds) | 
					
						
							|  |  |  |     finally: | 
					
						
							|  |  |  |         # Set everything back to normal | 
					
						
							|  |  |  |         if 'stdscr' in locals(): | 
					
						
							|  |  |  |             stdscr.keypad(0) | 
					
						
							|  |  |  |             echo() | 
					
						
							|  |  |  |             nocbreak() | 
					
						
							|  |  |  |             endwin() |