Документация Python неофициальный перевод
Содержание страницы

16.10. curses – Обработка терминала для символьных дисплеевcurses – Terminal handling for character-cell displays


Модуль curses предоставляет интерфейс к библиотеке curses, которая является де-факто стандартом для переносимого продвинутого управления терминалом.

Хотя curses наиболее широко используется в среде Unix, версии доступны для Windows, DOS и, возможно, других систем. Этот модуль-расширение разработан для соответствия API ncurses – библиотеки curses с открытым исходным кодом, работающей на Linux и BSD-вариантах Unix.

Примечание

Начиная с версии 5.4, библиотека ncurses решает, как интерпретировать не-ASCII данные с помощью функции nl_langinfo. Это означает, что в приложении необходимо вызвать locale.setlocale() и кодировать строки Unicode, используя одну из доступных кодировок системы. В этом примере используется системная кодировка по умолчанию:

import locale
locale.setlocale(locale.LC_ALL, '')
code = locale.getpreferredencoding()

Затем используйте code в качестве кодировки для вызовов str.encode().

См. также

Модуль curses.ascii
Утилиты для работы с ASCII-символами, независимо от настроек локали.
Модуль curses.panel
Расширение стека панелей, добавляющее глубину окнам curses.
Модуль curses.textpad
Виджет редактируемого текста для curses с поддержкой привязок, похожих на Emacs.
Программирование с curses в Python
Учебный материал по использованию curses с Python, автор Эндрю Кучлинг и Эрик Рэймонд.

В каталоге Tools/demo/ дистрибутива исходного кода Python содержатся примеры программ, использующих привязки curses из этого модуля.

16.10.1. ФункцииFunctions

Модуль curses определяет следующее исключение:

exception curses.error

Исключение, возникающее, когда функция библиотеки curses возвращает ошибку.

Примечание

Всякий раз, когда аргументы x или y функции или метода являются необязательными, они по умолчанию равны текущей позиции курсора. Когда attr необязателен, он по умолчанию равен A_NORMAL.

Модуль curses определяет следующие функции:

curses.baudrate()

Возвращает скорость вывода терминала в битах в секунду. На программных терминальных эмуляторах она будет иметь фиксированное высокое значение. Включена по историческим причинам; в прежние времена она использовалась для написания циклов вывода с временными задержками и иногда для изменения интерфейсов в зависимости от скорости линии.

curses.beep()

Издаёт короткий звуковой сигнал.

curses.can_change_color()

Возвращает True или False в зависимости от того, может ли программист изменять цвета, отображаемые терминалом.

curses.cbreak()

Входит в режим cbreak. В режиме cbreak (иногда называемом «редким» режимом) нормальная буферизация строк tty отключается, и символы становятся доступными для чтения по одному. Однако, в отличие от raw-режима, специальные символы (прерывание, выход, приостановка и управление потоком) сохраняют своё воздействие на драйвер tty и вызывающую программу. Вызов сначала raw(), затем cbreak() оставляет терминал в режиме cbreak.

curses.color_content(color_number)

Возвращает интенсивность красного, зеленого и синего (RGB) компонентов в цвете color_number, который должен находиться между 0 и COLORS. Возвращается кортеж из трёх элементов, содержащий значения R, G, B для указанного цвета, которые будут находиться между 0 (нет компонента) и 1000 (максимальное значение компонента).

curses.color_pair(color_number)

Возвращает значение атрибута для отображения текста указанным цветом. Это значение атрибута можно комбинировать с A_STANDOUT, A_REVERSE и другими атрибутами A_*. pair_number() – это функция, обратная данной.

curses.curs_set(visibility)

Устанавливает состояние курсора. visibility может быть установлено в 0, 1 или 2 для невидимого, нормального или очень видимого режима. Если терминал поддерживает запрошенную видимость, возвращается предыдущее состояние курсора; в противном случае вызывается исключение. На многих терминалах режим «visible» – это подчёркнутый курсор, а режим «very visible» – блочный курсор.

curses.def_prog_mode()

Сохраняет текущий режим терминала как «программный» режим – режим, в котором работающая программа использует curses. (Его аналог – «shell» режим, когда программа не в curses.) Последующие вызовы reset_prog_mode() восстановят этот режим.

curses.def_shell_mode()

Сохраняет текущий режим терминала как «shell» режим – режим, в котором работающая программа не использует curses. (Его аналог – «программный» режим, когда программа использует возможности curses.) Последующие вызовы reset_shell_mode() восстановят этот режим.

curses.delay_output(ms)

Вставляет паузу в вывод на ms миллисекунд.

curses.doupdate()

Обновляет физический экран. Библиотека curses хранит две структуры данных: одна представляет текущее содержимое физического экрана, а виртуальный экран представляет желаемое следующее состояние. Процедура doupdate() обновляет физический экран, приводя его в соответствие с виртуальным.

Виртуальный экран можно обновить вызовом noutrefresh() после выполнения операций записи, таких как addstr(), в окне. Обычный вызов refresh() – это просто noutrefresh(), за которым следует doupdate(); если нужно обновить несколько окон, можно ускорить работу и уменьшить мерцание экрана, выполнив вызовы noutrefresh() для всех окон, а затем один doupdate().

curses.echo()

Включает режим эхоповтора. В режиме эхоповтора каждый введённый символ отображается на экране по мере ввода.

curses.endwin()

Деинициализирует библиотеку и возвращает терминал в обычное состояние.

curses.erasechar()

Возвращает текущий символ стирания пользователя. В операционных системах Unix это свойство управляющего tty программы curses и не устанавливается самой библиотекой curses.

curses.filter()

Процедура filter(), если используется, должна быть вызвана перед вызовом initscr(). Эффект заключается в том, что во время этих вызовов LINES устанавливается в 1; возможности clear, cup, cud, cud1, cuu1, cuu, vpa отключаются; а строка home устанавливается в значение cr. В результате курсор ограничен текущей строкой, и обновления экрана также ограничены. Это может использоваться для включения посимвольного редактирования строки, не затрагивая остальную часть экрана.

curses.flash()

Выполняет вспышку экрана. То есть переключает его в режим инвертированного видео и обратно через короткий интервал. Некоторые предпочитают такой «видимый звонок» звуковому сигналу внимания, создаваемому beep().

curses.flushinp()

Очищает все входные буферы. Отбрасывает любой упреждающий ввод, который был набран пользователем, но ещё не обработан программой.

curses.getmouse()

