@@ -295,17 +295,21 @@ underline, reverse code, or in color. They'll be explained in more detail in
295295the next subsection.
296296
297297
298- The :meth: `~curses.window.addstr ` method takes a Python string or
299- bytestring as the value to be displayed. The contents of bytestrings
300- are sent to the terminal as-is. Strings are encoded to bytes using
301- the value of the window's :attr: `~window.encoding ` attribute; this defaults to
302- the default system encoding as returned by :func: `locale.getencoding `.
298+ The :meth: `~curses.window.addstr ` method takes a Python string, bytestring
299+ or :class: `~curses.complexstr ` as the value to be displayed. The contents
300+ of bytestrings are sent to the terminal as-is.
301+ On a build without wide-character support strings are encoded
302+ using the value of the window's :attr: `~window.encoding ` attribute;
303+ this defaults to the default system encoding
304+ as returned by :func: `locale.getencoding `.
303305
304306The :meth: `~curses.window.addch ` methods take a character, which can be
305- either a string of length 1, a bytestring of length 1, or an integer.
307+ either a string of length 1, a bytestring of length 1, an integer, or a
308+ :class: `~curses.complexchar `.
306309
307- Constants are provided for extension characters; these constants are
308- integers greater than 255. For example, :const: `ACS_PLMINUS ` is a +/-
310+ Constants are provided for the characters of the terminal's alternate
311+ character set.
312+ For example, :const: `ACS_PLMINUS ` is a +/-
309313symbol, and :const: `ACS_ULCORNER ` is the upper left corner of a box
310314(handy for drawing borders). You can also use the appropriate Unicode
311315character.
@@ -319,11 +323,11 @@ won't be distracting; it can be confusing to have the cursor blinking at some
319323apparently random location.
320324
321325If your application doesn't need a blinking cursor at all, you can
322- call ``curs_set(False) `` to make it invisible. For compatibility
323- with older curses versions, there's a `` leaveok(bool) `` function
324- that's a synonym for :func: ` ~curses.curs_set `. When * bool * is true, the
325- curses library will attempt to suppress the flashing cursor, and you
326- won't need to worry about leaving it in odd locations .
326+ call ``curs_set(False) `` to make it invisible.
327+ The window method :meth: ` ~curses.window. leaveok` does something different:
328+ when its argument is true,
329+ curses leaves the cursor wherever the last update put it,
330+ instead of moving it back to the window's cursor position .
327331
328332
329333Attributes and Color
@@ -364,6 +368,14 @@ could code::
364368 curses.A_REVERSE)
365369 stdscr.refresh()
366370
371+ A :class: `~curses.complexchar ` carries its attributes and color pair
372+ together with the text of one character cell,
373+ and a :class: `~curses.complexstr ` is a run of such cells.
374+ They are what :meth: `~curses.window.in_wch ` and
375+ :meth: `~curses.window.in_wchstr ` return,
376+ so a part of the screen can be read and written back
377+ with its appearance intact.
378+
367379The curses library also supports color on those terminals that provide it. The
368380most common such terminal is probably the Linux console, followed by color
369381xterms.
@@ -429,40 +441,48 @@ The C curses library offers only very simple input mechanisms. Python's
429441:mod: `curses ` module adds a basic text-input widget. (Other libraries
430442such as :pypi: `Urwid ` have more extensive collections of widgets.)
431443
432- There are two methods for getting input from a window:
444+ There are three methods for getting input from a window:
433445
434- * :meth: `~curses.window.getch ` refreshes the screen and then waits for
446+ * :meth: `~curses.window.get_wch ` refreshes the screen and then waits for
435447 the user to hit a key, displaying the key if :func: `~curses.echo ` has been
436448 called earlier. You can optionally specify a coordinate to which
437449 the cursor should be moved before pausing.
438450
439- * :meth: `~curses.window.getkey ` does the same thing but converts the
440- integer to a string. Individual characters are returned as
441- 1-character strings, and special keys such as function keys return
442- longer strings containing a key name such as ``KEY_UP `` or ``^G ``.
451+ * :meth: `~curses.window.getch ` does the same thing but returns the code of
452+ the key instead of a character.
453+ With ncurses this is a single byte of the key's encoding in the current
454+ locale, so a character encoded with several bytes takes several calls,
455+ one byte per call.
456+
457+ * :meth: `~curses.window.getkey ` does the same as :meth: `!getch ` but returns
458+ a string:
459+ an ordinary key as a 1-character string,
460+ and a special key as its name, such as ``KEY_UP ``.
443461
444462It's possible to not wait for the user using the
445463:meth: `~curses.window.nodelay ` window method. After ``nodelay(True) ``,
446- :meth: `!getch ` and :meth: `!getkey ` for the window become
447- non-blocking. To signal that no input is ready, :meth: `!getch ` returns
448- ``curses.ERR `` (a value of -1) and :meth: `!getkey ` raises an exception.
464+ the reads for the window become non-blocking.
465+ To signal that no input is ready,
466+ :meth: `!get_wch ` and :meth: `!getkey ` raise an exception,
467+ and :meth: `!getch ` returns ``-1 ``.
449468There's also a :func: `~curses.halfdelay ` function, which can be used to (in
450- effect) set a timer on each :meth: ` !getch ` ; if no input becomes
469+ effect) set a timer on each read ; if no input becomes
451470available within a specified delay (measured in tenths of a second),
452- curses raises an exception .
471+ the read fails the same way .
453472
454- The :meth: `!getch ` method returns an integer; if it's between 0 and 255, it
455- represents the ASCII code of the key pressed. Values greater than 255 are
456- special keys such as Page Up, Home, or the cursor keys. You can compare the
457- value returned to constants such as :const: `curses.KEY_PPAGE `,
473+ Special keys such as Page Up, Home, or the cursor keys are returned by all
474+ three as one of the :ref: `KEY_* constants <curses-key-constants >`,
475+ all larger than 255.
476+ You can compare the value returned to constants such as
477+ :const: `curses.KEY_PPAGE `,
458478:const: `curses.KEY_HOME `, or :const: `curses.KEY_LEFT `. The main loop of
459479your program may look something like this::
460480
461481 while True:
462- c = stdscr.getch ()
463- if c == ord( 'p') :
482+ c = stdscr.get_wch ()
483+ if c == 'p':
464484 PrintDocument()
465- elif c == ord( 'q') :
485+ elif c == 'q':
466486 break # Exit the while loop
467487 elif c == curses.KEY_HOME:
468488 x = y = 0
@@ -474,16 +494,17 @@ conversion functions that take either integer or 1-character-string arguments
474494and return the same type. For example, :func: `curses.ascii.ctrl ` returns the
475495control character corresponding to its argument.
476496
477- There's also a method to retrieve an entire string ,
478- :meth: `~curses.window.getstr `. It isn't used very often, because its
497+ There's also a method to retrieve an entire line ,
498+ :meth: `~curses.window.get_wstr `. It isn't used very often, because its
479499functionality is quite limited; the only editing keys available are
480- the backspace key and the Enter key, which terminates the string. It
481- can optionally be limited to a fixed number of characters. ::
500+ the erase and kill characters, and the Enter key, which terminates the line.
501+ It can optionally be limited to a fixed number of characters;
502+ :meth: `~curses.window.getstr ` returns a bytes object instead. ::
482503
483504 curses.echo() # Enable echoing of characters
484505
485- # Get a 15-character string , with the cursor on the top line
486- s = stdscr.getstr (0,0, 15)
506+ # Get a line of at most 15 characters , with the cursor on the top line
507+ s = stdscr.get_wstr (0,0, 15)
487508
488509The :mod: `curses.textpad ` module supplies a text box that supports an
489510Emacs-like set of keybindings. Various methods of the
0 commit comments