mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 18:28:49 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1914 lines
		
	
	
	
		
			80 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			1914 lines
		
	
	
	
		
			80 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| :mod:`curses` --- Terminal handling for character-cell displays
 | |
| ===============================================================
 | |
| 
 | |
| .. module:: curses
 | |
|    :synopsis: An interface to the curses library, providing portable
 | |
|               terminal handling.
 | |
|    :platform: Unix
 | |
| 
 | |
| .. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
 | |
| .. sectionauthor:: Eric Raymond <esr@thyrsus.com>
 | |
| 
 | |
| **Source code:** :source:`Lib/curses`
 | |
| 
 | |
| --------------
 | |
| 
 | |
| The :mod:`curses` module provides an interface to the curses library, the
 | |
| de-facto standard for portable advanced terminal handling.
 | |
| 
 | |
| While curses is most widely used in the Unix environment, versions are available
 | |
| for Windows, DOS, and possibly other systems as well.  This extension module is
 | |
| designed to match the API of ncurses, an open-source curses library hosted on
 | |
| Linux and the BSD variants of Unix.
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    Whenever the documentation mentions a *character* it can be specified
 | |
|    as an integer, a one-character Unicode string or a one-byte byte string.
 | |
| 
 | |
|    Whenever the documentation mentions a *character string* it can be specified
 | |
|    as a Unicode string or a byte string.
 | |
| 
 | |
| .. seealso::
 | |
| 
 | |
|    Module :mod:`curses.ascii`
 | |
|       Utilities for working with ASCII characters, regardless of your locale settings.
 | |
| 
 | |
|    Module :mod:`curses.panel`
 | |
|       A panel stack extension that adds depth to  curses windows.
 | |
| 
 | |
|    Module :mod:`curses.textpad`
 | |
|       Editable text widget for curses supporting  :program:`Emacs`\ -like bindings.
 | |
| 
 | |
|    :ref:`curses-howto`
 | |
|       Tutorial material on using curses with Python, by Andrew Kuchling and Eric
 | |
|       Raymond.
 | |
| 
 | |
| 
 | |
| .. _curses-functions:
 | |
| 
 | |
| Functions
 | |
| ---------
 | |
| 
 | |
| The module :mod:`curses` defines the following exception:
 | |
| 
 | |
| 
 | |
| .. exception:: error
 | |
| 
 | |
|    Exception raised when a curses library function returns an error.
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    Whenever *x* or *y* arguments to a function or a method are optional, they
 | |
|    default to the current cursor location. Whenever *attr* is optional, it defaults
 | |
|    to :const:`A_NORMAL`.
 | |
| 
 | |
| The module :mod:`curses` defines the following functions:
 | |
| 
 | |
| 
 | |
| .. function:: baudrate()
 | |
| 
 | |
|    Return the output speed of the terminal in bits per second.  On software
 | |
|    terminal emulators it will have a fixed high value. Included for historical
 | |
|    reasons; in former times, it was used to  write output loops for time delays and
 | |
|    occasionally to change interfaces depending on the line speed.
 | |
| 
 | |
| 
 | |
| .. function:: beep()
 | |
| 
 | |
|    Emit a short attention sound.
 | |
| 
 | |
| 
 | |
| .. function:: can_change_color()
 | |
| 
 | |
|    Return ``True`` or ``False``, depending on whether the programmer can change the colors
 | |
|    displayed by the terminal.
 | |
| 
 | |
| 
 | |
| .. function:: cbreak()
 | |
| 
 | |
|    Enter cbreak mode.  In cbreak mode (sometimes called "rare" mode) normal tty
 | |
|    line buffering is turned off and characters are available to be read one by one.
 | |
|    However, unlike raw mode, special characters (interrupt, quit, suspend, and flow
 | |
|    control) retain their effects on the tty driver and calling program.  Calling
 | |
|    first :func:`raw` then :func:`cbreak` leaves the terminal in cbreak mode.
 | |
| 
 | |
| 
 | |
| .. function:: color_content(color_number)
 | |
| 
 | |
|    Return the intensity of the red, green, and blue (RGB) components in the color
 | |
|    *color_number*, which must be between ``0`` and ``COLORS - 1``.  Return a 3-tuple,
 | |
|    containing the R,G,B values for the given color, which will be between
 | |
|    ``0`` (no component) and ``1000`` (maximum amount of component).
 | |
| 
 | |
| 
 | |
| .. function:: color_pair(pair_number)
 | |
| 
 | |
|    Return the attribute value for displaying text in the specified color pair.
 | |
|    Only the first 256 color pairs are supported. This
 | |
|    attribute value can be combined with :const:`A_STANDOUT`, :const:`A_REVERSE`,
 | |
|    and the other :const:`!A_\*` attributes.  :func:`pair_number` is the counterpart
 | |
|    to this function.
 | |
| 
 | |
| 
 | |
| .. function:: curs_set(visibility)
 | |
| 
 | |
|    Set the cursor state.  *visibility* can be set to ``0``, ``1``, or ``2``, for invisible,
 | |
|    normal, or very visible.  If the terminal supports the visibility requested, return the
 | |
|    previous cursor state; otherwise raise an exception.  On many
 | |
|    terminals, the "visible" mode is an underline cursor and the "very visible" mode
 | |
|    is a block cursor.
 | |
| 
 | |
| 
 | |
| .. function:: def_prog_mode()
 | |
| 
 | |
|    Save the current terminal mode as the "program" mode, the mode when the running
 | |
|    program is using curses.  (Its counterpart is the "shell" mode, for when the
 | |
|    program is not in curses.)  Subsequent calls to :func:`reset_prog_mode` will
 | |
|    restore this mode.
 | |
| 
 | |
| 
 | |
| .. function:: def_shell_mode()
 | |
| 
 | |
|    Save the current terminal mode as the "shell" mode, the mode when the running
 | |
|    program is not using curses.  (Its counterpart is the "program" mode, when the
 | |
|    program is using curses capabilities.) Subsequent calls to
 | |
|    :func:`reset_shell_mode` will restore this mode.
 | |
| 
 | |
| 
 | |
| .. function:: delay_output(ms)
 | |
| 
 | |
|    Insert an *ms* millisecond pause in output.
 | |
| 
 | |
| 
 | |
| .. function:: doupdate()
 | |
| 
 | |
|    Update the physical screen.  The curses library keeps two data structures, one
 | |
|    representing the current physical screen contents and a virtual screen
 | |
|    representing the desired next state.  The :func:`doupdate` ground updates the
 | |
|    physical screen to match the virtual screen.
 | |
| 
 | |
|    The virtual screen may be updated by a :meth:`~window.noutrefresh` call after write
 | |
|    operations such as :meth:`~window.addstr` have been performed on a window.  The normal
 | |
|    :meth:`~window.refresh` call is simply :meth:`!noutrefresh` followed by :func:`!doupdate`;
 | |
|    if you have to update multiple windows, you can speed performance and perhaps
 | |
|    reduce screen flicker by issuing :meth:`!noutrefresh` calls on all windows,
 | |
|    followed by a single :func:`!doupdate`.
 | |
| 
 | |
| 
 | |
| .. function:: echo()
 | |
| 
 | |
|    Enter echo mode.  In echo mode, each character input is echoed to the screen as
 | |
|    it is entered.
 | |
| 
 | |
| 
 | |
| .. function:: endwin()
 | |
| 
 | |
|    De-initialize the library, and return terminal to normal status.
 | |
| 
 | |
| 
 | |
| .. function:: erasechar()
 | |
| 
 | |
|    Return the user's current erase character as a one-byte bytes object.  Under Unix operating systems this
 | |
|    is a property of the controlling tty of the curses program, and is not set by
 | |
|    the curses library itself.
 | |
| 
 | |
| 
 | |
| .. function:: filter()
 | |
| 
 | |
|    The :func:`.filter` routine, if used, must be called before :func:`initscr` is
 | |
|    called.  The effect is that, during those calls, :envvar:`LINES` is set to ``1``; the
 | |
|    capabilities ``clear``, ``cup``, ``cud``, ``cud1``, ``cuu1``, ``cuu``, ``vpa`` are disabled; and the ``home``
 | |
|    string is set to the value of ``cr``. The effect is that the cursor is confined to
 | |
|    the current line, and so are screen updates.  This may be used for enabling
 | |
|    character-at-a-time  line editing without touching the rest of the screen.
 | |
| 
 | |
| 
 | |
| .. function:: flash()
 | |
| 
 | |
|    Flash the screen.  That is, change it to reverse-video and then change it back
 | |
|    in a short interval.  Some people prefer such as 'visible bell' to the audible
 | |
|    attention signal produced by :func:`beep`.
 | |
| 
 | |
| 
 | |
| .. function:: flushinp()
 | |
| 
 | |
|    Flush all input buffers.  This throws away any  typeahead  that  has been typed
 | |
|    by the user and has not yet been processed by the program.
 | |
| 
 | |
| 
 | |
| .. function:: getmouse()
 | |
| 
 | |
|    After :meth:`~window.getch` returns :const:`KEY_MOUSE` to signal a mouse event, this
 | |
|    method should be called to retrieve the queued mouse event, represented as a
 | |
|    5-tuple ``(id, x, y, z, bstate)``. *id* is an ID value used to distinguish
 | |
|    multiple devices, and *x*, *y*, *z* are the event's coordinates.  (*z* is
 | |
|    currently unused.)  *bstate* is an integer value whose bits will be set to
 | |
|    indicate the type of event, and will be the bitwise OR of one or more of the
 | |
|    following constants, where *n* is the button number from 1 to 5:
 | |
|    :const:`BUTTONn_PRESSED`, :const:`BUTTONn_RELEASED`, :const:`BUTTONn_CLICKED`,
 | |
|    :const:`BUTTONn_DOUBLE_CLICKED`, :const:`BUTTONn_TRIPLE_CLICKED`,
 | |