После того, как getch() возвращает KEY_MOUSE в качестве сигнала о событии мыши, этот метод следует вызвать для получения поставленного в очередь события мыши, представленного в виде 5-кортежа (id, x, y, z, bstate). id – это идентификатор, используемый для различения нескольких устройств, а x, y, z – координаты события. (z в настоящее время не используется.) bstate – целое число, биты которого устанавливаются для указания типа события и представляют собой побитовое ИЛИ одной или нескольких следующих констант, где n – номер кнопки от 1 до 4: BUTTONn_PRESSED, BUTTONn_RELEASED, BUTTONn_CLICKED, BUTTONn_DOUBLE_CLICKED, BUTTONn_TRIPLE_CLICKED, BUTTON_SHIFT, BUTTON_CTRL, BUTTON_ALT.

curses.getsyx()

Возвращает текущие координаты виртуального курсора экрана по y и x. Если leaveok в данный момент истинно, возвращается -1,-1.

curses.getwin(file)

Читает данные окна, сохранённые в файле предыдущим вызовом putwin(). Затем процедура создаёт и инициализирует новое окно, используя эти данные, и возвращает объект нового окна.

curses.has_colors()

Возвращает True, если терминал может отображать цвета; в противном случае возвращает False.

curses.has_ic()

Возвращает True, если терминал поддерживает вставку и удаление символов. Эта функция включена только по историческим причинам, так как все современные программные эмуляторы терминала имеют такие возможности.

curses.has_il()

Возвращает True, если терминал поддерживает вставку и удаление строк, или может имитировать их с помощью областей прокрутки. Эта функция включена только по историческим причинам, так как все современные программные эмуляторы терминала имеют такие возможности.

curses.has_key(ch)

Принимает значение клавиши ch и возвращает True, если текущий тип терминала распознаёт клавишу с таким значением.

curses.halfdelay(tenths)

Используется для режима половинной задержки, который похож на режим cbreak тем, что символы, введённые пользователем, сразу становятся доступны программе. Однако после блокировки на tenths десятых долей секунды вызывается исключение, если ничего не было введено. Значение tenths должно быть числом между 1 и 255. Используйте nocbreak() для выхода из режима половинной задержки.

curses.init_color(color_number, r, g, b)

Изменяет определение цвета: принимает номер изменяемого цвета и три значения RGB (для количеств красной, зелёной и синей составляющих). Значение color_number должно быть от 0 до COLORS. Каждое из r, g, b должно быть значением от 0 до 1000. При использовании init_color() все вхождения этого цвета на экране немедленно изменяются на новое определение. На большинстве терминалов эта функция ничего не делает; она активна только если can_change_color() возвращает 1.

curses.init_pair(pair_number, fg, bg)

Изменяет определение цветовой пары. Принимает три аргумента: номер изменяемой цветовой пары, номер цвета переднего плана и номер цвета фона. Значение pair_number должно быть между 1 и COLOR_PAIRS - 1 (цветовая пара 0 жёстко задана как белый на чёрном и не может быть изменена). Значения аргументов fg и bg должны быть между 0 и COLORS. Если цветовая пара была предварительно инициализирована, экран обновляется, и все вхождения этой цветовой пары заменяются новым определением.

curses.initscr()

Инициализирует библиотеку. Возвращает объект window, представляющий весь экран.

Примечание

Если при открытии терминала возникает ошибка, базовая библиотека curses может вызвать завершение интерпретатора.

curses.is_term_resized(nlines, ncols)

Возвращает True, если resize_term() изменит структуру окна, в противном случае False.

curses.isendwin()

Возвращает True, если endwin() был вызван (то есть библиотека curses была деинициализирована).

curses.keyname(k)

Возвращает имя клавиши с номером k. Имя клавиши, генерирующей печатный ASCII-символ, – это сам символ клавиши. Имя комбинации с управляющей клавишей представляет собой строку из двух символов: знак «^» и соответствующий печатный ASCII-символ. Имя комбинации с alt (128–255) – это строка с префиксом «M-», за которым следует имя соответствующего ASCII-символа.

curses.killchar()

Возвращает текущий символ удаления строки пользователя. В операционных системах Unix это свойство управляющего tty программы curses и не устанавливается самой библиотекой curses.

curses.longname()

Возвращает строку, содержащую поле длинного имени terminfo, описывающее текущий терминал. Максимальная длина подробного описания – 128 символов. Оно определяется только после вызова initscr().

curses.meta(yes)

Если yes равно 1, разрешает ввод 8-битных символов. Если yes равно 0, разрешает только 7-битные символы.

curses.mouseinterval(interval)

Устанавливает максимальное время в миллисекундах, которое может пройти между событиями нажатия и отпускания, чтобы они были распознаны как щелчок, и возвращает предыдущее значение интервала. Значение по умолчанию – 200 мс, то есть одна пятая секунды.

curses.mousemask(mousemask)

Устанавливает, какие события мыши должны сообщаться, и возвращает кортеж (availmask, oldmask). availmask указывает, какие из указанных событий мыши могут быть сообщены; при полном сбое возвращается 0. oldmask – предыдущее значение маски событий мыши для данного окна. Если эта функция никогда не вызывается, события мыши никогда не сообщаются.

curses.napms(ms)

Приостанавливает выполнение на ms миллисекунд.

curses.newpad(nlines, ncols)

Создаёт и возвращает указатель на новую структуру данных pad с указанным количеством строк и столбцов. Pad возвращается как объект окна.

Пад похож на окно, за исключением того, что он не ограничен размером экрана и не обязательно связан с определённой частью экрана. Пады можно использовать, когда требуется большое окно, и на экране в каждый момент времени видна только его часть. Автоматическое обновление падов (например, при прокрутке или эхо-выводе ввода) не происходит. Методы refresh() и noutrefresh() пада требуют 6 аргументов, чтобы указать, какая часть пада должна отображаться и где на экране её показывать. Аргументы: pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol; аргументы p относятся к верхнему левому углу отображаемой области пада, а аргументы s определяют прямоугольную область отсечения на экране, в которой будет отображаться область пада.

curses.newwin(nlines, ncols)
curses.newwin(nlines, ncols, begin_y, begin_x)

Возвращает новое окно, левый верхний угол которого находится в (begin_y, begin_x), а высота/ширина равны nlines/ncols.

По умолчанию окно будет расширяться от указанной позиции до нижнего правого угла экрана.

curses.nl()

