1d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling"""curses
2d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling
3d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. KuchlingThe main package for curses support for Python.  Normally used by importing
4d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchlingthe package, and perhaps a particular module inside it.
5d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling
6d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling   import curses
7d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling   from curses import textpad
814e27d896f5d07eb4f24aee1f76f3cafd66c2b2bAndrew Svetlov   curses.initscr()
9d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling   ...
10182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
11d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling"""
12d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling
13d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling__revision__ = "$Id$"
14d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling
15d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchlingfrom _curses import *
16d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchlingfrom curses.wrapper import wrapper
17322349e31b3c1472543428382b84a32d2fc2dfc7Andrew M. Kuchlingimport os as _os
18734451a4bcc900fd9d159b0c6d4fcdca17cc31bbAndrew M. Kuchlingimport sys as _sys
19d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling
20289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling# Some constants, most notably the ACS_* ones, are only added to the C
21289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling# _curses module's dictionary after initscr() is called.  (Some
22289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling# versions of SGI's curses don't define values for those constants
23289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling# until initscr() has been called.)  This wrapper function calls the
24289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling# underlying C initscr(), and then copies the constants from the
25289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling# _curses module to the curses package's dictionary.  Don't do 'from
26289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling# curses import *' if you'll be needing the ACS_* constants.
27289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling
28289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchlingdef initscr():
29289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling    import _curses, curses
30322349e31b3c1472543428382b84a32d2fc2dfc7Andrew M. Kuchling    # we call setupterm() here because it raises an error
31322349e31b3c1472543428382b84a32d2fc2dfc7Andrew M. Kuchling    # instead of calling exit() in error cases.
32734451a4bcc900fd9d159b0c6d4fcdca17cc31bbAndrew M. Kuchling    setupterm(term=_os.environ.get("TERM", "unknown"),
33734451a4bcc900fd9d159b0c6d4fcdca17cc31bbAndrew M. Kuchling              fd=_sys.__stdout__.fileno())
34289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling    stdscr = _curses.initscr()
35289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling    for key, value in _curses.__dict__.items():
36289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling        if key[0:4] == 'ACS_' or key in ('LINES', 'COLS'):
37289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling            setattr(curses, key, value)
38182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
39289d9d422707d4ae3ab00e658c262d6dd3f75963Andrew M. Kuchling    return stdscr
40d0939fa592ea5d4e3c627cc2355072e90acd2459Andrew M. Kuchling
4137f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling# This is a similar wrapper for start_color(), which adds the COLORS and
4237f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling# COLOR_PAIRS variables which are only available after start_color() is
4337f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling# called.
44182b5aca27d376b08a2904bed42b751496f932f3Tim Peters
4537f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchlingdef start_color():
4637f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling    import _curses, curses
4737f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling    retval = _curses.start_color()
4837f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling    if hasattr(_curses, 'COLORS'):
4937f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling        curses.COLORS = _curses.COLORS
5037f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling    if hasattr(_curses, 'COLOR_PAIRS'):
5137f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling        curses.COLOR_PAIRS = _curses.COLOR_PAIRS
52182b5aca27d376b08a2904bed42b751496f932f3Tim Peters    return retval
5337f026381167db43ab3ccce59bfe26a098eeac56Andrew M. Kuchling
54b45bd325b5e816a939c78fc4a3f421cf65a9dc19Andrew M. Kuchling# Import Python has_key() implementation if _curses doesn't contain has_key()
55b45bd325b5e816a939c78fc4a3f421cf65a9dc19Andrew M. Kuchling
56b45bd325b5e816a939c78fc4a3f421cf65a9dc19Andrew M. Kuchlingtry:
57b45bd325b5e816a939c78fc4a3f421cf65a9dc19Andrew M. Kuchling    has_key
58b45bd325b5e816a939c78fc4a3f421cf65a9dc19Andrew M. Kuchlingexcept NameError:
59b45bd325b5e816a939c78fc4a3f421cf65a9dc19Andrew M. Kuchling    from has_key import has_key
60