|    :const:`BUTTON_SHIFT`, :const:`BUTTON_CTRL`, :const:`BUTTON_ALT`.
 | |
| 
 | |
|    .. versionchanged:: 3.10
 | |
|       The ``BUTTON5_*`` constants are now exposed if they are provided by the
 | |
|       underlying curses library.
 | |
| 
 | |
| 
 | |
| .. function:: getsyx()
 | |
| 
 | |
|    Return the current coordinates of the virtual screen cursor as a tuple
 | |
|    ``(y, x)``.  If :meth:`leaveok <window.leaveok>` is currently ``True``, then return ``(-1, -1)``.
 | |
| 
 | |
| 
 | |
| .. function:: getwin(file)
 | |
| 
 | |
|    Read window related data stored in the file by an earlier :func:`window.putwin` call.
 | |
|    The routine then creates and initializes a new window using that data, returning
 | |
|    the new window object.
 | |
| 
 | |
| 
 | |
| .. function:: has_colors()
 | |
| 
 | |
|    Return ``True`` if the terminal can display colors; otherwise, return ``False``.
 | |
| 
 | |
| .. function:: has_extended_color_support()
 | |
| 
 | |
|    Return ``True`` if the module supports extended colors; otherwise, return
 | |
|    ``False``. Extended color support allows more than 256 color pairs for
 | |
|    terminals that support more than 16 colors (e.g. xterm-256color).
 | |
| 
 | |
|    Extended color support requires ncurses version 6.1 or later.
 | |
| 
 | |
|    .. versionadded:: 3.10
 | |
| 
 | |
| .. function:: has_ic()
 | |
| 
 | |
|    Return ``True`` if the terminal has insert- and delete-character capabilities.
 | |
|    This function is included for historical reasons only, as all modern software
 | |
|    terminal emulators have such capabilities.
 | |
| 
 | |
| 
 | |
| .. function:: has_il()
 | |
| 
 | |
|    Return ``True`` if the terminal has insert- and delete-line capabilities, or can
 | |
|    simulate  them  using scrolling regions. This function is included for
 | |
|    historical reasons only, as all modern software terminal emulators have such
 | |
|    capabilities.
 | |
| 
 | |
| 
 | |
| .. function:: has_key(ch)
 | |
| 
 | |
|    Take a key value *ch*, and return ``True`` if the current terminal type recognizes
 | |
|    a key with that value.
 | |
| 
 | |
| 
 | |
| .. function:: halfdelay(tenths)
 | |
| 
 | |
|    Used for half-delay mode, which is similar to cbreak mode in that characters
 | |
|    typed by the user are immediately available to the program. However, after
 | |
|    blocking for *tenths* tenths of seconds, raise an exception if nothing has
 | |
|    been typed.  The value of *tenths* must be a number between ``1`` and ``255``.  Use
 | |
|    :func:`nocbreak` to leave half-delay mode.
 | |
| 
 | |
| 
 | |
| .. function:: init_color(color_number, r, g, b)
 | |
| 
 | |
|    Change the definition of a color, taking the number of the color to be changed
 | |
|    followed by three RGB values (for the amounts of red, green, and blue
 | |
|    components).  The value of *color_number* must be between ``0`` and
 | |
|    ``COLORS - 1``.  Each of *r*, *g*, *b*, must be a value between ``0`` and
 | |
|    ``1000``.  When :func:`init_color` is used, all occurrences of that color on the
 | |
|    screen immediately change to the new definition.  This function is a no-op on
 | |
|    most terminals; it is active only if :func:`can_change_color` returns ``True``.
 | |
| 
 | |
| 
 | |
| .. function:: init_pair(pair_number, fg, bg)
 | |
| 
 | |
|    Change the definition of a color-pair.  It takes three arguments: the number of
 | |
|    the color-pair to be changed, the foreground color number, and the background
 | |
|    color number.  The value of *pair_number* must be between ``1`` and
 | |
|    ``COLOR_PAIRS - 1`` (the ``0`` color pair is wired to white on black and cannot
 | |
|    be changed).  The value of *fg* and *bg* arguments must be between ``0`` and
 | |
|    ``COLORS - 1``, or, after calling :func:`use_default_colors`, ``-1``.
 | |
|    If the color-pair was previously initialized, the screen is
 | |
|    refreshed and all occurrences of that color-pair are changed to the new
 | |
|    definition.
 | |
| 
 | |
| 
 | |
| .. function:: initscr()
 | |
| 
 | |
|    Initialize the library. Return a :ref:`window <curses-window-objects>` object
 | |
|    which represents the whole screen.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       If there is an error opening the terminal, the underlying curses library may
 | |
|       cause the interpreter to exit.
 | |
| 
 | |
| 
 | |
| .. function:: is_term_resized(nlines, ncols)
 | |
| 
 | |
|    Return ``True`` if :func:`resize_term` would modify the window structure,
 | |
|    ``False`` otherwise.
 | |
| 
 | |
| 
 | |
| .. function:: isendwin()
 | |
| 
 | |
|    Return ``True`` if :func:`endwin` has been called (that is, the  curses library has
 | |
|    been deinitialized).
 | |
| 
 | |
| 
 | |
| .. function:: keyname(k)
 | |
| 
 | |
|    Return the name of the key numbered *k* as a bytes object.  The name of a key generating printable
 | |
|    ASCII character is the key's character.  The name of a control-key combination
 | |
|    is a two-byte bytes object consisting of a caret (``b'^'``) followed by the corresponding
 | |
|    printable ASCII character.  The name of an alt-key combination (128--255) is a
 | |
|    bytes object consisting of the prefix ``b'M-'`` followed by the name of the corresponding
 | |
|    ASCII character.
 | |
| 
 | |
| 
 | |
| .. function:: killchar()
 | |
| 
 | |
|    Return the user's current line kill character as a one-byte bytes object. Under Unix operating systems
 | |
|    this is a property of the controlling tty of the curses program, and is not set
 | |
|    by the curses library itself.
 | |
| 
 | |
| 
 | |
| .. function:: longname()
 | |
| 
 | |
|    Return a bytes object containing the terminfo long name field describing the current
 | |
|    terminal.  The maximum length of a verbose description is 128 characters.  It is
 | |
|    defined only after the call to :func:`initscr`.
 | |
| 
 | |
| 
 | |
| .. function:: meta(flag)
 | |
| 
 | |
|    If *flag* is ``True``, allow 8-bit characters to be input.  If
 | |
|    *flag* is ``False``,  allow only 7-bit chars.
 | |
| 
 | |
| 
 | |
| .. function:: mouseinterval(interval)
 | |
| 
 | |
|    Set the maximum time in milliseconds that can elapse between press and release
 | |
|    events in order for them to be recognized as a click, and return the previous
 | |
|    interval value.  The default value is 200 milliseconds, or one fifth of a second.
 | |
| 
 | |
| 
 | |
| .. function:: mousemask(mousemask)
 | |
| 
 | |
|    Set the mouse events to be reported, and return a tuple ``(availmask,
 | |
|    oldmask)``.   *availmask* indicates which of the specified mouse events can be
 | |
|    reported; on complete failure it returns ``0``.  *oldmask* is the previous value of
 | |
|    the given window's mouse event mask.  If this function is never called, no mouse
 | |
|    events are ever reported.
 | |
| 
 | |
| 
 | |
| .. function:: napms(ms)
 | |
| 
 | |
|    Sleep for *ms* milliseconds.
 | |
| 
 | |
| 
 | |
| .. function:: newpad(nlines, ncols)
 | |
| 
 | |
|    Create and return a pointer to a new pad data structure with the given number
 | |
|    of lines and columns.  Return a pad as a window object.
 | |
| 
 | |
|    A pad is like a window, except that it is not restricted by the screen size, and
 | |
|    is not necessarily associated with a particular part of the screen.  Pads can be
 | |
|    used when a large window is needed, and only a part of the window will be on the
 | |
|    screen at one time.  Automatic refreshes of pads (such as from scrolling or
 | |
|    echoing of input) do not occur.  The :meth:`~window.refresh` and :meth:`~window.noutrefresh`
 | |
|    methods of a pad require 6 arguments to specify the part of the pad to be
 | |
|    displayed and the location on the screen to be used for the display. The
 | |
|    arguments are *pminrow*, *pmincol*, *sminrow*, *smincol*, *smaxrow*, *smaxcol*; the *p*
 | |
|    arguments refer to the upper left corner of the pad region to be displayed and
 | |
|    the *s* arguments define a clipping box on the screen within which the pad region
 | |
|    is to be displayed.
 | |
| 
 | |
| 
 | |
| .. function:: newwin(nlines, ncols)
 | |
|               newwin(nlines, ncols, begin_y, begin_x)
 | |
| 
 | |
|    Return a new :ref:`window <curses-window-objects>`, whose left-upper corner
 | |