Включает режим перевода строки. В этом режиме клавиша возврата каретки преобразуется в перевод строки при вводе, а перевод строки преобразуется в возврат каретки и перевод строки при выводе. Режим перевода строки изначально включен.

curses.nocbreak()

Выходит из режима cbreak. Возвращается к обычному «cooked»-режиму с буферизацией строк.

curses.noecho()

Выходит из режима эхопечати. Эхо-вывод вводимых символов отключается.

curses.nonl()

Выходит из режима перевода строки. Отключает преобразование возврата каретки в перевод строки при вводе и отключает низкоуровневое преобразование перевода строки в возврат каретки/перевод строки при выводе (но это не меняет поведение addch('\n'), которое всегда выполняет эквивалент возврата каретки и перевода строки на виртуальном экране). При отключенном преобразовании curses иногда может немного ускорить вертикальное перемещение; также он сможет обнаруживать нажатие клавиши возврата каретки при вводе.

curses.noqiflush()

При использовании процедуры noqiflush() обычная очистка очередей ввода и вывода, связанных с символами INTR, QUIT и SUSP, выполняться не будет. Может потребоваться вызвать noqiflush() в обработчике сигнала, если нужно, чтобы вывод продолжался так, как если бы прерывания не было, после выхода из обработчика.

curses.noraw()

Выходит из режима raw. Возвращается к обычному «cooked»-режиму с буферизацией строк.

curses.pair_content(pair_number)

Возвращает кортеж (fg, bg), содержащий цвета для запрошенной пары цветов. Значение pair_number должно находиться в диапазоне от 1 до COLOR_PAIRS - 1.

curses.pair_number(attr)

Возвращает номер пары цветов, установленной значением атрибута attr. color_pair() является аналогом этой функции.

curses.putp(string)

Эквивалентно tputs(str, 1, putchar); выводит значение указанной возможности terminfo для текущего терминала. Обратите внимание, что вывод putp() всегда направляется в стандартный вывод.

curses.qiflush([flag])

Если flag равно False, эффект аналогичен вызову noqiflush(). Если flag равно True или аргумент не указан, очереди будут сбрасываться при чтении этих управляющих символов.

curses.raw()

Переход в необработанный режим. В необработанном режиме отключаются обычная буферизация строк и обработка клавиш прерывания, выхода, приостановки и управления потоком; символы передаются функциям ввода curses по одному.

curses.reset_prog_mode()

Восстанавливает терминал в «программный» режим, как было сохранено ранее с помощью def_prog_mode().

curses.reset_shell_mode()

Восстанавливает терминал в «оболочечный» режим, как было сохранено ранее с помощью def_shell_mode().

curses.resetty()

Восстанавливает состояние режимов терминала до того, которое было при последнем вызове savetty().

curses.resize_term(nlines, ncols)

Внутренняя функция, используемая resizeterm(), выполняющая основную работу; при изменении размеров окон resize_term() заполняет пробелами расширенные области. Вызывающее приложение должно заполнить эти области соответствующими данными. Функция resize_term() пытается изменить размеры всех окон. Однако из-за соглашения о вызове панелей невозможно изменить их размер без дополнительного взаимодействия с приложением.

curses.resizeterm(nlines, ncols)

Изменяет размеры стандартного и текущего окон до указанных размеров и корректирует другие служебные данные, используемые библиотекой curses для записи размеров окон (в частности, обработчик SIGWINCH).

curses.savetty()

Сохраняет текущее состояние режимов терминала в буфере, пригодном для использования с помощью resetty().

curses.setsyx(y, x)

Устанавливает виртуальный курсор экрана в позицию y, x. Если y и x оба равны -1, то устанавливается leaveok.

curses.setupterm([termstr, fd])

Инициализирует терминал. termstr – это строка, задающая имя терминала; если опущена, будет использовано значение переменной окружения TERM. fd – это файловый дескриптор, на который будут отправлены любые последовательности инициализации; если не указан, будет использован файловый дескриптор для sys.stdout.

curses.start_color()

Должна быть вызвана, если программист хочет использовать цвета, и перед вызовом любой другой процедуры управления цветом. Рекомендуется вызывать эту процедуру сразу после initscr().

start_color() инициализирует восемь базовых цветов (чёрный, красный, зелёный, жёлтый,\nсиний, пурпурный, голубой и белый) и две глобальные переменные в модуле curses:\nCOLORS и COLOR_PAIRS, содержащие максимальное количество\nцветов и цветовых пар, которые поддерживает терминал. Она также восстанавливает цвета\nна терминале до значений, которые были при его включении.

curses.termattrs()

Возвращает логическое ИЛИ всех видеоатрибутов, поддерживаемых терминалом. Эта\nинформация полезна, когда программа curses требует полного контроля над\nвнешним видом экрана.

curses.termname()

Возвращает значение переменной окружения TERM, усечённое до 14 символов.

curses.tigetflag(capname)

Возвращает значение логической возможности, соответствующей имени возможности terminfo capname. Значение -1 возвращается, если capname не является логической возможностью, или 0, если она отменена или отсутствует в описании терминала.

curses.tigetnum(capname)

Возвращает значение числовой возможности, соответствующей имени возможности terminfo capname. Значение -2 возвращается, если capname не является числовой возможностью, или -1, если она отменена или отсутствует в описании терминала.

curses.tigetstr(capname)

Возвращает значение строковой возможности, соответствующей имени возможности terminfo capname. None возвращается, если capname не является строковой возможностью, или отменена или отсутствует в описании терминала.

curses.tparm(str[, ...])

Создаёт экземпляр строки str с переданными параметрами, где str должна быть параметризованной строкой, полученной из базы данных terminfo. Например, tparm(tigetstr("cup"), 5, 3) может дать b'\033[6;4H'; точный результат зависит от типа терминала.

curses.typeahead(fd)

Указывает, что файловый дескриптор fd должен использоваться для проверки упреждающего ввода. Если fd равен -1, то проверка упреждающего ввода не выполняется.

Библиотека curses выполняет «оптимизацию прерывания строки» (line-breakout optimization), периодически проверяя упреждающий ввод\nво время обновления экрана. Если ввод обнаружен и поступает с tty,\nтекущее обновление откладывается до следующего вызова refresh или doupdate,\nчто обеспечивает более быстрый ответ на заранее введённые команды. Эта функция\nпозволяет указать другой файловый дескриптор для проверки упреждающего ввода.

curses.unctrl(ch)

