1999-06-21 21:13:09 +00:00
|
|
|
\section{\module{curses} ---
|
|
|
|
Terminal independant console handling}
|
|
|
|
|
|
|
|
\declaremodule{extension}{curses}
|
|
|
|
\sectionauthor{Moshe Zadka}{mzadka@geocities.com}
|
|
|
|
\modulesynopsis{An interface to the curses library.}
|
|
|
|
|
|
|
|
The \module{curses} module provides an interface to the curses \UNIX{}
|
|
|
|
library, the de-facto standard for portable advanced terminal
|
|
|
|
handling.
|
|
|
|
|
|
|
|
While curses is most widely used in the \UNIX{} environment, versions
|
|
|
|
are available for DOS, OS/2, and possibly other systems as well. The
|
|
|
|
extension module has not been tested with all available versions of
|
|
|
|
curses.
|
|
|
|
|
|
|
|
\begin{seealso}
|
|
|
|
\seetext{Tutorial material on using curses with Python is available
|
1999-11-10 16:21:37 +00:00
|
|
|
on the Python Web site as Andrew Kuchling's
|
|
|
|
\citetitle[http://www.python.org/doc/howto/curses/curses.html]{Curses
|
1999-06-21 21:13:09 +00:00
|
|
|
Programming with Python}, at
|
|
|
|
\url{http://www.python.org/doc/howto/curses/curses.html}.}
|
|
|
|
\end{seealso}
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{Constants and Functions \label{curses-functions}}
|
|
|
|
|
|
|
|
The \module{curses} module defines the following data members:
|
|
|
|
|
|
|
|
\begin{datadesc}{version}
|
|
|
|
A string representing the current version of the module.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{A_NORMAL}
|
|
|
|
Normal attribute.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{A_STANDOUT}
|
|
|
|
Standout mode.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{A_UNDERLINE}
|
|
|
|
Underline mode.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{A_BLINK}
|
|
|
|
Blink mode.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{A_DIM}
|
|
|
|
Dim mode.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{A_BOLD}
|
|
|
|
Bold mode.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{A_ALTCHARSET}
|
|
|
|
Alternate character set mode.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{KEY_*}
|
|
|
|
Names for various keys. The exact names available are system dependant.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
\begin{datadesc}{ACS_*}
|
|
|
|
Names for various characters:
|
|
|
|
\constant{ACS_ULCORNER}, \constant{ACS_LLCORNER},
|
|
|
|
\constant{ACS_URCORNER}, \constant{ACS_LRCORNER}, \constant{ACS_RTEE},
|
|
|
|
\constant{ACS_LTEE}, \constant{ACS_BTEE}, \constant{ACS_TTEE},
|
|
|
|
\constant{ACS_HLINE}, \constant{ACS_VLINE}, \constant{ACS_PLUS},
|
|
|
|
\constant{ACS_S1}, \constant{ACS_S9}, \constant{ACS_DIAMOND},
|
|
|
|
\constant{ACS_CKBOARD}, \constant{ACS_DEGREE}, \constant{ACS_PLMINUS},
|
|
|
|
\constant{ACS_BULLET}, \constant{ACS_LARROW}, \constant{ACS_RARROW},
|
|
|
|
\constant{ACS_DARROW}.
|
|
|
|
|
|
|
|
\strong{Note:} These are available only after \function{initscr()} has
|
|
|
|
been called.
|
|
|
|
\end{datadesc}
|
|
|
|
|
|
|
|
The module \module{curses} defines the following exception:
|
|
|
|
\begin{excdesc}{error}
|
|
|
|
Curses function returned an error status.
|
|
|
|
\end{excdesc}
|
|
|
|
|
1999-06-23 17:28:01 +00:00
|
|
|
\strong{Note:} Whenever \var{x} or \var{y} arguments to a function
|
|
|
|
or a method are optional, they default to the current cursor location.
|
|
|
|
Whenever \var{attr} is optional, it defaults to \constant{A_NORMAL}.
|
|
|
|
|
1999-06-21 21:13:09 +00:00
|
|
|
The module \module{curses} defines the following functions:
|
|
|
|
|
|
|
|
\begin{funcdesc}{initscr}{}
|
|
|
|
Initialize the library. Returns a \class{WindowObject} which represents
|
|
|
|
the whole screen.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{endwin}{}
|
|
|
|
De-initialize the library, and return terminal to normal status.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{isendwin}{}
|
|
|
|
Returns true if \function{endwin()} has been called.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{doupdate}{}
|
|
|
|
Update the screen.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{newwin}{\optional{nlines, ncols,} begin_y, begin_x}
|
|
|
|
Return a new window, whose left-upper corner is at
|
|
|
|
\code{(\var{begin_y}, \var{begin_x})}, and whose height/width is
|
1999-06-23 17:28:01 +00:00
|
|
|
\var{nlines}/\var{ncols}.
|
|
|
|
|
|
|
|
By default, the window will extend from the
|
1999-06-21 21:13:09 +00:00
|
|
|
specified position to the lower right corner of the screen.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{beep}{}
|
|
|
|
Emit a short sound.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{flash}{}
|
|
|
|
Flash the screen.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{ungetch}{ch}
|
|
|
|
Push \var{ch} so the next \method{getch()} will return it; \var{ch} is
|
|
|
|
an integer specifying the character to be pushed.
|
|
|
|
\strong{Note:} only one \var{ch} can be pushed before \method{getch()}
|
|
|
|
is called.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{flushinp}{}
|
|
|
|
Flush all input buffers.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{cbreak}{}
|
|
|
|
Enter cbreak mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{nocbreak}{}
|
|
|
|
Leave cbreak mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{echo}{}
|
|
|
|
Enter echo mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{noecho}{}
|
|
|
|
Leave echo mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{nl}{}
|
|
|
|
Enter nl mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{nonl}{}
|
|
|
|
Leave nl mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{raw}{}
|
|
|
|
Enter raw mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{noraw}{}
|
|
|
|
Leave raw mode.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{meta}{yes}
|
|
|
|
If \var{yes} is 1, allow 8-bit characters. If \var{yes} is 0,
|
|
|
|
allow only 7-bit chars.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
\begin{funcdesc}{keyname}{k}
|
|
|
|
Return the name of the key numbered \var{k}.
|
|
|
|
\end{funcdesc}
|
|
|
|
|
|
|
|
|
|
|
|
\subsection{Window Objects \label{curses-window-objects}}
|
|
|
|
|
|
|
|
Window objects, as returned by \function{initscr()} and
|
|
|
|
\function{newwin()} above, have the
|
|
|
|
following methods:
|
|
|
|
|
|
|
|
\begin{methoddesc}{refresh}{}
|
1999-06-23 17:28:01 +00:00
|
|
|
Update the display immediately (sync actual screen with previous
|
|
|
|
drawing/deleting methods).
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{nooutrefresh}{}
|
|
|
|
Mark for refresh but wait.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{mvwin}{new_y, new_x}
|
1999-06-23 17:28:01 +00:00
|
|
|
Move the window so its upper-left corner is at \code{(\var{new_y}, \var{new_x})}.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{move}{new_y, new_x}
|
|
|
|
Move cursor to \code{(\var{new_y}, \var{new_x})}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
1999-06-23 17:28:01 +00:00
|
|
|
\begin{methoddesc}{subwin}{\optional{nlines, ncols,} begin_y, begin_y}
|
1999-06-21 21:13:09 +00:00
|
|
|
Return a sub-window, whose upper-left corner is at
|
|
|
|
\code{(\var{begin_y}, \var{begin_x})}, and whose width/height is
|
|
|
|
\var{ncols}/\var{nlines}.
|
1999-06-23 17:28:01 +00:00
|
|
|
|
|
|
|
By default, the sub-window will extend from the
|
|
|
|
specified position to the lower right corner of the window.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{addch}{\optional{y, x,} ch\optional{, attr}}
|
|
|
|
\strong{Note:} A \emph{character} means a C character (i.e., an
|
|
|
|
\ASCII{} code), rather then a Python character (a string of length 1).
|
|
|
|
(This note is true whenever the documentation mentions a character.)
|
|
|
|
|
|
|
|
Paint character \var{ch} at \code{(\var{y}, \var{x})} with attributes
|
|
|
|
\var{attr}, overwriting any character previously painter at that
|
|
|
|
location. By default, the character position and attributes are the
|
|
|
|
current settings for the window object.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{insch}{\optional{y, x,} ch\optional{, attr}}
|
|
|
|
Paint character \var{ch} at \code{(\var{y}, \var{x})} with attributes
|
|
|
|
\var{attr}, moving the line from position \var{x} right by one
|
|
|
|
character.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{delch}{\optional{x, y}}
|
1999-06-23 17:28:01 +00:00
|
|
|
Delete any character at \code{(\var{y}, \var{x})}.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{echochar}{ch\optional{, attr}}
|
|
|
|
Add character \var{ch} with attribute \var{attr}, and immediately
|
|
|
|
call \method{refresh}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{addstr}{\optional{y, x,} str\optional{, attr}}
|
1999-06-23 17:28:01 +00:00
|
|
|
Paint string \var{str} at \code{(\var{y}, \var{x})} with attributes
|
|
|
|
\var{attr}, overwriting anything previously on the display.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{attron}{attr}
|
1999-06-23 17:28:01 +00:00
|
|
|
Turn on attribute \var{attr}.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{attroff}{attr}
|
1999-06-23 17:28:01 +00:00
|
|
|
Turn off attribute \var{attr}.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{setattr}{attr}
|
1999-06-23 17:28:01 +00:00
|
|
|
Set the current attributes to \var{attr}.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{standend}{}
|
1999-06-23 17:28:01 +00:00
|
|
|
Turn off all attributes.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{standout}{}
|
|
|
|
Turn on attribute \var{A_STANDOUT}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
1999-06-23 17:28:01 +00:00
|
|
|
\begin{methoddesc}{border}{\optional{ls\optional{, rs\optional{, ts\optional{,
|
|
|
|
bs\optional{, tl\optional{, tr\optional{,
|
|
|
|
bl\optional{, br}}}}}}}}}
|
|
|
|
Draw a border around the edges of the window. Each parameter specifies
|
|
|
|
the character to use for a specific part of the border; see the table
|
|
|
|
below for more details. The characters must be specified as integers;
|
|
|
|
using one-character strings will cause \exception{TypeError} to be
|
|
|
|
raised.
|
|
|
|
|
|
|
|
\strong{Note:} A \code{0} value for any parameter will cause the
|
|
|
|
default character to be used for that parameter. Keyword parameters
|
|
|
|
can \emph{not} be used. The defaults are listed in this table:
|
|
|
|
|
|
|
|
\begin{tableiii}{l|l|l}{var}{Parameter}{Description}{Default value}
|
|
|
|
\lineiii{ls}{Left side}{\constant{ACS_VLINE}}
|
|
|
|
\lineiii{rs}{Right side}{\constant{ACS_VLINE}}
|
|
|
|
\lineiii{ts}{Top}{\constant{ACS_HLINE}}
|
|
|
|
\lineiii{bs}{Bottom}{\constant{ACS_HLINE}}
|
|
|
|
\lineiii{tl}{Upper-left corner}{\constant{ACS_ULCORNER}}
|
|
|
|
\lineiii{tr}{Upper-right corner}{\constant{ACS_URCORNER}}
|
|
|
|
\lineiii{bl}{Bottom-left corner}{\constant{ACS_BLCORNER}}
|
|
|
|
\lineiii{br}{Bottom-right corner}{\constant{ACS_BRCORNER}}
|
|
|
|
\end{tableiii}
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
1999-06-23 17:28:01 +00:00
|
|
|
\begin{methoddesc}{box}{\optional{vertch, horch}}
|
|
|
|
Similar to \method{border()}, but both \var{ls} and \var{rs} are
|
|
|
|
\var{vertch} and both \var{ts} and {bs} are \var{horch}. The default
|
|
|
|
corner characters are always used by this function.
|
1999-06-21 21:13:09 +00:00
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{hline}{\optional{y, x,} ch, n}
|
|
|
|
Display a horizontal line starting at \code{(\var{y}, \var{x})} with
|
|
|
|
length \var{n} consisting of the character \var{ch}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{vline}{\optional{y, x,} ch, n}
|
|
|
|
Display a vertical line starting at \code{(\var{y}, \var{x})} with
|
|
|
|
length \var{n} consisting of the character \var{ch}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{erase}{}
|
|
|
|
Clear the screen.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{deletln}{}
|
|
|
|
Delete the line under the cursor. All following lines are moved up
|
|
|
|
by 1 line.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{insertln}{}
|
|
|
|
Insert a blank line under the cursor. All following lines are moved
|
|
|
|
down by 1 line.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{getyx}{}
|
|
|
|
Return a tuple \code{(\var{y}, \var{x})} of current cursor position.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{getbegyx}{}
|
|
|
|
Return a tuple \code{(\var{y}, \var{x})} of co-ordinates of upper-left
|
|
|
|
corner.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{getmaxyx}{}
|
|
|
|
Return a tuple \code{(\var{y}, \var{x})} of the height and width of
|
|
|
|
the window.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{clear}{}
|
|
|
|
Like \method{erase()}, but also causes the whole screen to be repainted
|
|
|
|
upon next call to \method{refresh()}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{clrtobot}{}
|
|
|
|
Erase from cursor to the end of the screen: all lines below the cursor
|
|
|
|
are deleted, and then the equivalent of \method{clrtoeol()} is performed.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{clrtoeol}{}
|
|
|
|
Erase from cursor to the end of the line.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{scroll}{\optional{lines\code{ = 1}}}
|
|
|
|
Scroll the screen upward by \var{lines} lines.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{touchwin}{}
|
|
|
|
Pretend the whole window has been changed, for purposes of drawing
|
|
|
|
optimizations.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{touchline}{start, count}
|
|
|
|
Pretend \var{count} lines have been changed, starting with line
|
|
|
|
\var{start}.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{getch}{\optional{x, y}}
|
|
|
|
Get a character. Note that the integer returned does \emph{not} have to
|
|
|
|
be in \ASCII{} range: function keys, keypad keys and so on return numbers
|
|
|
|
higher then 256. In no-delay mode, an exception is raised if there is
|
|
|
|
no input.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{getstr}{\optional{x, y}}
|
|
|
|
Read a string from the user, with primitive line editing capacity.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{inch}{\optional{x, y}}
|
|
|
|
Return the character at the given position in the window. The bottom
|
|
|
|
8 bits are the character proper, and upper bits are the attributes.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{clearok}{yes}
|
|
|
|
If \var{yes} is 1, the next call to \method{refresh()}
|
|
|
|
will clear the screen completely.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{idlok}{yes}
|
|
|
|
If called with \var{yes} equal to 1, \module{curses} will try and use
|
|
|
|
hardware line editing facilities. Otherwise, line insertion/deletion
|
|
|
|
are disabled.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{leaveok}{yes}
|
|
|
|
If \var{yes} is 1,
|
|
|
|
cursor is left where it is, instead of being at ``cursor position.''
|
|
|
|
This reduces cursor movement where possible. If possible it will be made
|
|
|
|
invisible.
|
|
|
|
|
|
|
|
If \var{yes} is 0, cursor will always be at
|
|
|
|
``cursor position'' after an update.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{setscrreg}{top, bottom}
|
|
|
|
Set the scrolling region from line \var{top} to line \var{bottom}. All
|
|
|
|
scrolling actions will take place in this region.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{keypad}{yes}
|
|
|
|
If \var{yes} is 1, escape sequences generated by some keys (keypad,
|
|
|
|
function keys) will be interpreted by \module{curses}.
|
|
|
|
|
|
|
|
If \var{yes} is 0, escape sequences will be left as is in the input
|
|
|
|
stream.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{nodelay}{yes}
|
|
|
|
If \var{yes} is 1, \method{getch()} will be non-blocking.
|
|
|
|
\end{methoddesc}
|
|
|
|
|
|
|
|
\begin{methoddesc}{notimeout}{yes}
|
|
|
|
If \var{yes} is 1, escape sequences will not be timed out.
|
|
|
|
|
|
|
|
If \var{yes} is 0, after a few milliseconds, an escape sequence will
|
|
|
|
not be interpreted, and will be left in the input stream as is.
|
|
|
|
\end{methoddesc}
|