|    is at  ``(begin_y, begin_x)``, and whose height/width is  *nlines*/*ncols*.
 | |
| 
 | |
|    By default, the window will extend from the  specified position to the lower
 | |
|    right corner of the screen.
 | |
| 
 | |
| 
 | |
| .. function:: nl()
 | |
| 
 | |
|    Enter newline mode.  This mode translates the return key into newline on input,
 | |
|    and translates newline into return and line-feed on output. Newline mode is
 | |
|    initially on.
 | |
| 
 | |
| 
 | |
| .. function:: nocbreak()
 | |
| 
 | |
|    Leave cbreak mode.  Return to normal "cooked" mode with line buffering.
 | |
| 
 | |
| 
 | |
| .. function:: noecho()
 | |
| 
 | |
|    Leave echo mode.  Echoing of input characters is turned off.
 | |
| 
 | |
| 
 | |
| .. function:: nonl()
 | |
| 
 | |
|    Leave newline mode.  Disable translation of return into newline on input, and
 | |
|    disable low-level translation of newline into newline/return on output (but this
 | |
|    does not change the behavior of ``addch('\n')``, which always does the
 | |
|    equivalent of return and line feed on the virtual screen).  With translation
 | |
|    off, curses can sometimes speed up vertical motion a little; also, it will be
 | |
|    able to detect the return key on input.
 | |
| 
 | |
| 
 | |
| .. function:: noqiflush()
 | |
| 
 | |
|    When the :func:`!noqiflush` routine is used, normal flush of input and output queues
 | |
|    associated with the ``INTR``, ``QUIT`` and ``SUSP`` characters will not be done.  You may
 | |
|    want to call :func:`!noqiflush` in a signal handler if you want output to
 | |
|    continue as though the interrupt had not occurred, after the handler exits.
 | |
| 
 | |
| 
 | |
| .. function:: noraw()
 | |
| 
 | |
|    Leave raw mode. Return to normal "cooked" mode with line buffering.
 | |
| 
 | |
| 
 | |
| .. function:: pair_content(pair_number)
 | |
| 
 | |
|    Return a tuple ``(fg, bg)`` containing the colors for the requested color pair.
 | |
|    The value of *pair_number* must be between ``0`` and ``COLOR_PAIRS - 1``.
 | |
| 
 | |
| 
 | |
| .. function:: pair_number(attr)
 | |
| 
 | |
|    Return the number of the color-pair set by the attribute value *attr*.
 | |
|    :func:`color_pair` is the counterpart to this function.
 | |
| 
 | |
| 
 | |
| .. function:: putp(str)
 | |
| 
 | |
|    Equivalent to ``tputs(str, 1, putchar)``; emit the value of a specified
 | |
|    terminfo capability for the current terminal.  Note that the output of :func:`putp`
 | |
|    always goes to standard output.
 | |
| 
 | |
| 
 | |
| .. function:: qiflush([flag])
 | |
| 
 | |
|    If *flag* is ``False``, the effect is the same as calling :func:`noqiflush`. If
 | |
|    *flag* is ``True``, or no argument is provided, the queues will be flushed when
 | |
|    these control characters are read.
 | |
| 
 | |
| 
 | |
| .. function:: raw()
 | |
| 
 | |
|    Enter raw mode.  In raw mode, normal line buffering and  processing of
 | |
|    interrupt, quit, suspend, and flow control keys are turned off; characters are
 | |
|    presented to curses input functions one by one.
 | |
| 
 | |
| 
 | |
| .. function:: reset_prog_mode()
 | |
| 
 | |
|    Restore the  terminal  to "program" mode, as previously saved  by
 | |
|    :func:`def_prog_mode`.
 | |
| 
 | |
| 
 | |
| .. function:: reset_shell_mode()
 | |
| 
 | |
|    Restore the  terminal  to "shell" mode, as previously saved  by
 | |
|    :func:`def_shell_mode`.
 | |
| 
 | |
| 
 | |
| .. function:: resetty()
 | |
| 
 | |
|    Restore the state of the terminal modes to what it was at the last call to
 | |
|    :func:`savetty`.
 | |
| 
 | |
| 
 | |
| .. function:: resize_term(nlines, ncols)
 | |
| 
 | |
|    Backend function used by :func:`resizeterm`, performing most of the work;
 | |
|    when resizing the windows, :func:`resize_term` blank-fills the areas that are
 | |
|    extended.  The calling application should fill in these areas with
 | |
|    appropriate data.  The :func:`!resize_term` function attempts to resize all
 | |
|    windows.  However, due to the calling convention of pads, it is not possible
 | |
|    to resize these without additional interaction with the application.
 | |
| 
 | |
| 
 | |
| .. function:: resizeterm(nlines, ncols)
 | |
| 
 | |
|    Resize the standard and current windows to the specified dimensions, and
 | |
|    adjusts other bookkeeping data used by the curses library that record the
 | |
|    window dimensions (in particular the SIGWINCH handler).
 | |
| 
 | |
| 
 | |
| .. function:: savetty()
 | |
| 
 | |
|    Save the current state of the terminal modes in a buffer, usable by
 | |
|    :func:`resetty`.
 | |
| 
 | |
| .. function:: get_escdelay()
 | |
| 
 | |
|    Retrieves the value set by :func:`set_escdelay`.
 | |
| 
 | |
|    .. versionadded:: 3.9
 | |
| 
 | |
| .. function:: set_escdelay(ms)
 | |
| 
 | |
|    Sets the number of milliseconds to wait after reading an escape character,
 | |
|    to distinguish between an individual escape character entered on the
 | |
|    keyboard from escape sequences sent by cursor and function keys.
 | |
| 
 | |
|    .. versionadded:: 3.9
 | |
| 
 | |
| .. function:: get_tabsize()
 | |
| 
 | |
|    Retrieves the value set by :func:`set_tabsize`.
 | |
| 
 | |
|    .. versionadded:: 3.9
 | |
| 
 | |
| .. function:: set_tabsize(size)
 | |
| 
 | |
|    Sets the number of columns used by the curses library when converting a tab
 | |
|    character to spaces as it adds the tab to a window.
 | |
| 
 | |
|    .. versionadded:: 3.9
 | |
| 
 | |
| .. function:: setsyx(y, x)
 | |
| 
 | |
|    Set the virtual screen cursor to *y*, *x*. If *y* and *x* are both ``-1``, then
 | |
|    :meth:`leaveok <window.leaveok>` is set ``True``.
 | |
| 
 | |
| 
 | |
| .. function:: setupterm(term=None, fd=-1)
 | |
| 
 | |
|    Initialize the terminal.  *term* is a string giving
 | |
|    the terminal name, or ``None``; if omitted or ``None``, the value of the
 | |
|    :envvar:`TERM` environment variable will be used.  *fd* is the
 | |
|    file descriptor to which any initialization sequences will be sent; if not
 | |
|    supplied or ``-1``, the file descriptor for ``sys.stdout`` will be used.
 | |
| 
 | |
| 
 | |
| .. function:: start_color()
 | |
| 
 | |
|    Must be called if the programmer wants to use colors, and before any other color
 | |
|    manipulation routine is called.  It is good practice to call this routine right
 | |
|    after :func:`initscr`.
 | |
| 
 | |
|    :func:`start_color` initializes eight basic colors (black, red,  green, yellow,
 | |
|    blue, magenta, cyan, and white), and two global variables in the :mod:`curses`
 | |
|    module, :const:`COLORS` and :const:`COLOR_PAIRS`, containing the maximum number
 | |
|    of colors and color-pairs the terminal can support.  It also restores the colors
 | |
|    on the terminal to the values they had when the terminal was just turned on.
 | |
| 
 | |
| 
 | |
| .. function:: termattrs()
 | |
| 
 | |
|    Return a logical OR of all video attributes supported by the terminal.  This
 | |
|    information is useful when a curses program needs complete control over the
 | |
|    appearance of the screen.
 | |
| 
 | |
| 
 | |
| .. function:: termname()
 | |
| 
 | |
|    Return the value of the environment variable :envvar:`TERM`, as a bytes object,
 | |
|    truncated to 14 characters.
 | |
| 
 | |
| 
 | |
| .. function:: tigetflag(capname)
 | |
| 
 | |
|    Return the value of the Boolean capability corresponding to the terminfo
 | |
|    capability name *capname* as an integer.  Return the value ``-1`` if *capname* is not a
 | |
|    Boolean capability, or ``0`` if it is canceled or absent from the terminal
 | |
|    description.
 | |
| 
 | |
| 
 | |
| .. function:: tigetnum(capname)
 | |
| 
 | |
|    Return the value of the numeric capability corresponding to the terminfo
 | |
|    capability name *capname* as an integer.  Return the value ``-2`` if *capname* is not a
 | |
|    numeric capability, or ``-1`` if it is canceled or absent from the terminal
 | |
|    description.
 | |
| 
 | |
| 
 | |
| .. function:: tigetstr(capname)
 | |
| 
 | |
|    Return the value of the string capability corresponding to the terminfo
 | |
|    capability name *capname* as a bytes object.  Return ``None`` if *capname*
 | |
|    is not a terminfo "string capability", or is canceled or absent from the
 | |
|    terminal description.
 | |
| 
 | |
| 
 | |
| .. function:: tparm(str[, ...])
 | |
| 
 | |
|    Instantiate the bytes object *str* with the supplied parameters, where *str* should
 | |
|    be a parameterized string obtained from the terminfo database.  E.g.
 | |
|    ``tparm(tigetstr("cup"), 5, 3)`` could result in ``b'\033[6;4H'``, the exact
 | |
|    result depending on terminal type.
 | |
| 
 | |
| 
 | |
| .. function:: typeahead(fd)
 | |
| 
 | |
|    Specify that the file descriptor *fd* be used for typeahead checking.  If *fd*
 | |
|    is ``-1``, then no typeahead checking is done.
 | |
| 
 | |
|    The curses library does "line-breakout optimization" by looking for typeahead
 | |
|    periodically while updating the screen.  If input is found, and it is coming
 | |
|    from a tty, the current update is postponed until refresh or doupdate is called
 | |
|    again, allowing faster response to commands typed in advance. This function
 | |
|    allows specifying a different file descriptor for typeahead checking.
 | |
| 
 | |
| 
 | |
| .. function:: unctrl(ch)
 | |
| 
 | |
|    Return a bytes object which is a printable representation of the character *ch*.
 | |
|    Control characters are represented as a caret followed by the character, for
 | |
|    example as ``b'^C'``. Printing characters are left as they are.
 | |
| 
 | |
| 
 | |
| .. function:: ungetch(ch)
 | |
| 
 | |
|    Push *ch* so the next :meth:`~window.getch` will return it.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       Only one *ch* can be pushed before :meth:`!getch` is called.
 | |
| 
 | |
| 
 | |
| .. function:: update_lines_cols()
 | |
| 
 | |
|    Update :envvar:`LINES` and :envvar:`COLS`. Useful for detecting manual screen resize.
 | |
| 
 | |
|    .. versionadded:: 3.5
 | |
| 
 | |
| 
 | |
| .. function:: unget_wch(ch)
 | |
| 
 | |
|    Push *ch* so the next :meth:`~window.get_wch` will return it.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       Only one *ch* can be pushed before :meth:`!get_wch` is called.
 | |
| 
 | |
|    .. versionadded:: 3.3
 | |
| 
 | |
| 
 | |
| .. function:: ungetmouse(id, x, y, z, bstate)
 | |
| 
 | |
|    Push a :const:`KEY_MOUSE` event onto the input queue, associating the given
 | |
|    state data with it.
 | |
| 
 | |
| 
 | |
| .. function:: use_env(flag)
 | |
| 
 | |
|    If used, this function should be called before :func:`initscr` or newterm are
 | |
|    called.  When *flag* is ``False``, the values of lines and columns specified in the
 | |
|    terminfo database will be used, even if environment variables :envvar:`LINES`
 | |
|    and :envvar:`COLUMNS` (used by default) are set, or if curses is running in a
 | |
|    window (in which case default behavior would be to use the window size if
 | |
|    :envvar:`LINES` and :envvar:`COLUMNS` are not set).
 | |
| 
 | |
| 
 | |
| .. function:: use_default_colors()
 | |
| 
 | |
|    Allow use of default values for colors on terminals supporting this feature. Use
 | |
|    this to support transparency in your application.  The default color is assigned
 | |
|    to the color number ``-1``. After calling this function,  ``init_pair(x,
 | |
|    curses.COLOR_RED, -1)`` initializes, for instance, color pair *x* to a red
 | |
|    foreground color on the default background.
 | |
| 
 | |
| 
 | |
| .. function:: wrapper(func, /, *args, **kwargs)
 | |
| 
 | |
|    Initialize curses and call another callable object, *func*, which should be the
 | |
|    rest of your curses-using application.  If the application raises an exception,
 | |
|    this function will restore the terminal to a sane state before re-raising the
 | |
|    exception and generating a traceback.  The callable object *func* is then passed
 | |
|    the main window 'stdscr' as its first argument, followed by any other arguments
 | |
|    passed to :func:`!wrapper`.  Before calling *func*, :func:`!wrapper` turns on
 | |
|    cbreak mode, turns off echo, enables the terminal keypad, and initializes colors
 | |
|    if the terminal has color support.  On exit (whether normally or by exception)
 | |
|    it restores cooked mode, turns on echo, and disables the terminal keypad.
 | |
| 
 | |
| 
 | |
| .. _curses-window-objects:
 | |
| 
 | |
| Window Objects
 | |
| --------------
 | |
| 
 | |
| Window objects, as returned by :func:`initscr` and :func:`newwin` above, have
 | |
| the following methods and attributes:
 | |
| 
 | |
| 
 | |
| .. method:: window.addch(ch[, attr])
 | |
|             window.addch(y, x, ch[, attr])
 | |
| 
 | |
|    Paint character *ch* at ``(y, x)`` with attributes *attr*, overwriting any
 | |
|    character previously painted at that location.  By default, the character
 | |
|    position and attributes are the current settings for the window object.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       Writing outside the window, subwindow, or pad raises a :exc:`curses.error`.
 | |
|       Attempting to write to the lower right corner of a window, subwindow,
 | |
|       or pad will cause an exception to be raised after the character is printed.
 | |
| 
 | |
| 
 | |
| .. method:: window.addnstr(str, n[, attr])
 | |
|             window.addnstr(y, x, str, n[, attr])
 | |
| 
 | |
|    Paint at most *n* characters of the character string *str* at
 | |
|    ``(y, x)`` with attributes
 | |
|    *attr*, overwriting anything previously on the display.
 | |
| 
 | |
| 
 | |
| .. method:: window.addstr(str[, attr])
 | |
|             window.addstr(y, x, str[, attr])
 | |
| 
 | |
|    Paint the character string *str* at ``(y, x)`` with attributes
 | |
|    *attr*, overwriting anything previously on the display.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       * Writing outside the window, subwindow, or pad raises :exc:`curses.error`.
 | |
|         Attempting to write to the lower right corner of a window, subwindow,
 | |
|         or pad will cause an exception to be raised after the string is printed.
 | |
| 
 | |
|       * A `bug in ncurses <https://bugs.python.org/issue35924>`_, the backend
 | |
|         for this Python module, can cause SegFaults when resizing windows. This
 | |
|         is fixed in ncurses-6.1-20190511.  If you are stuck with an earlier
 | |
|         ncurses, you can avoid triggering this if you do not call :func:`addstr`
 | |
|         with a *str* that has embedded newlines.  Instead, call :func:`addstr`
 | |
|         separately for each line.
 | |
| 
 | |
| 
 | |
| .. method:: window.attroff(attr)
 | |
| 
 | |
|    Remove attribute *attr* from the "background" set applied to all writes to the
 | |
|    current window.
 | |
| 
 | |
| 
 | |
| .. method:: window.attron(attr)
 | |
| 
 | |
|    Add attribute *attr* from the "background" set applied to all writes to the
 | |
|    current window.
 | |
| 
 | |
| 
 | |
| .. method:: window.attrset(attr)
 | |
| 
 | |
|    Set the "background" set of attributes to *attr*.  This set is initially
 | |
|    ``0`` (no attributes).
 | |
| 
 | |
| 
 | |
| .. method:: window.bkgd(ch[, attr])
 | |
| 
 | |
|    Set the background property of the window to the character *ch*, with
 | |
|    attributes *attr*.  The change is then applied to every character position in
 | |
|    that window:
 | |
| 
 | |
|    * The attribute of every character in the window  is changed to the new
 | |
|      background attribute.
 | |
| 
 | |
|    * Wherever  the  former background character appears, it is changed to the new
 | |
|      background character.
 | |
| 
 | |
| 
 | |
| .. method:: window.bkgdset(ch[, attr])
 | |
| 
 | |
|    Set the window's background.  A window's background consists of a character and
 | |
|    any combination of attributes.  The attribute part of the background is combined
 | |
|    (OR'ed) with all non-blank characters that are written into the window.  Both
 | |
|    the character and attribute parts of the background are combined with the blank
 | |
|    characters.  The background becomes a property of the character and moves with
 | |
|    the character through any scrolling and insert/delete line/character operations.
 | |
| 
 | |
| 
 | |
| .. method:: window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, 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.
 | |
| 
 | |
|    .. note::
 | |
| 
 | |
|       A ``0`` value for any parameter will cause the default character to be used for
 | |
|       that parameter.  Keyword parameters can *not* be used.  The defaults are listed
 | |
|       in this table:
 | |
| 
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | Parameter | Description         | Default value         |
 | |
|    +===========+=====================+=======================+
 | |
|    | *ls*      | Left side           | :const:`ACS_VLINE`    |
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | *rs*      | Right side          | :const:`ACS_VLINE`    |
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | *ts*      | Top                 | :const:`ACS_HLINE`    |
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | *bs*      | Bottom              | :const:`ACS_HLINE`    |
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | *tl*      | Upper-left corner   | :const:`ACS_ULCORNER` |
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | *tr*      | Upper-right corner  | :const:`ACS_URCORNER` |
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | *bl*      | Bottom-left corner  | :const:`ACS_LLCORNER` |
 | |
|    +-----------+---------------------+-----------------------+
 | |
|    | *br*      | Bottom-right corner | :const:`ACS_LRCORNER` |
 | |
|    +-----------+---------------------+-----------------------+
 | |
| 
 | |
| 
 | |
| .. method:: window.box([vertch, horch])
 | |
| 
 | |
|    Similar to :meth:`border`, but both *ls* and *rs* are *vertch* and both *ts* and
 | |
|    *bs* are *horch*.  The default corner characters are always used by this function.
 | |
| 
 | |
| 
 | |
| .. method:: window.chgat(attr)
 | |
|             window.chgat(num, attr)
 | |
|             window.chgat(y, x, attr)
 | |
|             window.chgat(y, x, num, attr)
 | |
| 
 | |
|    Set the attributes of *num* characters at the current cursor position, or at
 | |
|    position ``(y, x)`` if supplied. If *num* is not given or is ``-1``,
 | |
|    the attribute will be set on all the characters to the end of the line.  This
 | |
|    function moves cursor to position ``(y, x)`` if supplied. The changed line
 | |
|    will be touched using the :meth:`touchline` method so that the contents will
 | |
|    be redisplayed by the next window refresh.
 | |
| 
 | |
| 
 | |
| .. method:: window.clear()
 | |
| 
 | |
|    Like :meth:`erase`, but also cause the whole window to be repainted upon next
 | |
|    call to :meth:`refresh`.
 | |
| 
 | |
| 
 | |
| .. method:: window.clearok(flag)
 | |
| 
 | |
|    If *flag* is ``True``, the next call to :meth:`refresh` will clear the window
 | |
|    completely.
 | |
| 
 | |
| 
 | |
| .. method:: window.clrtobot()
 | |
| 
 | |
|    Erase from cursor to the end of the window: all lines below the cursor are
 | |
|    deleted, and then the equivalent of :meth:`clrtoeol` is performed.
 | |
| 
 | |
| 
 | |
| .. method:: window.clrtoeol()
 | |
| 
 | |
|    Erase from cursor to the end of the line.
 | |
| 
 | |
| 
 | |
| .. method:: window.cursyncup()
 | |
| 
 | |
|    Update the current cursor position of all the ancestors of the window to
 | |
|    reflect the current cursor position of the window.
 | |
| 
 | |
| 
 | |
| .. method:: window.delch([y, x])
 | |
| 
 | |
|    Delete any character at ``(y, x)``.
 | |
| 
 | |
| 
 | |
| .. method:: window.deleteln()
 | |
| 
 | |
|    Delete the line under the cursor. All following lines are moved up by one line.
 | |
| 
 | |
| 
 | |
| .. method:: window.derwin(begin_y, begin_x)
 | |
|             window.derwin(nlines, ncols, begin_y, begin_x)
 | |
| 
 | |
|    An abbreviation for "derive window", :meth:`derwin` is the same as calling
 | |
|    :meth:`subwin`, except that *begin_y* and *begin_x* are relative to the origin
 | |
|    of the window, rather than relative to the entire screen.  Return a window
 | |
|    object for the derived window.
 | |
| 
 | |
| 
 | |
| .. method:: window.echochar(ch[, attr])
 | |
| 
 | |
|    Add character *ch* with attribute *attr*, and immediately  call :meth:`refresh`
 | |
|    on the window.
 | |
| 
 | |
| 
 | |
| .. method:: window.enclose(y, x)
 | |
| 
 | |
|    Test whether the given pair of screen-relative character-cell coordinates are
 | |
|    enclosed by the given window, returning ``True`` or ``False``.  It is useful for
 | |
|    determining what subset of the screen windows enclose the location of a mouse
 | |
|    event.
 | |
| 
 | |
|    .. versionchanged:: 3.10
 | |
|       Previously it returned ``1`` or ``0`` instead of ``True`` or ``False``.
 | |
| 
 | |
| 
 | |
| .. attribute:: window.encoding
 | |
| 
 | |
|    Encoding used to encode method arguments (Unicode strings and characters).
 | |
|    The encoding attribute is inherited from the parent window when a subwindow
 | |
|    is created, for example with :meth:`window.subwin`.
 | |
|    By default, current locale encoding is used (see :func:`locale.getencoding`).
 | |
| 
 | |
|    .. versionadded:: 3.3
 | |
| 
 | |
| 
 | |
| .. method:: window.erase()
 | |
| 
 | |
|    Clear the window.
 | |
| 
 | |
| 
 | |
| .. method:: window.getbegyx()
 | |
| 
 | |
|    Return a tuple ``(y, x)`` of co-ordinates of upper-left corner.
 | |
| 
 | |
| 
 | |
| .. method:: window.getbkgd()
 | |
| 
 | |
|    Return the given window's current background character/attribute pair.
 | |
| 
 | |
| 
 | |
| .. method:: window.getch([y, x])
 | |
| 
 | |
|    Get a character. Note that the integer returned does *not* have to be in ASCII
 | |
|    range: function keys, keypad keys and so on are represented by numbers higher
 | |
|    than 255.  In no-delay mode, return ``-1`` if there is no input, otherwise
 | |
|    wait until a key is pressed.
 | |
| 
 | |
| 
 | |
| .. method:: window.get_wch([y, x])
 | |
| 
 | |
|    Get a wide character. Return a character for most keys, or an integer for
 | |
|    function keys, keypad keys, and other special keys.
 | |
|    In no-delay mode, raise an exception if there is no input.
 | |
| 
 | |
|    .. versionadded:: 3.3
 | |
| 
 | |
| 
 | |
| .. method:: window.getkey([y, x])
 | |
| 
 | |
|    Get a character, returning a string instead of an integer, as :meth:`getch`
 | |
|    does. Function keys, keypad keys and other special keys return a multibyte
 | |
|    string containing the key name.  In no-delay mode, raise an exception if
 | |
|    there is no input.
 | |
| 
 | |
| 
 | |
| .. method:: window.getmaxyx()
 | |
| 
 | |
|    Return a tuple ``(y, x)`` of the height and width of the window.
 | |
| 
 | |
| 
 | |
| .. method:: window.getparyx()
 | |
| 
 | |
|    Return the beginning coordinates of this window relative to its parent window
 | |
|    as a tuple ``(y, x)``.  Return ``(-1, -1)`` if this window has no
 | |
|    parent.
 | |
| 
 | |
| 
 | |
| .. method:: window.getstr()
 | |
|             window.getstr(n)
 | |
|             window.getstr(y, x)
 | |
|             window.getstr(y, x, n)
 | |
| 
 | |
|    Read a bytes object from the user, with primitive line editing capacity.
 | |
| 
 | |
| 
 | |
| .. method:: window.getyx()
 | |
| 
 | |
|    Return a tuple ``(y, x)`` of current cursor position  relative to the window's
 | |
|    upper-left corner.
 | |
| 
 | |
| 
 | |
| .. method:: window.hline(ch, n)
 | |
|             window.hline(y, x, ch, n)
 | |
| 
 | |
|    Display a horizontal line starting at ``(y, x)`` with length *n* consisting of
 | |
|    the character *ch*.
 | |
| 
 | |
| 
 | |
| .. method:: window.idcok(flag)
 | |
| 
 | |
|    If *flag* is ``False``, curses no longer considers using the hardware insert/delete
 | |
|    character feature of the terminal; if *flag* is ``True``, use of character insertion
 | |
|    and deletion is enabled.  When curses is first initialized, use of character
 | |
|    insert/delete is enabled by default.
 | |
| 
 | |
| 
 | |
| .. method:: window.idlok(flag)
 | |
| 
 | |
|    If *flag* is ``True``, :mod:`curses` will try and use hardware line
 | |
|    editing facilities. Otherwise, line insertion/deletion are disabled.
 | |
| 
 | |
| 
 | |
| .. method:: window.immedok(flag)
 | |
| 
 | |
|    If *flag* is ``True``, any change in the window image automatically causes the
 | |
|    window to be refreshed; you no longer have to call :meth:`refresh` yourself.
 | |
|    However, it may degrade performance considerably, due to repeated calls to
 | |
|    wrefresh.  This option is disabled by default.
 | |
| 
 | |
| 
 | |
| .. method:: window.inch([y, x])
 | |
| 
 | |
|    Return the character at the given position in the window. The bottom 8 bits are
 | |
|    the character proper, and upper bits are the attributes.
 | |
| 
 | |
| 
 | |
| .. method:: window.insch(ch[, attr])
 | |
|             window.insch(y, x, ch[, attr])
 | |
| 
 | |
|    Paint character *ch* at ``(y, x)`` with attributes *attr*, moving the line from
 | |
|    position *x* right by one character.
 | |
| 
 | |
| 
 | |
| .. method:: window.insdelln(nlines)
 | |
| 
 | |
|    Insert *nlines* lines into the specified window above the current line.  The
 | |
|    *nlines* bottom lines are lost.  For negative *nlines*, delete *nlines* lines
 | |
|    starting with the one under the cursor, and move the remaining lines up.  The
 | |
|    bottom *nlines* lines are cleared.  The current cursor position remains the
 | |
|    same.
 | |
| 
 | |
| 
 | |
| .. method:: window.insertln()
 | |
| 
 | |
|    Insert a blank line under the cursor. All following lines are moved down by one
 | |
|    line.
 | |
| 
 | |
| 
 | |
| .. method:: window.insnstr(str, n[, attr])
 | |
|             window.insnstr(y, x, str, n[, attr])
 | |
| 
 | |
|    Insert a character string (as many characters as will fit on the line) before
 | |
|    the character under the cursor, up to *n* characters.   If *n* is zero or
 | |
|    negative, the entire string is inserted. All characters to the right of the
 | |
|    cursor are shifted right, with the rightmost characters on the line being lost.
 | |
|    The cursor position does not change (after moving to *y*, *x*, if specified).
 | |
| 
 | |
| 
 | |
| .. method:: window.insstr(str[, attr])
 | |
|             window.insstr(y, x, str[, attr])
 | |
| 
 | |
|    Insert a character string (as many characters as will fit on the line) before
 | |
|    the character under the cursor.  All characters to the right of the cursor are
 | |
|    shifted right, with the rightmost characters on the line being lost.  The cursor
 | |
|    position does not change (after moving to *y*, *x*, if specified).
 | |
| 
 | |
| 
 | |
| .. method:: window.instr([n])
 | |
|             window.instr(y, x[, n])
 | |
| 
 | |
|    Return a bytes object of characters, extracted from the window starting at the
 | |
|    current cursor position, or at *y*, *x* if specified. Attributes are stripped
 | |
|    from the characters.  If *n* is specified, :meth:`instr` returns a string
 | |
|    at most *n* characters long (exclusive of the trailing NUL).
 | |
| 
 | |
| 
 | |
| .. method:: window.is_linetouched(line)
 | |
| 
 | |
|    Return ``True`` if the specified line was modified since the last call to
 | |
|    :meth:`refresh`; otherwise return ``False``.  Raise a :exc:`curses.error`
 | |
|    exception if *line* is not valid for the given window.
 | |
| 
 | |
| 
 | |
| .. method:: window.is_wintouched()
 | |
| 
 | |
|    Return ``True`` if the specified window was modified since the last call to
 | |
|    :meth:`refresh`; otherwise return ``False``.
 | |
| 
 | |
| 
 | |
| .. method:: window.keypad(flag)
 | |
| 
 | |
|    If *flag* is ``True``, escape sequences generated by some keys (keypad,  function keys)
 | |
|    will be interpreted by :mod:`curses`. If *flag* is ``False``, escape sequences will be
 | |
|    left as is in the input stream.
 | |
| 
 | |
| 
 | |
| .. method:: window.leaveok(flag)
 | |
| 
 | |
|    If *flag* is ``True``, cursor is left where it is on update, instead of being at "cursor
 | |
|    position."  This reduces cursor movement where possible. If possible the cursor
 | |
|    will be made invisible.
 | |
| 
 | |
|    If *flag* is ``False``, cursor will always be at "cursor position" after an update.
 | |
| 
 | |
| 
 | |
| .. method:: window.move(new_y, new_x)
 | |
| 
 | |
|    Move cursor to ``(new_y, new_x)``.
 | |
| 
 | |
| 
 | |
| .. method:: window.mvderwin(y, x)
 | |
| 
 | |
|    Move the window inside its parent window.  The screen-relative parameters of
 | |
|    the window are not changed.  This routine is used to display different parts of
 | |
|    the parent window at the same physical position on the screen.
 | |
| 
 | |
| 
 | |
| .. method:: window.mvwin(new_y, new_x)
 | |
| 
 | |
|    Move the window so its upper-left corner is at ``(new_y, new_x)``.
 | |
| 
 | |
| 
 | |
| .. method:: window.nodelay(flag)
 | |
| 
 | |
|    If *flag* is ``True``, :meth:`getch` will be non-blocking.
 | |
| 
 | |
| 
 | |
| .. method:: window.notimeout(flag)
 | |
| 
 | |
|    If *flag* is ``True``, escape sequences will not be timed out.
 | |
| 
 | |
|    If *flag* is ``False``, after a few milliseconds, an escape sequence will not be
 | |
|    interpreted, and will be left in the input stream as is.
 | |
| 
 | |
| 
 | |
| .. method:: window.noutrefresh()
 | |
| 
 | |
|    Mark for refresh but wait.  This function updates the data structure
 | |
|    representing the desired state of the window, but does not force an update of
 | |
|    the physical screen.  To accomplish that, call  :func:`doupdate`.
 | |
| 
 | |
| 
 | |
| .. method:: window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])
 | |
| 
 | |
|    Overlay the window on top of *destwin*. The windows need not be the same size,
 | |
|    only the overlapping region is copied. This copy is non-destructive, which means
 | |
|    that the current background character does not overwrite the old contents of
 | |
|    *destwin*.
 | |
| 
 | |
|    To get fine-grained control over the copied region, the second form of
 | |
|    :meth:`overlay` can be used. *sminrow* and *smincol* are the upper-left
 | |
|    coordinates of the source window, and the other variables mark a rectangle in
 | |
|    the destination window.
 | |
| 
 | |
| 
 | |
| .. method:: window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])
 | |
| 
 | |
|    Overwrite the window on top of *destwin*. The windows need not be the same size,
 | |
|    in which case only the overlapping region is copied. This copy is destructive,
 | |
|    which means that the current background character overwrites the old contents of
 | |
|    *destwin*.
 | |
| 
 | |
|    To get fine-grained control over the copied region, the second form of
 | |
|    :meth:`overwrite` can be used. *sminrow* and *smincol* are the upper-left
 | |
|    coordinates of the source window, the other variables mark a rectangle in the
 | |
|    destination window.
 | |
| 
 | |
| 
 | |
| .. method:: window.putwin(file)
 | |
| 
 | |
|    Write all data associated with the window into the provided file object.  This
 | |
|    information can be later retrieved using the :func:`getwin` function.
 | |
| 
 | |
| 
 | |
| .. method:: window.redrawln(beg, num)
 | |
| 
 | |
|    Indicate that the *num* screen lines, starting at line *beg*, are corrupted and
 | |
|    should be completely redrawn on the next :meth:`refresh` call.
 | |
| 
 | |
| 
 | |
| .. method:: window.redrawwin()
 | |
| 
 | |
|    Touch the entire window, causing it to be completely redrawn on the next
 | |
|    :meth:`refresh` call.
 | |
| 
 | |
| 
 | |
| .. method:: window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])
 | |
| 
 | |
|    Update the display immediately (sync actual screen with previous
 | |
|    drawing/deleting methods).
 | |
| 
 | |
|    The 6 optional arguments can only be specified when the window is a pad created
 | |
|    with :func:`newpad`.  The additional parameters are needed to indicate what part
 | |
|    of the pad and screen are involved. *pminrow* and *pmincol* specify the upper
 | |
|    left-hand corner of the rectangle to be displayed in the pad.  *sminrow*,
 | |
|    *smincol*, *smaxrow*, and *smaxcol* specify the edges of the rectangle to be
 | |
|    displayed on the screen.  The lower right-hand corner of the rectangle to be
 | |
|    displayed in the pad is calculated from the screen coordinates, since the
 | |
|    rectangles must be the same size.  Both rectangles must be entirely contained
 | |
|    within their respective structures.  Negative values of *pminrow*, *pmincol*,
 | |
|    *sminrow*, or *smincol* are treated as if they were zero.
 | |
| 
 | |
| 
 | |
| .. method:: window.resize(nlines, ncols)
 | |
| 
 | |
|    Reallocate storage for a curses window to adjust its dimensions to the
 | |
|    specified values.  If either dimension is larger than the current values, the
 | |
|    window's data is filled with blanks that have the current background
 | |
|    rendition (as set by :meth:`bkgdset`) merged into them.
 | |
| 
 | |
| 
 | |
| .. method:: window.scroll([lines=1])
 | |
| 
 | |
|    Scroll the screen or scrolling region upward by *lines* lines.
 | |
| 
 | |
| 
 | |
| .. method:: window.scrollok(flag)
 | |
| 
 | |
|    Control what happens when the cursor of a window is moved off the edge of the
 | |
|    window or scrolling region, either as a result of a newline action on the bottom
 | |
|    line, or typing the last character of the last line.  If *flag* is ``False``, the
 | |
|    cursor is left on the bottom line.  If *flag* is ``True``, the window is scrolled up
 | |
|    one line.  Note that in order to get the physical scrolling effect on the
 | |
|    terminal, it is also necessary to call :meth:`idlok`.
 | |
| 
 | |
| 
 | |
| .. method:: window.setscrreg(top, bottom)
 | |
| 
 | |
|    Set the scrolling region from line *top* to line *bottom*. All scrolling actions
 | |
|    will take place in this region.
 | |
| 
 | |
| 
 | |
| .. method:: window.standend()
 | |
| 
 | |
|    Turn off the standout attribute.  On some terminals this has the side effect of
 | |
|    turning off all attributes.
 | |
| 
 | |
| 
 | |
| .. method:: window.standout()
 | |
| 
 | |
|    Turn on attribute *A_STANDOUT*.
 | |
| 
 | |
| 
 | |
| .. method:: window.subpad(begin_y, begin_x)
 | |
|             window.subpad(nlines, ncols, begin_y, begin_x)
 | |
| 
 | |
|    Return a sub-window, whose upper-left corner is at ``(begin_y, begin_x)``, and
 | |
|    whose width/height is *ncols*/*nlines*.
 | |