Возвращает строку, являющуюся печатным представлением символа ch. Управляющие символы отображаются в виде знака вставки (^) с последующим символом, например, как ^C. Печатные символы остаются без изменений.

curses.ungetch(ch)

Помещает ch в очередь, чтобы следующий вызов getch() вернул его.

Примечание

До вызова getch() можно поместить только один символ ch.

curses.update_lines_cols()

Обновляет LINES и COLS. Полезно для обнаружения ручного изменения размера экрана.

Новое в версии 3.5.

curses.unget_wch(ch)

Помещает ch в очередь, чтобы следующий вызов get_wch() вернул его.

Примечание

До вызова get_wch() можно поместить только один символ ch.

Новое в версии 3.3.

curses.ungetmouse(id, x, y, z, bstate)

Помещает событие KEY_MOUSE во входную очередь, связывая с ним указанные данные состояния.

curses.use_env(flag)

Если эта функция используется, её следует вызывать до вызова initscr() или newterm. Когда flag равен False, используются значения строк и столбцов, указанные в базе terminfo, даже если установлены переменные окружения LINES и COLUMNS (используемые по умолчанию) или если curses работает в окне (в этом случае поведением по умолчанию было бы использование размера окна, если LINES и COLUMNS не установлены).

curses.use_default_colors()

Разрешает использование значений по умолчанию для цветов на терминалах, поддерживающих эту возможность. Используйте это для поддержки прозрачности в вашем приложении. Цвет по умолчанию назначается номеру цвета -1. После вызова этой функции init_pair(x, curses.COLOR_RED, -1) инициализирует, например, цветовую пару x с красным цветом переднего плана на фоне по умолчанию.

curses.wrapper(func, ...)

Инициализирует curses и вызывает другой вызываемый объект – func, который должен быть остальной частью вашего приложения, использующего curses. Если приложение вызывает исключение, эта функция восстанавливает терминал в нормальное состояние перед повторным возбуждением исключения и формированием трассировки. Вызываемому объекту func передаётся главное окно 'stdscr' в качестве первого аргумента, а затем все остальные аргументы, переданные в wrapper(). Перед вызовом func функция wrapper() включает режим cbreak, отключает эхо, включает клавиатуру терминала и инициализирует цвета, если терминал поддерживает цвет. При завершении (нормальном или по исключению) она восстанавливает cooked-режим, включает эхо и отключает клавиатуру терминала.

16.10.2. Объекты оконWindow Objects

Объекты окон, возвращаемые функциями initscr() и newwin() выше, имеют следующие методы и атрибуты:

window.addch(ch[, attr])
window.addch(y, x, ch[, attr])

Примечание

Под символом подразумевается символ C (ASCII-код), а не символ Python (строка длиной 1). (Это замечание справедливо везде, где в документации упоминается символ.) Встроенная функция ord() удобна для преобразования строк в коды.

Рисует символ ch в позиции (y, x) с атрибутами attr, заменяя любой символ, ранее нарисованный в этой позиции. По умолчанию позиция символа и атрибуты берутся из текущих настроек окна.

window.addnstr(str, n[, attr])
window.addnstr(y, x, str, n[, attr])

Выводит не более n символов строки str в позиции (y, x) с атрибутами attr, заменяя всё, что ранее было на экране.

window.addstr(str[, attr])
window.addstr(y, x, str[, attr])

Рисует строку str в позиции (y, x) с атрибутами attr, перезаписывая всё, что было на дисплее ранее.

window.attroff(attr)

Удаляет атрибут attr из набора «фоновых» атрибутов, применяемых ко всем записям в текущее окно.

window.attron(attr)

Добавить атрибут attr из набора «фоновых» атрибутов, применяемых ко всем записям в текущее окно.

window.attrset(attr)

Устанавливает «фоновый» набор атрибутов в attr. Изначально этот набор равен 0 (нет атрибутов).

window.bkgd(ch[, attr])

Устанавливает фоновое свойство окна на символ ch с атрибутами attr. Затем изменение применяется ко всем позициям символов в этом окне:

  • Атрибут каждого символа в окне изменяется на новый фоновый атрибут.
  • Везде, где встречается прежний фоновый символ, он заменяется на новый фоновый символ.
window.bkgdset(ch[, attr])

Устанавливает фон окна. Фон окна состоит из символа и любой комбинации атрибутов. Часть атрибута фона комбинируется (логическим ИЛИ) со всеми непустыми символами, которые записываются в окно. Как символьная, так и атрибутная части фона комбинируются с пустыми символами. Фон становится свойством символа и перемещается вместе с символом при любых операциях прокрутки, вставки/удаления строк/символов.

window.border([ls[, rs[, ts[, bs[, tl[, tr[, bl[, br]]]]]]]])

Рисует рамку по краям окна. Каждый параметр задаёт символ для определённой части рамки; подробнее см. таблицу ниже. Символы могут быть заданы как целые числа или как строки из одного символа.

Примечание

Значение 0 для любого параметра приводит к использованию символа по умолчанию для этого параметра. Именованные параметры могут не быть использованы. Значения по умолчанию перечислены в этой таблице:

Параметр Описание Значение по умолчанию
ls Левая сторона ACS_VLINE
rs Правая сторона ACS_VLINE
ts Верх ACS_HLINE
bs Низ ACS_HLINE
tl Верхний левый угол ACS_ULCORNER
tr Верхний правый угол ACS_URCORNER
bl Нижний левый угол ACS_LLCORNER
br Нижний правый угол ACS_LRCORNER
window.box([vertch, horch])

Аналогично border(), но оба ls и rs – это vertch, а оба ts и bs – это horch. Символы углов по умолчанию всегда используются этой функцией.

window.chgat(attr)
window.chgat(num, attr)
window.chgat(y, x, attr)
window.chgat(y, x, num, attr)

Устанавливает атрибуты num символов в текущей позиции курсора или в позиции (y, x), если она указана. Если значение num не задано или num = -1, атрибут будет установлен для всех символов до конца строки. Эта функция не перемещает курсор. Изменённая строка будет помечена с помощью метода touchline(), так что содержимое будет перерисовано при следующем обновлении окна.

window.clear()

Как erase(), но также вызывает перерисовку всего окна при следующем вызове refresh().

window.clearok(yes)

Если yes равно 1, то следующий вызов refresh() очистит окно полностью.

window.clrtobot()

Стирает от курсора до конца окна: все строки ниже курсора удаляются, а затем выполняется эквивалент clrtoeol().

