2000-06-11 01:06:53 +02: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 22:07:50 +01:00
|
|
|
curses.initscr()
|
2000-06-11 01:06:53 +02:00
|
|
|
...
|
2004-07-18 08:16:08 +02:00
|
|
|
|
2000-06-11 01:06:53 +02: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 17:23:06 +01: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 09:18:30 +01:00
|
|
|
import sys as _sys
|
2000-06-11 01:06:53 +02:00
|
|
|
|
2000-06-27 01:54:03 +02: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 17:23:06 +01: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 09:18:30 +01:00
|
|
|
setupterm(term=_os.environ.get("TERM", "unknown"),
|
|
|
|
fd=_sys.__stdout__.fileno())
|
2000-06-27 01:54:03 +02: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 08:16:08 +02:00
|
|
|
|
2000-06-27 01:54:03 +02:00
|
|
|
return stdscr
|
2000-06-11 01:06:53 +02:00
|
|
|
|
2001-04-05 18:08:41 +02: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 08:16:08 +02:00
|
|
|
|
2001-04-05 18:08:41 +02: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 08:16:08 +02:00
|
|
|
return retval
|
2001-04-05 18:08:41 +02:00
|
|
|
|
2000-08-01 03:21:11 +02:00
|
|
|
# Import Python has_key() implementation if _curses doesn't contain has_key()
|
|
|
|
|
|
|
|
try:
|
|
|
|
has_key
|
|
|
|
except NameError:
|
2024-06-13 16:14:50 +02:00
|
|
|
from .has_key import has_key # noqa: F401
|
2011-06-19 02:21:09 +02: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.
|
|
|
|
|
2019-06-05 17:22:31 +02:00
|
|
|
def wrapper(func, /, *args, **kwds):
|
2011-06-19 02:21:09 +02: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().
|
|
|
|
"""
|
|
|
|
|
|
|
|
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()
|