| 
 | |
| 
 | |
| .. method:: window.subwin(begin_y, begin_x)
 | |
|             window.subwin(nlines, ncols, begin_y, begin_x)
 | |
| 
 | |
|    Return a sub-window, whose upper-left corner is at ``(begin_y, begin_x)``, and
 | |
|    whose width/height is *ncols*/*nlines*.
 | |
| 
 | |
|    By default, the sub-window will extend from the specified position to the lower
 | |
|    right corner of the window.
 | |
| 
 | |
| 
 | |
| .. method:: window.syncdown()
 | |
| 
 | |
|    Touch each location in the window that has been touched in any of its ancestor
 | |
|    windows.  This routine is called by :meth:`refresh`, so it should almost never
 | |
|    be necessary to call it manually.
 | |
| 
 | |
| 
 | |
| .. method:: window.syncok(flag)
 | |
| 
 | |
|    If *flag* is ``True``, then :meth:`syncup` is called automatically
 | |
|    whenever there is a change in the window.
 | |
| 
 | |
| 
 | |
| .. method:: window.syncup()
 | |
| 
 | |
|    Touch all locations in ancestors of the window that have been changed in  the
 | |
|    window.
 | |
| 
 | |
| 
 | |
| .. method:: window.timeout(delay)
 | |
| 
 | |
|    Set blocking or non-blocking read behavior for the window.  If *delay* is
 | |
|    negative, blocking read is used (which will wait indefinitely for input).  If
 | |
|    *delay* is zero, then non-blocking read is used, and :meth:`getch` will
 | |
|    return ``-1`` if no input is waiting.  If *delay* is positive, then
 | |
|    :meth:`getch` will block for *delay* milliseconds, and return ``-1`` if there is
 | |
|    still no input at the end of that time.
 | |
| 
 | |
| 
 | |
| .. method:: window.touchline(start, count[, changed])
 | |
| 
 | |
|    Pretend *count* lines have been changed, starting with line *start*.  If
 | |
|    *changed* is supplied, it specifies whether the affected lines are marked as
 | |
|    having been changed (*changed*\ ``=True``) or unchanged (*changed*\ ``=False``).
 | |
| 
 | |
| 
 | |
| .. method:: window.touchwin()
 | |
| 
 | |
|    Pretend the whole window has been changed, for purposes of drawing
 | |
|    optimizations.
 | |
| 
 | |
| 
 | |
| .. method:: window.untouchwin()
 | |
| 
 | |
|    Mark all lines in  the  window  as unchanged since the last call to
 | |
|    :meth:`refresh`.
 | |
| 
 | |
| 
 | |
| .. method:: window.vline(ch, n[, attr])
 | |
|             window.vline(y, x, ch, n[, attr])
 | |
| 
 | |
|    Display a vertical line starting at ``(y, x)`` with length *n* consisting of the
 | |
|    character *ch* with attributes *attr*.
 | |
| 
 | |
| 
 | |
| Constants
 | |
| ---------
 | |
| 
 | |
| The :mod:`curses` module defines the following data members:
 | |
| 
 | |
| 
 | |
| .. data:: ERR
 | |
| 
 | |
|    Some curses routines  that  return  an integer, such as :meth:`~window.getch`, return
 | |
|    :const:`ERR` upon failure.
 | |
| 
 | |
| 
 | |
| .. data:: OK
 | |
| 
 | |
|    Some curses routines  that  return  an integer, such as  :func:`napms`, return
 | |
|    :const:`OK` upon success.
 | |
| 
 | |
| 
 | |
| .. data:: version
 | |
| .. data:: __version__
 | |
| 
 | |
|    A bytes object representing the current version of the module.
 | |
| 
 | |
| 
 | |
| .. data:: ncurses_version
 | |
| 
 | |
|    A named tuple containing the three components of the ncurses library
 | |
|    version: *major*, *minor*, and *patch*.  All values are integers.  The
 | |
|    components can also be accessed by name,  so ``curses.ncurses_version[0]``
 | |
|    is equivalent to ``curses.ncurses_version.major`` and so on.
 | |
| 
 | |
|    Availability: if the ncurses library is used.
 | |
| 
 | |
|    .. versionadded:: 3.8
 | |
| 
 | |
| .. data:: COLORS
 | |
| 
 | |
|    The maximum number of colors the terminal can support.
 | |
| 
 | |
| .. data:: COLOR_PAIRS
 | |
| 
 | |
|    The maximum number of color pairs the terminal can support.
 | |
| 
 | |
| Some constants are available to specify character cell attributes.
 | |
| The exact constants available are system dependent.
 | |
| 
 | |
| +------------------------+-------------------------------+
 | |
| | Attribute              | Meaning                       |
 | |
| +========================+===============================+
 | |
| | .. data:: A_ALTCHARSET | Alternate character set mode  |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_BLINK      | Blink mode                    |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_BOLD       | Bold mode                     |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_DIM        | Dim mode                      |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_INVIS      | Invisible or blank mode       |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_ITALIC     | Italic mode                   |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_NORMAL     | Normal attribute              |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_PROTECT    | Protected mode                |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_REVERSE    | Reverse background and        |
 | |
| |                        | foreground colors             |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_STANDOUT   | Standout mode                 |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_UNDERLINE  | Underline mode                |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_HORIZONTAL | Horizontal highlight          |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_LEFT       | Left highlight                |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_LOW        | Low highlight                 |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_RIGHT      | Right highlight               |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_TOP        | Top highlight                 |
 | |
| +------------------------+-------------------------------+
 | |
| | .. data:: A_VERTICAL   | Vertical highlight            |
 | |
| +------------------------+-------------------------------+
 | |
| 
 | |
| .. versionadded:: 3.7
 | |
|    ``A_ITALIC`` was added.
 | |
| 
 | |
| Several constants are available to extract corresponding attributes returned
 | |
| by some methods.
 | |
| 
 | |
| +-------------------------+-------------------------------+
 | |
| | Bit-mask                | Meaning                       |
 | |
| +=========================+===============================+
 | |
| |  .. data:: A_ATTRIBUTES | Bit-mask to extract           |
 | |
| |                         | attributes                    |
 | |
| +-------------------------+-------------------------------+
 | |
| |  .. data:: A_CHARTEXT   | Bit-mask to extract a         |
 | |
| |                         | character                     |
 | |
| +-------------------------+-------------------------------+
 | |
| |  .. data:: A_COLOR      | Bit-mask to extract           |
 | |
| |                         | color-pair field information  |
 | |
| +-------------------------+-------------------------------+
 | |
| 
 | |
| Keys are referred to by integer constants with names starting with  ``KEY_``.
 | |
| The exact keycaps available are system dependent.
 | |
| 
 | |
| .. XXX this table is far too large! should it be alphabetized?
 | |
| 
 | |
| +-------------------------+--------------------------------------------+
 | |
| | Key constant            | Key                                        |
 | |
| +=========================+============================================+
 | |
| | .. data:: KEY_MIN       | Minimum key value                          |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_BREAK     | Break key (unreliable)                     |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_DOWN      | Down-arrow                                 |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_UP        | Up-arrow                                   |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_LEFT      | Left-arrow                                 |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_RIGHT     | Right-arrow                                |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_HOME      | Home key (upward+left arrow)               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_BACKSPACE | Backspace (unreliable)                     |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_F0        | Function keys.  Up to 64 function keys are |
 | |
| |                         | supported.                                 |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_Fn        | Value of function key *n*                  |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_DL        | Delete line                                |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_IL        | Insert line                                |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_DC        | Delete character                           |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_IC        | Insert char or enter insert mode           |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_EIC       | Exit insert char mode                      |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_CLEAR     | Clear screen                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_EOS       | Clear to end of screen                     |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_EOL       | Clear to end of line                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SF        | Scroll 1 line forward                      |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SR        | Scroll 1 line backward (reverse)           |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_NPAGE     | Next page                                  |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_PPAGE     | Previous page                              |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_STAB      | Set tab                                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_CTAB      | Clear tab                                  |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_CATAB     | Clear all tabs                             |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_ENTER     | Enter or send (unreliable)                 |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SRESET    | Soft (partial) reset (unreliable)          |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_RESET     | Reset or hard reset (unreliable)           |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_PRINT     | Print                                      |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_LL        | Home down or bottom (lower left)           |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_A1        | Upper left of keypad                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_A3        | Upper right of keypad                      |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_B2        | Center of keypad                           |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_C1        | Lower left of keypad                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_C3        | Lower right of keypad                      |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_BTAB      | Back tab                                   |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_BEG       | Beg (beginning)                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_CANCEL    | Cancel                                     |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_CLOSE     | Close                                      |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_COMMAND   | Cmd (command)                              |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_COPY      | Copy                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_CREATE    | Create                                     |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_END       | End                                        |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_EXIT      | Exit                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_FIND      | Find                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_HELP      | Help                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_MARK      | Mark                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_MESSAGE   | Message                                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_MOVE      | Move                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_NEXT      | Next                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_OPEN      | Open                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_OPTIONS   | Options                                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_PREVIOUS  | Prev (previous)                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_REDO      | Redo                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_REFERENCE | Ref (reference)                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_REFRESH   | Refresh                                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_REPLACE   | Replace                                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_RESTART   | Restart                                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_RESUME    | Resume                                     |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SAVE      | Save                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SBEG      | Shifted Beg (beginning)                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SCANCEL   | Shifted Cancel                             |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SCOMMAND  | Shifted Command                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SCOPY     | Shifted Copy                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SCREATE   | Shifted Create                             |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SDC       | Shifted Delete char                        |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SDL       | Shifted Delete line                        |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SELECT    | Select                                     |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SEND      | Shifted End                                |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SEOL      | Shifted Clear line                         |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SEXIT     | Shifted Exit                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SFIND     | Shifted Find                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SHELP     | Shifted Help                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SHOME     | Shifted Home                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SIC       | Shifted Input                              |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SLEFT     | Shifted Left arrow                         |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SMESSAGE  | Shifted Message                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SMOVE     | Shifted Move                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SNEXT     | Shifted Next                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SOPTIONS  | Shifted Options                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SPREVIOUS | Shifted Prev                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SPRINT    | Shifted Print                              |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SREDO     | Shifted Redo                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SREPLACE  | Shifted Replace                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SRIGHT    | Shifted Right arrow                        |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SRSUME    | Shifted Resume                             |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SSAVE     | Shifted Save                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SSUSPEND  | Shifted Suspend                            |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SUNDO     | Shifted Undo                               |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_SUSPEND   | Suspend                                    |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_UNDO      | Undo                                       |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_MOUSE     | Mouse event has occurred                   |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_RESIZE    | Terminal resize event                      |
 | |
| +-------------------------+--------------------------------------------+
 | |
| | .. data:: KEY_MAX       | Maximum key value                          |
 | |
| +-------------------------+--------------------------------------------+
 | |
| 
 | |
| On VT100s and their software emulations, such as X terminal emulators, there are
 | |
| normally at least four function keys (:const:`KEY_F1 <KEY_Fn>`, :const:`KEY_F2 <KEY_Fn>`,
 | |
| :const:`KEY_F3 <KEY_Fn>`, :const:`KEY_F4 <KEY_Fn>`) available, and the arrow keys mapped to
 | |
| :const:`KEY_UP`, :const:`KEY_DOWN`, :const:`KEY_LEFT` and :const:`KEY_RIGHT` in
 | |
| the obvious way.  If your machine has a PC keyboard, it is safe to expect arrow
 | |
| keys and twelve function keys (older PC keyboards may have only ten function
 | |
| keys); also, the following keypad mappings are standard:
 | |
| 
 | |
| +------------------+-----------+
 | |
| | Keycap           | Constant  |
 | |
| +==================+===========+
 | |
| | :kbd:`Insert`    | KEY_IC    |
 | |
| +------------------+-----------+
 | |
| | :kbd:`Delete`    | KEY_DC    |
 | |
| +------------------+-----------+
 | |
| | :kbd:`Home`      | KEY_HOME  |
 | |
| +------------------+-----------+
 | |
| | :kbd:`End`       | KEY_END   |
 | |
| +------------------+-----------+
 | |
| | :kbd:`Page Up`   | KEY_PPAGE |
 | |
| +------------------+-----------+
 | |
| | :kbd:`Page Down` | KEY_NPAGE |
 | |
| +------------------+-----------+
 | |
| 
 | |
| The following table lists characters from the alternate character set. These are
 | |
| inherited from the VT100 terminal, and will generally be  available on software
 | |
| emulations such as X terminals.  When there is no graphic available, curses
 | |
| falls back on a crude printable ASCII approximation.
 | |
| 
 | |
| .. note::
 | |
| 
 | |
|    These are available only after :func:`initscr` has  been called.
 | |
| 
 | |
| +------------------------+------------------------------------------+
 | |
| | ACS code               | Meaning                                  |
 | |
| +========================+==========================================+
 | |
| | .. data:: ACS_BBSS     | alternate name for upper right corner    |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_BLOCK    | solid square block                       |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_BOARD    | board of squares                         |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_BSBS     | alternate name for horizontal line       |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_BSSB     | alternate name for upper left corner     |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_BSSS     | alternate name for top tee               |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_BTEE     | bottom tee                               |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_BULLET   | bullet                                   |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_CKBOARD  | checker board (stipple)                  |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_DARROW   | arrow pointing down                      |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_DEGREE   | degree symbol                            |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_DIAMOND  | diamond                                  |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_GEQUAL   | greater-than-or-equal-to                 |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_HLINE    | horizontal line                          |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_LANTERN  | lantern symbol                           |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_LARROW   | left arrow                               |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_LEQUAL   | less-than-or-equal-to                    |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_LLCORNER | lower left-hand corner                   |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_LRCORNER | lower right-hand corner                  |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_LTEE     | left tee                                 |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_NEQUAL   | not-equal sign                           |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_PI       | letter pi                                |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_PLMINUS  | plus-or-minus sign                       |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_PLUS     | big plus sign                            |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_RARROW   | right arrow                              |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_RTEE     | right tee                                |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_S1       | scan line 1                              |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_S3       | scan line 3                              |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_S7       | scan line 7                              |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_S9       | scan line 9                              |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_SBBS     | alternate name for lower right corner    |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_SBSB     | alternate name for vertical line         |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_SBSS     | alternate name for right tee             |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_SSBB     | alternate name for lower left corner     |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_SSBS     | alternate name for bottom tee            |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_SSSB     | alternate name for left tee              |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_SSSS     | alternate name for crossover or big plus |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_STERLING | pound sterling                           |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_TTEE     | top tee                                  |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_UARROW   | up arrow                                 |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_ULCORNER | upper left corner                        |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_URCORNER | upper right corner                       |
 | |
| +------------------------+------------------------------------------+
 | |
| | .. data:: ACS_VLINE    | vertical line                            |
 | |
| +------------------------+------------------------------------------+
 | |
| 
 | |
| The following table lists mouse button constants used by :meth:`getmouse`:
 | |
| 
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | Mouse button constant            | Meaning                                     |
 | |
| +==================================+=============================================+
 | |
| | .. data:: BUTTONn_PRESSED        | Mouse button *n* pressed                    |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | .. data:: BUTTONn_RELEASED       | Mouse button *n* released                   |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | .. data:: BUTTONn_CLICKED        | Mouse button *n* clicked                    |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | .. data:: BUTTONn_DOUBLE_CLICKED | Mouse button *n* double clicked             |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | .. data:: BUTTONn_TRIPLE_CLICKED | Mouse button *n* triple clicked             |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | .. data:: BUTTON_SHIFT           | Shift was down during button state change   |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | .. data:: BUTTON_CTRL            | Control was down during button state change |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| | .. data:: BUTTON_ALT             | Control was down during button state change |
 | |
| +----------------------------------+---------------------------------------------+
 | |
| 
 | |
|    .. versionchanged:: 3.10
 | |
|       The ``BUTTON5_*`` constants are now exposed if they are provided by the
 | |
|       underlying curses library.
 | |
| 
 | |
| The following table lists the predefined colors:
 | |
| 
 | |
| +-------------------------+----------------------------+
 | |
| | Constant                | Color                      |
 | |
| +=========================+============================+
 | |
| | .. data:: COLOR_BLACK   | Black                      |
 | |
| +-------------------------+----------------------------+
 | |
| | .. data:: COLOR_BLUE    | Blue                       |
 | |
| +-------------------------+----------------------------+
 | |
| | .. data:: COLOR_CYAN    | Cyan (light greenish blue) |
 | |
| +-------------------------+----------------------------+
 | |
| | .. data:: COLOR_GREEN   | Green                      |
 | |
| +-------------------------+----------------------------+
 | |
| | .. data:: COLOR_MAGENTA | Magenta (purplish red)     |
 | |
| +-------------------------+----------------------------+
 | |
| | .. data:: COLOR_RED     | Red                        |
 | |
| +-------------------------+----------------------------+
 | |
| | .. data:: COLOR_WHITE   | White                      |
 | |
| +-------------------------+----------------------------+
 | |
| | .. data:: COLOR_YELLOW  | Yellow                     |
 | |
| +-------------------------+----------------------------+
 | |
| 
 | |
| 
 | |
| :mod:`curses.textpad` --- Text input widget for curses programs
 | |
| ===============================================================
 | |
| 
 | |
| .. module:: curses.textpad
 | |
|    :synopsis: Emacs-like input editing in a curses window.
 | |
| .. moduleauthor:: Eric Raymond <esr@thyrsus.com>
 | |
| .. sectionauthor:: Eric Raymond <esr@thyrsus.com>
 | |
| 
 | |
| 
 | |
| The :mod:`curses.textpad` module provides a :class:`Textbox` class that handles
 | |
| elementary text editing in a curses window, supporting a set of keybindings
 | |
| resembling those of Emacs (thus, also of Netscape Navigator, BBedit 6.x,
 | |
| FrameMaker, and many other programs).  The module also provides a
 | |
| rectangle-drawing function useful for framing text boxes or for other purposes.
 | |
| 
 | |
| The module :mod:`curses.textpad` defines the following function:
 | |
| 
 | |
| 
 | |
| .. function:: rectangle(win, uly, ulx, lry, lrx)
 | |
| 
 | |
|    Draw a rectangle.  The first argument must be a window object; the remaining
 | |
|    arguments are coordinates relative to that window.  The second and third
 | |
|    arguments are the y and x coordinates of the upper left hand corner of the
 | |
|    rectangle to be drawn; the fourth and fifth arguments are the y and x
 | |
|    coordinates of the lower right hand corner. The rectangle will be drawn using
 | |
|    VT100/IBM PC forms characters on terminals that make this possible (including
 | |
|    xterm and most other software terminal emulators).  Otherwise it will be drawn
 | |
|    with ASCII  dashes, vertical bars, and plus signs.
 | |
| 
 | |
| 
 | |
| .. _curses-textpad-objects:
 | |
| 
 | |
| Textbox objects
 | |
| ---------------
 | |
| 
 | |
| You can instantiate a :class:`Textbox` object as follows:
 | |
| 
 | |
| 
 | |
| .. class:: Textbox(win)
 | |
| 
 | |
|    Return a textbox widget object.  The *win* argument should be a curses
 | |
|    :ref:`window <curses-window-objects>` object in which the textbox is to
 | |
|    be contained. The edit cursor of the textbox is initially located at the
 | |
|    upper left hand corner of the containing window, with coordinates ``(0, 0)``.
 | |
|    The instance's :attr:`stripspaces` flag is initially on.
 | |
| 
 | |
|    :class:`Textbox` objects have the following methods:
 | |
| 
 | |
| 
 | |
|    .. method:: edit([validator])
 | |
| 
 | |
|       This is the entry point you will normally use.  It accepts editing
 | |
|       keystrokes until one of the termination keystrokes is entered.  If
 | |
|       *validator* is supplied, it must be a function.  It will be called for
 | |
|       each keystroke entered with the keystroke as a parameter; command dispatch
 | |
|       is done on the result. This method returns the window contents as a
 | |
|       string; whether blanks in the window are included is affected by the
 | |
|       :attr:`stripspaces` attribute.
 | |
| 
 | |
| 
 | |
|    .. method:: do_command(ch)
 | |
| 
 | |
|       Process a single command keystroke.  Here are the supported special
 | |
|       keystrokes:
 | |
| 
 | |
|       +------------------+-------------------------------------------+
 | |
|       | Keystroke        | Action                                    |
 | |
|       +==================+===========================================+
 | |
|       | :kbd:`Control-A` | Go to left edge of window.                |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-B` | Cursor left, wrapping to previous line if |
 | |
|       |                  | appropriate.                              |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-D` | Delete character under cursor.            |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-E` | Go to right edge (stripspaces off) or end |
 | |
|       |                  | of line (stripspaces on).                 |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-F` | Cursor right, wrapping to next line when  |
 | |
|       |                  | appropriate.                              |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-G` | Terminate, returning the window contents. |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-H` | Delete character backward.                |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-J` | Terminate if the window is 1 line,        |
 | |
|       |                  | otherwise insert newline.                 |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-K` | If line is blank, delete it, otherwise    |
 | |
|       |                  | clear to end of line.                     |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-L` | Refresh screen.                           |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-N` | Cursor down; move down one line.          |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-O` | Insert a blank line at cursor location.   |
 | |
|       +------------------+-------------------------------------------+
 | |
|       | :kbd:`Control-P` | Cursor up; move up one line.              |
 | |
|       +------------------+-------------------------------------------+
 | |
| 
 | |
|       Move operations do nothing if the cursor is at an edge where the movement
 | |
|       is not possible.  The following synonyms are supported where possible:
 | |
| 
 | |
|       +--------------------------------+------------------+
 | |
|       | Constant                       | Keystroke        |
 | |
|       +================================+==================+
 | |
|       | :const:`~curses.KEY_LEFT`      | :kbd:`Control-B` |
 | |
|       +--------------------------------+------------------+
 | |
|       | :const:`~curses.KEY_RIGHT`     | :kbd:`Control-F` |
 | |
|       +--------------------------------+------------------+
 | |
|       | :const:`~curses.KEY_UP`        | :kbd:`Control-P` |
 | |
|       +--------------------------------+------------------+
 | |
|       | :const:`~curses.KEY_DOWN`      | :kbd:`Control-N` |
 | |
|       +--------------------------------+------------------+
 | |
|       | :const:`~curses.KEY_BACKSPACE` | :kbd:`Control-h` |
 | |
|       +--------------------------------+------------------+
 | |
| 
 | |
|       All other keystrokes are treated as a command to insert the given
 | |
|       character and move right (with line wrapping).
 | |
| 
 | |
| 
 | |
|    .. method:: gather()
 | |
| 
 | |
|       Return the window contents as a string; whether blanks in the
 | |
|       window are included is affected by the :attr:`stripspaces` member.
 | |
| 
 | |
| 
 | |
|    .. attribute:: stripspaces
 | |
| 
 | |
|       This attribute is a flag which controls the interpretation of blanks in
 | |
|       the window.  When it is on, trailing blanks on each line are ignored; any
 | |
|       cursor motion that would land the cursor on a trailing blank goes to the
 | |
|       end of that line instead, and trailing blanks are stripped when the window
 | |
|       contents are gathered.
 | 