window.clrtoeol()

Стирает от курсора до конца строки.

window.cursyncup()

Обновляет текущую позицию курсора всех родительских окон, чтобы она отражала текущую позицию курсора данного окна.

window.delch([y, x])

Удаляет любой символ в (y, x).

window.deleteln()

Удаляет строку под курсором. Все последующие строки сдвигаются вверх на одну.

window.derwin(begin_y, begin_x)
window.derwin(nlines, ncols, begin_y, begin_x)

Сокращение от «derive window», derwin() аналогично вызову subwin(), за исключением того, что begin_y и begin_x задаются относительно начала окна, а не всего экрана. Возвращает объект окна для производного окна.

window.echochar(ch[, attr])

Добавляет символ ch с атрибутом attr и сразу же вызывает refresh() для окна.

window.enclose(y, x)

Проверяет, находятся ли указанные координаты символьных ячеек относительно экрана внутри данного окна, возвращая True или False. Полезно для определения того, какое подмножество окон экрана содержит положение события мыши.

window.encoding

Кодировка, используемая для кодирования аргументов методов (строки и символы Unicode). Атрибут encoding наследуется от родительского окна при создании подокна, например с помощью window.subwin(). По умолчанию используется кодировка локали (см. locale.getpreferredencoding()).

Новое в версии 3.3.

window.erase()

Очищает окно.

window.getbegyx()

Возвращает кортеж (y, x) координат верхнего левого угла.

window.getbkgd()

Возвращает текущую пару символ/атрибут фона для указанного окна.

window.getch([y, x])

Получает символ. Обратите внимание, что возвращаемое целое число не обязательно должно быть в диапазоне ASCII: функциональные клавиши, клавиши цифровой клавиатуры и т.д. возвращают числа больше 256. В режиме без задержки возвращается -1, если нет ввода, иначе getch() ожидает нажатия клавиши.

window.get_wch([y, x])

Получает широкий символ. Возвращает символ для большинства клавиш или целое число для функциональных клавиш, клавиш цифровой клавиатуры и других специальных клавиш.

Новое в версии 3.3.

window.getkey([y, x])

Получает символ, возвращая строку вместо целого числа, как и getch(). Функциональные клавиши, клавиши цифровой клавиатуры и другие специальные клавиши возвращают многобайтовую строку, содержащую имя клавиши. В режиме без задержки генерируется исключение, если ввод отсутствует.

window.getmaxyx()

Возвращает кортеж (y, x) из высоты и ширины окна.

window.getparyx()

Возвращает начальные координаты этого окна относительно его родительского окна в две целые переменные y и x. Возвращает -1, -1, если это окно не имеет родителя.

window.getstr([y, x])

Читает строку от пользователя, с примитивной возможностью редактирования строки.

window.getyx()

Возвращает кортеж (y, x) с текущей позицией курсора относительно верхнего левого угла окна.

window.hline(ch, n)
window.hline(y, x, ch, n)

Отображает горизонтальную линию, начиная с (y, x), длиной n, состоящую из символа ch.

window.idcok(flag)

Если flag равен False, curses больше не будет использовать аппаратную возможность терминала для вставки/удаления символов; если flag равен True, использование вставки и удаления символов включается. При первой инициализации curses вставка/удаление символов включены по умолчанию.

window.idlok(yes)

Если вызвано с yes равным 1, curses попытается использовать аппаратные возможности редактирования строки. В противном случае вставка/удаление строк отключены.

window.immedok(flag)

Если flag равен True, любое изменение изображения окна автоматически вызывает его обновление; больше не нужно вызывать refresh() вручную. Однако это может значительно снизить производительность из-за многократных вызовов wrefresh. Эта опция отключена по умолчанию.

window.inch([y, x])

Возвращает символ в указанной позиции окна. Младшие 8 бит – это сам символ, а старшие биты – атрибуты.

window.insch(ch[, attr])
window.insch(y, x, ch[, attr])

Рисует символ ch в (y, x) с атрибутами attr, сдвигая строку от позиции x вправо на один символ.

window.insdelln(nlines)

Вставляет nlines строк в указанное окно над текущей строкой. nlines нижних строк теряются. При отрицательном nlines удаляет nlines строк, начиная с той, на которой находится курсор, и сдвигает оставшиеся строки вверх. Нижние nlines строк очищаются. Текущая позиция курсора остаётся неизменной.

window.insertln()

Вставляет пустую строку под курсором. Все последующие строки сдвигаются на одну строку вниз.

window.insnstr(str, n[, attr])
window.insnstr(y, x, str, n[, attr])

Вставляет строку символов (столько символов, сколько помещается на строке) перед символом под курсором, до n символов. Если n равно нулю или отрицательно, вставляется вся строка. Все символы справа от курсора сдвигаются вправо, при этом крайние правые символы строки теряются. Позиция курсора не меняется (после перемещения в y, x, если указано).

window.insstr(str[, attr])
window.insstr(y, x, str[, attr])

Вставляет строку символов (столько символов, сколько помещается на строке) перед символом под курсором. Все символы справа от курсора сдвигаются вправо, при этом крайние правые символы строки теряются. Позиция курсора не меняется (после перемещения в y, x, если указано).

window.instr([n])
window.instr(y, x[, n])

Возвращает строку символов, извлечённую из окна, начиная с текущей позиции курсора, или с позиции y, x, если они указаны. Атрибуты удаляются из символов. Если указано n, instr() возвращает строку длиной не более n символов (исключая завершающий NUL).

window.is_linetouched(line)

Возвращает True, если указанная строка была изменена после последнего вызова refresh(); в противном случае возвращает False. Вызывает исключение curses.error, если line недопустима для данного окна.

window.is_wintouched()

Возвращает True, если указанное окно было изменено после последнего вызова refresh(); в противном случае возвращает False.

window.keypad(yes)

Если yes равно 1, управляющие последовательности, генерируемые некоторыми клавишами (цифровая клавиатура, функциональные клавиши), будут интерпретироваться curses. Если yes равно 0, управляющие последовательности будут оставлены как есть во входном потоке.

window.leaveok(yes)

Если yes равно 1, курсор остаётся на месте при обновлении, а не перемещается в «позицию курсора». Это уменьшает перемещение курсора, где это возможно. Если возможно, курсор будет сделан невидимым.

Если yes равно 0, курсор всегда будет находиться в «позиции курсора» после обновления.

window.move(new_y, new_x)

Перемещает курсор в (new_y, new_x).

window.mvderwin(y, x)

Перемещает окно внутри его родительского окна. Экранно-относительные параметры окна не изменяются. Эта процедура используется для отображения разных частей родительского окна в одной и той же физической позиции на экране.

window.mvwin(new_y, new_x)

Перемещает окно так, чтобы его верхний левый угол находился в (new_y, new_x).

window.nodelay(yes)

Если yes равно 1, getch() будет неблокирующим.

window.notimeout(yes)

Если yes равно 1, управляющие последовательности не будут подвергаться таймауту.

Если yes равно 0, через несколько миллисекунд управляющая последовательность не будет интерпретироваться и останется во входном потоке как есть.

window.noutrefresh()

Пометить для обновления, но подождать. Эта функция обновляет структуру данных, представляющую желаемое состояние окна, но не принуждает к обновлению физического экрана. Для этого нужно вызвать doupdate().

window.overlay(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

Наложить окно поверх destwin. Окна необязательно должны быть одного размера – копируется только область пересечения. Это копирование неразрушающее, то есть текущий символ фона не перезаписывает старое содержимое destwin.

Для более точного контроля над копируемой областью можно использовать вторую форму overlay(). sminrow и smincol – это координаты верхнего левого угла исходного окна, а остальные переменные задают прямоугольник в целевом окне.

window.overwrite(destwin[, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol])

Перезаписать окно поверх destwin. Окна необязательно должны быть одного размера – в этом случае копируется только область пересечения. Это копирование разрушающее, то есть текущий символ фона перезаписывает старое содержимое destwin.

Для более точного контроля над копируемой областью можно использовать вторую форму overwrite(). sminrow и smincol – это координаты верхнего левого угла исходного окна, а остальные переменные задают прямоугольник в целевом окне.

window.putwin(file)

Записать все данные, связанные с окном, в переданный файловый объект. Эту информацию можно будет позже получить с помощью функции getwin().

window.redrawln(beg, num)

Указать, что num строк экрана, начиная со строки beg, повреждены и должны быть полностью перерисованы при следующем вызове refresh().

window.redrawwin()

Пометить всё окно как изменённое, что приведёт к его полной перерисовке при следующем вызове refresh().

window.refresh([pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol])

Обновить отображение немедленно (синхронизировать фактический экран с предыдущими методами рисования/удаления).

6 необязательных аргументов можно указать только в том случае, если окно является pad'ом, созданным с помощью newpad(). Дополнительные параметры нужны для указания того, какая часть pad'а и экрана задействована. pminrow и pmincol задают верхний левый угол прямоугольника, отображаемого в pad'е. sminrow, smincol, smaxrow и smaxcol задают границы прямоугольника, отображаемого на экране. Нижний правый угол прямоугольника, отображаемого в pad'е, вычисляется из экранных координат, поскольку прямоугольники должны быть одного размера. Оба прямоугольника должны целиком помещаться в свои структуры. Отрицательные значения pminrow, pmincol, sminrow или smincol считаются равными нулю.

window.resize(nlines, ncols)

Перераспределить память для окна curses, чтобы изменить его размеры до указанных значений. Если любой из размеров больше текущих, данные окна заполняются пробелами, в которые влито текущее оформление фона (заданное с помощью bkgdset()).

window.scroll([lines=1])

Прокручивает экран или область прокрутки вверх на lines строк.

window.scrollok(flag)

Управляет поведением, когда курсор окна перемещается за край окна или области прокрутки, либо в результате перевода строки на нижней строке, либо при вводе последнего символа последней строки. Если flag равен false, курсор остаётся на нижней строке. Если flag равен true, окно прокручивается на одну строку вверх. Обратите внимание: чтобы получить физический эффект прокрутки на терминале, необходимо также вызвать idlok().

window.setscrreg(top, bottom)

Установить область прокрутки от строки top до строки bottom. Все действия прокрутки будут происходить в этой области.

window.standend()

Выключить атрибут выделения (standout). На некоторых терминалах это имеет побочный эффект выключения всех атрибутов.

window.standout()

Включить атрибут A_STANDOUT.

window.subpad(begin_y, begin_x)
window.subpad(nlines, ncols, begin_y, begin_x)

Возвращает подокно, верхний левый угол которого находится в (begin_y, begin_x), а ширина/высота равны ncols/nlines.

window.subwin(begin_y, begin_x)
window.subwin(nlines, ncols, begin_y, begin_x)

Возвращает подокно, верхний левый угол которого находится в (begin_y, begin_x), а ширина/высота равны ncols/nlines.

По умолчанию подокно будет простираться от указанной позиции до нижнего правого угла окна.

window.syncdown()

Помечает каждую позицию в окне, которая была изменена в любом из его родительских окон. Эта процедура вызывается refresh(), поэтому почти никогда не требуется вызывать её вручную.

window.syncok(flag)

Если вызвана с flag, установленным в True, то syncup() вызывается автоматически при любом изменении окна.

window.syncup()

Помечает все позиции в родительских окнах данного окна, которые были изменены в окне.

window.timeout(delay)

Устанавливает блокирующее или неблокирующее поведение чтения для окна. Если delay отрицательное, используется блокирующее чтение (ожидает ввода неопределённое время). Если delay равен нулю, используется неблокирующее чтение, и функция getch() вернёт -1, если ввод отсутствует. Если delay положительное, то getch() заблокируется на delay миллисекунд и вернёт -1, если по истечении этого времени ввод всё ещё отсутствует.

window.touchline(start, count[, changed])

Сообщает, что count строк были изменены, начиная со строки start. Если передан параметр changed, он указывает, помечены ли затронутые строки как изменённые (changed=1) или неизменённые (changed=0).

window.touchwin()

Считает, что всё окно было изменено, в целях оптимизации отрисовки.

window.untouchwin()

Помечает все строки в окне как неизменённые с момента последнего вызова refresh().

window.vline(ch, n)
window.vline(y, x, ch, n)

Отображает вертикальную линию, начинающуюся в точке (y, x), длиной n, состоящую из символа ch.

16.10.3. КонстантыConstants

Модуль curses определяет следующие элементы данных:

curses.ERR

Некоторые функции curses, которые возвращают целое число, такие как getch(), возвращают ERR при неудаче.

curses.OK

Некоторые процедуры curses, возвращающие целое число, такие как napms(), возвращают OK в случае успеха.

curses.version

Строка, представляющая текущую версию модуля. Также доступна как __version__.

Некоторые константы доступны для указания атрибутов ячеек символов. Точный набор доступных констант зависит от системы.

Атрибут Значение
A_ALTCHARSET Режим альтернативного набора символов
A_BLINK Режим мигания
A_BOLD Режим жирного шрифта
A_DIM Режим затемнения
A_INVIS Режим невидимого или пустого символа
A_NORMAL Обычный атрибут
A_PROTECT Защищённый режим
A_REVERSE Инвертировать цвета фона и переднего плана
A_STANDOUT Режим выделения
A_UNDERLINE Режим подчёркивания
A_HORIZONTAL Горизонтальное выделение
A_LEFT Выделение слева
A_LOW Слабое выделение
A_RIGHT Выделение справа
A_TOP Верхнее выделение
A_VERTICAL Вертикальное выделение
A_CHARTEXT Битовая маска для извлечения символа

Доступно несколько констант для извлечения соответствующих атрибутов, возвращаемых некоторыми методами.

Битовая маска Значение
A_ATTRIBUTES Битовая маска для извлечения атрибутов
A_CHARTEXT Битовая маска для извлечения символа
A_COLOR Битовая маска для извлечения информации о поле цветовой пары

Клавиши обозначаются целочисленными константами с именами, начинающимися с KEY_. Точный набор доступных клавиш зависит от системы.

Константа клавиши Клавиша
KEY_MIN Минимальное значение клавиши
KEY_BREAK Клавиша Break (ненадёжно)
KEY_DOWN Стрелка вниз
KEY_UP Стрелка вверх
KEY_LEFT Стрелка влево
KEY_RIGHT Стрелка вправо
KEY_HOME Клавиша Home (стрелка вверх-влево)
KEY_BACKSPACE Backspace (ненадёжно)
KEY_F0 Функциональные клавиши. Поддерживается до 64 функциональных клавиш.
KEY_Fn Значение функциональной клавиши n
KEY_DL Удалить строку
KEY_IL Вставить строку
KEY_DC Удалить символ
KEY_IC Вставить символ или войти в режим вставки
KEY_EIC Выйти из режима вставки символа
KEY_CLEAR Очистить экран
KEY_EOS Очистить до конца экрана
KEY_EOL Очистить до конца строки
KEY_SF Прокрутить на 1 строку вперёд
KEY_SR Прокрутка на 1 строку назад (обратное направление)
KEY_NPAGE Следующая страница
KEY_PPAGE Предыдущая страница
KEY_STAB Установить табуляцию
KEY_CTAB Очистить табуляцию
KEY_CATAB Очистить все табуляции
KEY_ENTER Ввод или отправка (ненадёжно)
KEY_SRESET Мягкий (частичный) сброс (ненадёжно)
KEY_RESET Сброс или жёсткий сброс (ненадёжно)
KEY_PRINT Печать
KEY_LL Домой вниз или нижняя строка (левый нижний)
KEY_A1 Верхний левый угол клавиатуры
KEY_A3 Верхний правый угол клавиатуры
KEY_B2 Центр клавиатуры
KEY_C1 Нижний левый угол клавиатуры
KEY_C3 Нижний правый угол клавиатуры
KEY_BTAB Обратная табуляция
KEY_BEG Начало
KEY_CANCEL Отмена
KEY_CLOSE Закрыть
KEY_COMMAND Команда
KEY_COPY Копировать
KEY_CREATE Создать
KEY_END Конец
KEY_EXIT Выход
KEY_FIND Найти
KEY_HELP Помощь
KEY_MARK Отметка
KEY_MESSAGE Сообщение
KEY_MOVE Переместить
KEY_NEXT Далее
KEY_OPEN Открыть
KEY_OPTIONS Параметры
KEY_PREVIOUS Назад (предыдущий)
KEY_REDO Повторить
KEY_REFERENCE Справка (ссылка)
KEY_REFRESH Обновить
KEY_REPLACE Заменить
KEY_RESTART Перезапустить
KEY_RESUME Возобновить
KEY_SAVE Сохранить
KEY_SBEG Shift+Начало (начало)
KEY_SCANCEL Shift+Отмена
KEY_SCOMMAND Shift+Команда
KEY_SCOPY Shift+Копировать
KEY_SCREATE Shift+Создать
KEY_SDC Shift+Удалить символ
KEY_SDL Shift+Удалить строку
KEY_SELECT Выбор
KEY_SEND Shift+Конец
KEY_SEOL Shift+Очистка строки
KEY_SEXIT Shift+Выход
KEY_SFIND Shift+Найти
KEY_SHELP Shift+Справка
KEY_SHOME Shift+Начало
KEY_SIC Shift+Ввод
KEY_SLEFT Shift+Стрелка влево
KEY_SMESSAGE Shift+Сообщение
KEY_SMOVE Shift+Перемещение
KEY_SNEXT Shift+Далее
KEY_SOPTIONS Shift+Параметры
KEY_SPREVIOUS Shift+Назад
KEY_SPRINT Shift+Печать
KEY_SREDO Shift+Повтор
KEY_SREPLACE Замена с Shift
KEY_SRIGHT Стрелка вправо с Shift
KEY_SRSUME Возобновление с Shift
KEY_SSAVE Сохранение с Shift
KEY_SSUSPEND Приостановка с Shift
KEY_SUNDO Отмена с Shift
KEY_SUSPEND Приостановить
KEY_UNDO Отменить
KEY_MOUSE Событие мыши
KEY_RESIZE Событие изменения размера терминала
KEY_MAX Максимальное значение клавиши

На VT100 и их программных эмуляциях, таких как эмуляторы терминалов X, обычно доступны как минимум четыре функциональные клавиши (KEY_F1, KEY_F2, KEY_F3, KEY_F4), а стрелки отображаются на KEY_UP, KEY_DOWN, KEY_LEFT и KEY_RIGHT очевидным образом. Если на вашей машине клавиатура PC, можно рассчитывать на стрелки и двенадцать функциональных клавиш (на старых клавиатурах PC может быть только десять); кроме того, стандартны следующие отображения цифровой клавиатуры:

Клавиша Константа
Insert KEY_IC
Delete KEY_DC
Home KEY_HOME
End KEY_END
Page Up KEY_PPAGE
Page Down KEY_NPAGE

В следующей таблице перечислены символы из альтернативного набора символов. Они унаследованы от терминала VT100 и обычно доступны в программных эмуляциях, таких как X терминалы. Если графический символ недоступен, curses использует грубое приближение в виде печатных символов ASCII.

Примечание

Они доступны только после вызова initscr().

Код ACS Значение
ACS_BBSS альтернативное имя для правого верхнего угла
ACS_BLOCK сплошной квадратный блок
ACS_BOARD доска из квадратов
ACS_BSBS альтернативное имя для горизонтальной линии
ACS_BSSB альтернативное имя для левого верхнего угла
ACS_BSSS альтернативное имя для верхнего тройника
ACS_BTEE нижний тройник
ACS_BULLET маркер
ACS_CKBOARD шахматная доска (точечный узор)
ACS_DARROW стрелка вниз
ACS_DEGREE символ градуса
ACS_DIAMOND ромб
ACS_GEQUAL больше или равно
ACS_HLINE горизонтальная линия
ACS_LANTERN символ фонаря
ACS_LARROW стрелка влево
ACS_LEQUAL меньше или равно
ACS_LLCORNER левый нижний угол
ACS_LRCORNER правый нижний угол
ACS_LTEE левый тройник
ACS_NEQUAL знак не равно
ACS_PI буква пи
ACS_PLMINUS плюс-минус
ACS_PLUS большой плюс
ACS_RARROW стрелка вправо
ACS_RTEE правый тройник
ACS_S1 линия развертки 1
ACS_S3 линия развертки 3
ACS_S7 линия развертки 7
ACS_S9 линия развертки 9
ACS_SBBS альтернативное название правого нижнего угла
ACS_SBSB другое название вертикальной линии
ACS_SBSS альтернативное название правого тройника
ACS_SSBB альтернативное название левого нижнего угла
ACS_SSBS альтернативное название нижнего тройника
ACS_SSSB альтернативное название левого тройника
ACS_SSSS альтернативное название перекрестия или большого плюса
ACS_STERLING фунт стерлингов
ACS_TTEE верхний тройник
ACS_UARROW стрелка вверх
ACS_ULCORNER левый верхний угол
ACS_URCORNER правый верхний угол
ACS_VLINE вертикальная линия

В следующей таблице перечислены предопределённые цвета:

Константа Цвет
COLOR_BLACK Чёрный
COLOR_BLUE Синий
COLOR_CYAN Голубой (светлый сине-зелёный)
COLOR_GREEN Зелёный
COLOR_MAGENTA Пурпурный (красновато-фиолетовый)
COLOR_RED Красный
COLOR_WHITE Белый
COLOR_YELLOW Жёлтый

16.11. curses.textpad – Виджет ввода текста для программ cursescurses.textpad – Text input widget for curses programs

Модуль curses.textpad предоставляет класс Textbox, который управляет простым редактированием текста в окне curses, поддерживая набор сочетаний клавиш, напоминающих Emacs (а также Netscape Navigator, BBedit 6.x, FrameMaker и многих других программ). Модуль также предоставляет функцию рисования прямоугольников, полезную для создания рамок текстовых полей или других целей.

Модуль curses.textpad определяет следующую функцию:

curses.textpad.rectangle(win, uly, ulx, lry, lrx)

Рисует прямоугольник. Первый аргумент должен быть оконным объектом; остальные аргументы – координаты относительно этого окна. Второй и третий аргументы – координаты y и x верхнего левого угла прямоугольника; четвёртый и пятый – координаты y и x нижнего правого угла. Прямоугольник рисуется с использованием символов псевдографики VT100/IBM PC на терминалах, которые это поддерживают (включая xterm и большинство других программных эмуляторов терминала). В противном случае он рисуется с помощью символов ASCII: дефисов, вертикальных черт и знаков плюс.

16.11.1. Объекты TextboxTextbox objects

Объект Textbox можно создать следующим образом:

class curses.textpad.Textbox(win)

Возвращает объект виджета текстового поля. Аргумент win должен быть объектом window модуля curses, в котором будет размещено текстовое поле. Редакционный курсор текстового поля изначально расположен в верхнем левом углу содержащего окна, с координатами (0, 0). Флаг stripspaces экземпляра изначально включён.

Объекты Textbox имеют следующие методы:

edit([validator])

Обычно используется эта точка входа. Она принимает нажатия клавиш редактирования, пока не будет введена одна из завершающих клавиш. Если передан validator, он должен быть функцией. Эта функция вызывается для каждого введённого нажатия клавиши, получая его в качестве параметра; диспетчеризация команд выполняется на основе результата. Метод возвращает содержимое окна в виде строки; на то, включаются ли пробелы в окне, влияет атрибут stripspaces.

do_command(ch)

Обрабатывает одно нажатие командной клавиши. Ниже перечислены поддерживаемые специальные нажатия клавиш:

Клавиша Действие
Control-A Переход к левому краю окна.
Control-B Курсор влево, с переносом на предыдущую строку (если применимо).
Control-D Удалить символ под курсором.
Control-E Перейти к правому краю (stripspaces off) или в конец строки (stripspaces on).
Control-F Курсор вправо, с переносом на следующую строку (если применимо).
Control-G Завершить, вернув содержимое окна.
Control-H Удалить предыдущий символ.
Control-J Завершает, если окно имеет 1 строку, в противном случае вставляет новую строку.
Control-K Если строка пуста, удалить её, в противном случае очистить до конца строки.
Control-L Обновить экран.
Control-N Курсор вниз; переместиться на одну строку вниз.
Control-O Вставить пустую строку в позиции курсора.
Control-P Курсор вверх; переместиться на одну строку вверх.

Операции перемещения не выполняются, если курсор находится у края, где движение невозможно. Там, где это возможно, поддерживаются следующие синонимы:

Константа Клавиша
KEY_LEFT Control-B
KEY_RIGHT Control-F
KEY_UP Control-P
KEY_DOWN Control-N
KEY_BACKSPACE Control-h

Все остальные нажатия клавиш обрабатываются как команда вставить указанный символ и переместиться вправо (с переносом строки).

gather()

Возвращает содержимое окна в виде строки; включение пробелов в окне зависит от элемента stripspaces.

stripspaces

Этот атрибут является флагом, управляющим интерпретацией пробелов в окне. Когда он включён, конечные пробелы в каждой строке игнорируются; любое перемещение курсора, которое привело бы к его установке на конечный пробел, вместо этого перемещает курсор в конец строки, а конечные пробелы удаляются при сборе содержимого окна.