curses — Обработка терминала для дисплеев с ячейками символов
Исходный код: Lib/curses
Модуль curses предоставляет интерфейс к библиотеке curses, фактическому стандарту для переносимой продвинутой обработки терминала.
Хотя curses наиболее широко используется в среде Unix, версии доступны для Windows, DOS и, возможно, других систем. Этот расширяемый модуль разработан для соответствия API ncurses, открытой библиотеки curses, размещённой в Linux и BSD-вариантах Unix.
Примечание
Всякий раз, когда в документации упоминается символ, он может быть указан как целое число, строка Юникода длиной в один символ или байтовая строка длиной в один байт.
Всякий раз, когда в документации упоминается строка символов, она может быть указана как строка Юникода или байтовая строка.
См. также
-
Modulecurses.ascii -
Утилиты для работы с ASCII-символами независимо от настроек локальной среды.
-
Modulecurses.panel -
Расширение стека панелей, которое добавляет глубину окнам curses.
-
Modulecurses.textpad -
Редактируемый текстовый виджет для curses, поддерживающий связывание в стиле Emacs.
- Программирование с использованием curses в Python
-
Материал по использованию curses с Python, авторы: Эндрю Куклинг и Эрик Реймонд.
Функции
Модуль 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 - 1. Возвращает кортеж из 3 элементов, содержащий значения R, G, B для данного цвета, которые будут находиться в диапазоне от0(нет составляющей) до1000(максимальное значение составляющей).
-
curses.color_pair(pair_number) -
Возвращает значение атрибута для отображения текста в указанной паре цветов. Поддерживаются только первые 256 пар цветов. Это значение атрибута можно комбинировать с
A_STANDOUT,A_REVERSEи другимиA_*атрибутами.pair_number()является аналогом этой функции.
-
curses.curs_set(visibility) -
Устанавливает состояние курсора. visibility может быть установлено в
0,1, или2, для невидимого, обычного или очень видимого курсора. Если терминал поддерживает запрошенный режим видимости, возвращает предыдущее состояние курсора; в противном случае генерирует исключение. На многих терминалах «видимый» режим — это курсор с подчёркиванием, а «очень видимый» — курсор в виде блока.
-
curses.def_prog_mode() -
Сохраняет текущий режим терминала как «программный» режим, режим, когда работающая программа использует curses. (Его аналогом является «оболочечный» режим, когда программа не использует curses.) Последующие вызовы
reset_prog_mode()восстановят этот режим.
-
curses.def_shell_mode() -
Сохраняет текущий режим терминала как «оболочечный» режим, режим, когда работающая программа не использует 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() -
Возвращает текущий символ стирания пользователя в виде объекта bytes длиной в один байт. В операционных системах 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 — это значение ID, используемое для различения нескольких устройств, а x, y, z — координаты события. (z в настоящее время не используется.) bstate — целое числовое значение, биты которого устанавливаются для указания типа события и будет являться побитовым ИЛИ одного или нескольких из следующих констант, где n — номер кнопки от 1 до 5:BUTTONn_PRESSED,BUTTONn_RELEASED,BUTTONn_CLICKED,BUTTONn_DOUBLE_CLICKED,BUTTONn_TRIPLE_CLICKED,BUTTON_SHIFT,BUTTON_CTRL,BUTTON_ALT.Изменено в версии 3.10: Константы
BUTTON5_*теперь доступны, если они предоставляются библиотекой curses.
-
curses.getsyx() -
Возвращает текущие координаты виртуального курсора экрана как кортеж
(y, x). Еслиleaveokв настоящее времяTrue, то возвращает(-1, -1).
-
curses.getwin(file) -
Считывает данные, относящиеся к окну, сохраненные в файле с помощью предыдущего вызова
window.putwin(). Затем процедура создаёт и инициализирует новое окно, используя эти данные, возвращая новый объект окна.
-
curses.has_colors() -
Возвращает
True, если терминал может отображать цвета; в противном случае, возвращаетFalse.
-
curses.has_extended_color_support() -
Возвращает
True, если модуль поддерживает расширенные цвета; в противном случае, возвращаетFalse. Поддержка расширенных цветов позволяет использовать больше 256 пар цветов для терминалов, поддерживающих более 16 цветов (например, xterm-256color).Для поддержки расширенных цветов требуется версия ncurses 6.1 или новее.
Добавлена в версии 3.10.
-
curses.has_ic() -
Возвращает
True, если терминал поддерживает вставку и удаление символов. Эта функция включена только по историческим причинам, так как все современные эмуляторы терминалов поддерживают такие возможности.
-
curses.has_il() -
Возвращает
True, если терминал поддерживает вставку и удаление строк или может имитировать их с помощью областей прокрутки. Эта функция включена только по историческим причинам, так как все современные эмуляторы терминалов поддерживают такие возможности.
-
curses.has_key(ch) -
Принимает значение клавиши ch и возвращает
True, если текущий тип терминала распознаёт клавишу с этим значением.
-
curses.halfdelay(tenths) -
Используется для режима half-delay, который похож на режим cbreak тем, что введённые пользователем символы немедленно доступны программе. Однако после ожидания в течение tenths десятых долей секунды, возникает исключение, если ничего не было введено. Значение tenths должно быть числом от
1до255. Для выхода из режима half-delay используйтеnocbreak().
-
curses.init_color(color_number, r, g, b) -
Изменяет определение цвета, принимая номер цвета для изменения и три значения RGB (для количества компонентов красного, зелёного и синего). Значение color_number должно быть в пределах от
0доCOLORS - 1. Каждое из значений r, g, b должно быть значением от0до1000. При использованииinit_color()все вхождения этого цвета на экране немедленно меняются на новое определение. Эта функция является пустой операцией для большинства терминалов; она активна только еслиcan_change_color()возвращаетTrue.
-
curses.init_pair(pair_number, fg, bg) -
Изменяет определение пары цветов. Она принимает три аргумента: номер пары цветов для изменения, номер цвета переднего плана и номер цвета заднего плана. Значение pair_number должно быть в пределах от
1доCOLOR_PAIRS - 1(пара цветов0привязана к белому на чёрном и не может быть изменена). Значения аргументов fg и bg должны быть в пределах от0доCOLORS - 1, или, после вызоваuse_default_colors(),-1. Если пара цветов была ранее инициализирована, экран обновляется, и все вхождения этой пары цветов изменяются на новое определение.
-
curses.initscr() -
Инициализирует библиотеку. Возвращает объект окна, который представляет весь экран.
Примечание
Если при открытии терминала возникает ошибка, базовая библиотека curses может привести к завершению интерпретатора.
-
curses.is_term_resized(nlines, ncols) -
Возвращает
True, еслиresize_term()изменит структуру окна,Falseв противном случае.
-
curses.isendwin() -
Возвращает
True, если был вызванendwin()(то есть библиотека curses была деинициализирована).
-
curses.keyname(k) -
Возвращает имя клавиши с номером k в виде объекта bytes. Имя клавиши, генерирующей печатаемый символ ASCII, — это символ клавиши. Имя комбинации клавиш управления — это объект bytes длиной в два байта, состоящий из знака каретки (
b'^') и соответствующего печатаемого символа ASCII. Имя комбинации клавиш alt (128–255) — это объект bytes, содержащий префиксb'M-'и имя соответствующего символа ASCII.
-
curses.killchar() -
Возвращает текущий символ удаления строки пользователя в виде объекта bytes длиной в один байт. В Unix-системах это свойство управляющего tty программы curses, и оно не устанавливается самой библиотекой curses.
-
curses.longname() -
Возвращает объект bytes, содержащий поле terminfo long name, описывающее текущий терминал. Максимальная длина подробного описания — 128 символов. Оно определено только после вызова
initscr().
-
curses.meta(flag) -
Если flag равно
True, разрешить ввод 8-битных символов. Если flag равноFalse, разрешить ввод только 7-битных символов.
-
curses.mouseinterval(interval) -
Устанавливает максимальное время в миллисекундах, которое может пройти между событиями нажатия и отпускания, чтобы они были распознаны как щелчок, и возвращает предыдущее значение интервала. Значение по умолчанию составляет 200 миллисекунд или одну пятую секунды.
-
curses.mousemask(mousemask) -
Устанавливает события мыши, которые должны быть сообщены, и возвращает кортеж
(availmask, oldmask). availmask указывает, какие из указанных событий мыши могут быть сообщены; при полной ошибке возвращает0. oldmask — предыдущее значение маски событий мыши данного окна. Если эта функция никогда не вызывается, события мыши никогда не сообщаются.
-
curses.napms(ms) -
Подождать в течение ms миллисекунд.
-
curses.newpad(nlines, ncols) -
Создаёт и возвращает указатель на новую структуру данных для области с заданным количеством строк и столбцов. Возвращает область как объект окна.
Область похожа на окно, за исключением того, что она не ограничена размером экрана и не обязательно связана с определённой частью экрана. Области могут использоваться, когда нужно большое окно, и только часть окна будет отображаться на экране одновременно. Автоматическое обновление областей (например, при прокрутке или эхо-выводе ввода) не происходит. Методы
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. Возврат в обычный «сырой» режим с буферизацией строк.
-
curses.noecho() -
Выйти из режима отображения ввода. Отображение вводимых символов выключено.
-
curses.nonl() -
Выход из режима новой строки. Отключить преобразование возврата каретки в новую строку на вводе и отключить низкоуровневое преобразование новой строки в новую строку/возврат каретки на выводе (но это не меняет поведение
addch('\n'), которое всегда выполняет эквивалент возврата каретки и перевода строки на виртуальном экране). При отключении преобразования библиотека curses иногда немного ускоряет вертикальное перемещение; также она сможет распознавать клавишу возврата каретки на вводе.
-
curses.noqiflush() -
Когда используется функция
noqiflush(), обычная очистка очередей ввода и вывода, связанных с символамиINTR,QUITиSUSP, не выполняется. Возможно, вам нужно вызватьnoqiflush()в обработчике сигнала, если вы хотите, чтобы вывод продолжался так, как если бы прерывания не произошло, после выхода из обработчика.
-
curses.noraw() -
Выход из сырого режима. Возвращение в обычный «обработанный» режим с буферизацией строк.
-
curses.pair_content(pair_number) -
Возвращает кортеж
(fg, bg), содержащий цвета для запрошенной пары цветов. Значение pair_number должно быть в диапазоне от0доCOLOR_PAIRS - 1.
-
curses.pair_number(attr) -
Возвращает номер набора пар цветов, заданный значением атрибута attr.
color_pair()является обратной функцией к этой функции.
-
curses.putp(str) -
Эквивалентно
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.get_escdelay() -
Возвращает значение, установленное функцией
set_escdelay().Добавлена в версии 3.9.
-
curses.set_escdelay(ms) -
Устанавливает количество миллисекунд, которое необходимо подождать после чтения символа escape, чтобы отличить ввод одиночного символа escape с клавиатуры от последовательностей escape, отправленных клавишами курсора и функциональными клавишами.
Добавлена в версии 3.9.
-
curses.get_tabsize() -
Возвращает значение, установленное функцией
set_tabsize().Добавлена в версии 3.9.
-
curses.set_tabsize(size) -
Устанавливает количество столбцов, используемых библиотекой curses при преобразовании символа табуляции в пробелы, когда она добавляет табуляцию в окно.
Добавлена в версии 3.9.
-
curses.setsyx(y, x) -
Установить курсор виртуального экрана на координаты y, x. Если y и x равны
-1, то функцияleaveokустанавливается вTrue.
-
curses.setupterm(term=None, fd=-1) -
Инициализация терминала. term — строка с именем терминала или
None; если опущена или равнаNone, будет использовано значение переменной средыTERM. fd — дескриптор файла, в который будут отправлены все последовательности инициализации; если не указан или равен-1, будет использован дескриптор файла дляsys.stdout.
-
curses.start_color() -
Необходимо вызвать, если программист хочет использовать цвета, и перед любым другим вызовом функции управления цветом. Хорошей практикой является вызов этой функции сразу после вызова
initscr().start_color()инициализирует восемь основных цветов (чёрный, красный, зелёный, жёлтый, синий, пурпурный, голубой и белый) и две глобальные переменные в модулеcurses:COLORSиCOLOR_PAIRS, которые содержат максимальное количество поддерживаемых терминалом цветов и пар цветов. Также она восстанавливает цвета терминала до значений, которые были у него при включении.
-
curses.termattrs() -
Возвращает логическое ИЛИ всех видеоатрибутов, поддерживаемых терминалом. Эта информация полезна, когда программа curses нуждается в полном управлении внешним видом экрана.
-
curses.termname() -
Возвращает значение переменной среды
TERM, как объект bytes, усечённый до 14 символов.
-
curses.tigetflag(capname) -
Возвращает значение булевой возможности, соответствующей имени возможности terminfo capname, как целое число. Возвращает значение
-1если capname не является булевой возможностью, или0если она отменена или отсутствует в описании терминала.
-
curses.tigetnum(capname) -
Возвращает значение числовой возможности, соответствующей имени возможности terminfo capname, как целое число. Возвращает значение
-2если capname не является числовой возможностью, или-1если она отменена или отсутствует в описании терминала.
-
curses.tigetstr(capname) -
Возвращает значение строковой возможности, соответствующей имени возможности terminfo capname, как объект bytes. Возвращает
Noneесли capname не является строковой возможностью terminfo, или она отменена или отсутствует в описании терминала.
-
curses.tparm(str[, ...]) -
Инициализирует объект bytes str с предоставленными параметрами, где str должна быть параметризованной строкой, полученной из базы данных terminfo. Например,
tparm(tigetstr("cup"), 5, 3)может привести кb'\033[6;4H', точный результат зависит от типа терминала.
-
curses.typeahead(fd) -
Укажите, что дескриптор файла fd должен использоваться для проверки наличия ввода. Если fd равно
-1, проверка ввода не выполняется.Библиотека curses выполняет «оптимизацию разбиения строк», периодически проверяя наличие ввода в очереди ввода, в то время как обновляется экран. Если входной ввод найден и он поступает с терминала, текущее обновление откладывается до тех пор, пока не будет вызван refresh или doupdate. Это позволяет быстрее реагировать на команды, набранные в предвосхищении. Эта функция позволяет указать другой дескриптор файла для проверки наличия ввода.
-
curses.unctrl(ch) -
Возвращает байтовый объект, представляющий собой удобочитаемое представление символа ch. Управляющие символы представлены как символ «^» и соответствующий символ, например,
b'^C'. Печатные символы возвращаются без изменений.
-
curses.ungetch(ch) -
Поместите ch в очередь, чтобы следующий вызов
getch()вернул его.Примечание
Только один символ ch может быть помещён в очередь, прежде чем будет вызвано
getch().
-
curses.update_lines_cols() -
Обновить модульные переменные
LINESиCOLS. Полезно для обнаружения ручного изменения размеров экрана.Добавлен в версии 3.5.
-
curses.unget_wch(ch) -
Поместите ch в очередь, чтобы следующий вызов
get_wch()вернул его.Примечание
Только один символ ch может быть помещен в очередь, прежде чем будет вызвано
get_wch().Добавлен в версии 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, /, *args, **kwargs) -
Инициализирует curses и вызывает другой вызываемый объект func, который должен быть остальной частью вашего приложения, использующего curses. Если приложение генерирует исключение, эта функция восстановит терминал в нормальное состояние, прежде чем повторно поднять исключение и сгенерировать traceback. Вызываемый объект func затем получает главное окно «stdscr» в качестве первого аргумента, а затем любые другие аргументы, переданные в
wrapper(). Перед вызовом func,wrapper()включает режим cbreak, отключает отображение ввода, включает клавиатурный режим терминала и инициализирует цвета, если терминал поддерживает цвет. При выходе (как нормальном, так и по исключению) он восстанавливает режим cooked, включает отображение ввода и отключает клавиатурный режим терминала.
Объекты окон
Объекты окон, возвращаемые методами initscr() и newwin(), имеют следующие методы и атрибуты:
-
window.addch(ch[, attr]) - window.addch(y, x, ch[, attr])
-
Выводит символ ch в позицию
(y, x)с атрибутами attr, перезаписывая любой ранее нарисованный символ в этой позиции. По умолчанию, позиция символа и атрибуты — текущие настройки для объекта окна.Примечание
Запись за пределами окна, подокна или области вызывает исключение
curses.error. Попытка записи в нижний правый угол окна, подокна или области вызовет исключение после вывода символа.
-
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, перезаписывая все ранее отображенное содержимое.Примечание
- Запись за пределами окна, подокна или области вызывает исключение
curses.error. Попытка записи в нижний правый угол окна, подокна или области вызовет исключение после вывода строки. - Ошибка в ncurses, бэкенде этого модуля Python, может привести к SegFault при изменении размеров окон. Это исправлено в ncurses-6.1-20190511. Если у вас более ранняя версия ncurses, вы можете избежать этой ошибки, не вызывая
addstr()со строкой, содержащей символы перевода строки. Вместо этого вызывайтеaddstr()для каждой строки по отдельности.
- Запись за пределами окна, подокна или области вызывает исключение
-
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
Левая сторона
rs
Правая сторона
ts
Верх
bs
Низ
tl
Левый верхний угол
tr
Правый верхний угол
bl
Левый нижний угол
br
Правый нижний угол
-
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 не задано или равно-1, атрибуты будут установлены для всех символов до конца строки. Функция перемещает курсор в позицию(y, x)если задана. Изменённая строка будет помечена с помощью методаtouchline(), чтобы содержимое было перерисовано при следующем обновлении окна.
-
window.clear() -
Аналогично
erase(), но также вызывает перерисовку всего окна при следующем вызовеrefresh().
-
window.clearok(flag) -
Если flag равно
True, следующий вызов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. Это полезно для определения подмножества окон, которые содержат координаты события мыши.Изменено в версии 3.10: Ранее возвращалось
1или0вместоTrueилиFalse.
-
window.encoding -
Кодировка, используемая для кодирования аргументов метода (строки Unicode и символы). Атрибут кодировки наследуется от родительского окна при создании подокна, например, с помощью
window.subwin(). По умолчанию используется кодировка текущей локали (см.locale.getencoding()).Добавлен в версии 3.3.
-
window.erase() -
Очистить окно.
-
window.getbegyx() -
Возвращает кортеж
(y, x)координат левого верхнего угла.
-
window.getbkgd() -
Возвращает текущую пару символа/атрибута фона заданного окна.
-
window.getch([y, x]) -
Получить символ. Обратите внимание, что возвращаемое целое число не должно находиться в диапазоне ASCII: функциональные клавиши, клавиши клавиатуры и т. д. представляются числами, большими 255. В режиме без задержки возвращает
-1если нет ввода, в противном случае ожидает нажатия клавиши.
-
window.get_wch([y, x]) -
Получить широкий символ. Возвращает символ для большинства клавиш или целое число для функциональных клавиш, клавиш клавиатуры и других специальных клавиш. В режиме без задержки выбросит исключение, если нет ввода.
Добавлен в версии 3.3.
-
window.getkey([y, x]) -
Получить символ, возвращая строку вместо целого числа, как делает
getch(). Функциональные клавиши, клавиши клавиатуры и другие специальные клавиши возвращают многобайтовую строку, содержащую имя клавиши. В режиме без задержки выбросит исключение, если нет ввода.
-
window.getmaxyx() -
Возвращает кортеж
(y, x)высоты и ширины окна.
-
window.getparyx() -
Возвращает начальные координаты этого окна относительно родительского окна в виде кортежа
(y, x). Возвращает(-1, -1)если у этого окна нет родителя.
-
window.getstr() - window.getstr(n)
- window.getstr(y, x)
- window.getstr(y, x, n)
-
Считывает байтовую строку от пользователя, с примитивными возможностями редактирования строк.
-
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(flag) -
Если flag равно
True,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(flag) -
Если flag равно
True, последовательности escape, генерируемые некоторыми клавишами (клавиатура, функциональные клавиши), будут интерпретироватьсяcurses. Если flag равноFalse, последовательности escape будут оставаться неизменными в потоке ввода.
-
window.leaveok(flag) -
Если flag равно
True, курсор остаётся на своём месте при обновлении вместо того, чтобы быть в «позиции курсора». Это уменьшает перемещения курсора, когда это возможно. Если возможно, курсор будет сделан невидимым.Если flag равно
False, курсор всегда будет в «позиции курсора» после обновления.
-
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(flag) -
Если flag равно
True,getch()будет неблокирующим.
-
window.notimeout(flag) -
Если flag равно
True, последовательности escape не будут иметь таймаута.Если flag равно
False, через несколько миллисекунд последовательность escape не будет интерпретироваться и останется в потоке ввода в исходном виде.
-
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 необязательных аргументов могут быть указаны только тогда, когда окно является областью, созданной с помощью
newpad(). Дополнительные параметры необходимы для указания какой части области и экрана задействованы. pminrow и pmincol задают верхний левый угол прямоугольника для отображения в области. sminrow, smincol, smaxrow и smaxcol задают границы прямоугольника для отображения на экране. Нижний правый угол прямоугольника для отображения в области вычисляется по координатам экрана, поскольку прямоугольники должны быть одинакового размера. Оба прямоугольника должны быть полностью вложены в свои соответствующие структуры. Отрицательные значения pminrow, pmincol, sminrow или smincol рассматриваются так, как если бы они были равны нулю.
-
window.resize(nlines, ncols) -
Перераспределяет память для окна curses, чтобы изменить его размеры на указанные значения. Если какой-либо размер больше текущих значений, данные окна заполняются пробелами, к которым добавлено текущее отображение фона (как задано
bkgdset()).
-
window.scroll([lines=1]) -
Прокрутить экран или область прокрутки вверх на lines строк.
-
window.scrollok(flag) -
Управляет тем, что происходит, когда курсор окна перемещается за край окна или области прокрутки, в результате действия новой строки в нижней строке или ввода последнего символа последней строки. Если флаг равен
False, курсор остается в нижней строке. Если флаг равенTrue, окно прокручивается вверх на одну строку. Обратите внимание, что для получения физического эффекта прокрутки на терминале также необходимо вызватьidlok().
-
window.setscrreg(top, bottom) -
Устанавливает область прокрутки от строки top до строки bottom. Все действия прокрутки будут выполняться в этой области.
-
window.standend() -
Отключает атрибут выделения. На некоторых терминалах это приводит к отключению всех атрибутов.
-
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) -
Если флаг равен
True, тоsyncup()вызывается автоматически всякий раз, когда происходит изменение в окне.
-
window.syncup() -
Обрабатывает все элементы предков окна, которые были изменены в окне.
-
window.timeout(delay) -
Устанавливает поведение чтения окна как блокирующего или неблокирующего. Если delay отрицательное, используется блокирующее чтение (которое будет ждать неопределённо долго ввода). Если delay равно нулю, используется неблокирующее чтение, и
getch()вернёт-1, если ввод не ожидается. Если delay положительное, тоgetch()заблокируется на delay миллисекунд, и вернёт-1, если всё ещё нет ввода по истечении этого времени.
-
window.touchline(start, count[, changed]) -
Предполагает, что изменено count строк, начиная со строки start. Если changed указан, он определяет, помечены ли затронутые строки как изменённые (changed
=True) или неизменённые (changed=False).
-
window.touchwin() -
Предполагает, что всё окно изменено, для целей оптимизации отрисовки.
-
window.untouchwin() -
Помечает все строки в окне как неизменённые с момента последнего вызова
refresh().
-
window.vline(ch, n[, attr]) - window.vline(y, x, ch, n[, attr])
-
Отображает вертикальную линию, начинающуюся в
(y, x), длиной n, состоящую из символа ch с атрибутами attr.
Константы
Модуль curses определяет следующие данные члены:
-
curses.ERR -
Некоторые функции curses, возвращающие целое число, такие как
getch(), возвращаютERRпри ошибке.
-
curses.OK -
Некоторые функции curses, возвращающие целое число, такие как
napms(), возвращаютOKпри успехе.
-
curses.version
-
curses.__version__ -
Объект типа bytes, представляющий текущую версию модуля.
-
curses.ncurses_version -
Именованная кортеж, содержащая три компонента версии библиотеки ncurses: major, minor и patch. Все значения являются целыми числами. К компонентам также можно получить доступ по имени, поэтому
curses.ncurses_version[0]эквивалентноcurses.ncurses_version.majorи так далее.Доступность: если используется библиотека ncurses.
Добавлен в версии 3.8.
-
curses.COLORS -
Максимальное количество цветов, которое может поддерживать терминал. Определяется только после вызова
start_color().
-
curses.COLOR_PAIRS -
Максимальное количество пар цветов, которое может поддерживать терминал. Определяется только после вызова
start_color().
-
curses.COLS -
Ширина экрана, т. е. количество столбцов. Определяется только после вызова
initscr(). Обновляется функциямиupdate_lines_cols(),resizeterm()иresize_term().
-
curses.LINES -
Высота экрана, т. е. количество строк. Определяется только после вызова
initscr(). Обновляется функциямиupdate_lines_cols(),resizeterm()иresize_term().
Некоторые константы доступны для указания атрибутов ячеек символов. Точные доступные константы зависят от системы.
Атрибут | Значение |
|---|---|
| Режим альтернативного набора символов |
| Режим мигания |
| Режим полужирного шрифта |
| Режим затемнения |
| Режим невидимости или очистки |
| Режим курсива |
| Нормальный атрибут |
| Режим защиты |
| Инвертирование цветов фона и переднего плана |
| Режим выделения |
| Режим подчеркивания |
| Горизонтальное выделение |
| Выделение слева |
| Выделение снизу |
| Выделение справа |
| Выделение сверху |
| Выделение снизу |
Добавлен в версии 3.7: A_ITALIC был добавлен.
Несколько констант доступны для извлечения соответствующих атрибутов, возвращаемых некоторыми методами.
Маска битов | Значение |
|---|---|
| Маска битов для извлечения атрибутов |
| Маска битов для извлечения символа |
| Маска битов для извлечения информации о паре цветов |
Кнопки обозначаются целочисленными константами с именами, начинающимися с KEY_. Точные доступные клавиши зависят от системы.
Ключевая константа | Ключ |
|---|---|
| Минимальное значение ключа |
| Ключ разрыва (ненадежно) |
| Стрелка вниз |
| Стрелка вверх |
| Стрелка влево |
| Стрелка вправо |
| Ключ Home (стрелка вверх + влево) |
| Backspace (ненадежно) |
| Функциональные клавиши. Поддерживается до 64 функциональных клавиш. |
| Значение функциональной клавиши n |
| Удалить строку |
| Вставить строку |
| Удалить символ |
| Вставить символ или войти в режим вставки |
| Выход из режима вставки символов |
| Очистить экран |
| Очистить до конца экрана |
| Очистить до конца строки |
| Прокрутить на 1 строку вперёд |
| Прокрутить на 1 строку назад (обратно) |
| Следующая страница |
| Предыдущая страница |
| Установить табуляцию |
| Очистить табуляцию |
| Очистить все табуляции |
| Ввод или отправка (ненадежно) |
| Мягкий (частичный) сброс (ненадежно) |
| Сброс или жёсткий сброс (ненадежно) |
| Печать |
| Вниз домой или в низ (в левом нижнем углу) |
| В левом верхнем углу цифровой клавиатуры |
| В правом верхнем углу цифровой клавиатуры |
| Центр цифровой клавиатуры |
| В левом нижнем углу цифровой клавиатуры |
| В правом нижнем углу цифровой клавиатуры |
| Обратная табуляция |
| Нач (начало) |
| Отмена |
| Закрыть |
| Cmd (команда) |
| Копировать |
| Создать |
| Конец |
| Выход |
| Найти |
| Помощь |
| Отметить |
| Сообщение |
| Переместить |
| Следующий |
| Открыть |
| Параметры |
| Пред (предыдущий) |
| Повторить |
| Ссылка |
| Обновить |
| Заменить |
| Перезапустить |
| Возобновить |
| Сохранить |
| Сдвинутый Нач (начало) |
| Сдвинутая Отмена |
| Сдвинутая Команда |
| Сдвинутая Копировать |
| Сдвинутая Создать |
| Сдвинутая Удалить символ |
| Сдвинутая Удалить строку |
| Выбор |
| Сдвинутый конец |
| Сдвинутая очистка строки |
| Сдвинутый выход |
| Сдвинутый поиск |
| Сдвинутая помощь |
| Сдвинутый домашний |
| Сдвинутый ввод |
| Сдвинутая левая стрелка |
| Сдвинутое сообщение |
| Сдвинутое перемещение |
| Сдвинутый следующий |
| Сдвинутые параметры |
| Сдвинутый пред |
| Сдвинутый вывод |
| Сдвинутое повторение |
| Сдвинутая замена |
| Сдвинутая правая стрелка |
| Сдвинутое возобновление |
| Сдвинутая сохранение |
| Сдвинутая приостановка |
| Сдвинутое отмена |
| Приостановить |
| Отменить |
| Произошло событие мыши |
| Событие изменения размера терминала |
| Максимальное значение ключа |
На VT100 и их программных эмуляциях, таких как эмуляторы X-терминалов, обычно доступно как минимум четыре функциональные клавиши (KEY_F1, KEY_F2, KEY_F3, KEY_F4), и клавиши со стрелками отображаются как KEY_UP, KEY_DOWN, KEY_LEFT и KEY_RIGHT очевидным образом. Если у вашего компьютера есть клавиатура PC, можно ожидать клавиши со стрелками и двенадцать функциональных клавиш (у старых клавиатур PC может быть только десять функциональных клавиш); также стандартны следующие отображения клавиатуры:
Кнопка | Константа |
|---|---|
Вставить | KEY_IC |
Удалить | KEY_DC |
Домой | KEY_HOME |
Конец | KEY_END |
Прокрутка вверх | KEY_PPAGE |
Прокрутка вниз | KEY_NPAGE |
В следующей таблице перечислены символы из альтернативного набора символов. Они унаследованы от терминала VT100 и обычно доступны в программных эмуляциях, таких как X-терминалы. В отсутствие графики curses использует грубое печатное приближение ASCII.
Примечание
Эти значения доступны только после вызова initscr().
Код ACS | Значение |
|---|---|
| замещающее имя для правого верхнего угла |
| сплошной квадратный блок |
| доска из квадратов |
| замещающее имя для горизонтальной линии |
| замещающее имя для левого верхнего угла |
| замещающее имя для верхней буквы Т |
| нижняя буква Т |
| пуля |
| шахматная доска (пунктир) |
| стрелка вниз |
| символ градуса |
| ромб |
| больше или равно |
| горизонтальная линия |
| символ фонаря |
| стрелка влево |
| меньше или равно |
| левый нижний угол |
| правый нижний угол |
| левая буква Т |
| знак не равно |
| буква пи |
| знак плюс-минус |
| большой знак плюс |
| стрелка вправо |
| правая буква Т |
| строка сканирования 1 |
| строка сканирования 3 |
| строка сканирования 7 |
| строка сканирования 9 |
| замещающее имя для правого нижнего угла |
| замещающее имя для вертикальной линии |
| замещающее имя для правой буквы Т |
| замещающее имя для левого нижнего угла |
| замещающее имя для нижней буквы Т |
| замещающее имя для левой буквы Т |
| замещающее имя для пересечения или большого плюса |
| фунт стерлингов |
| верхняя буква Т |
| стрелка вверх |
| левый верхний угол |
| правый верхний угол |
| вертикальная линия |
В следующей таблице перечислены константы кнопок мыши, используемые функцией getmouse():
Константа кнопки мыши | Значение |
|---|---|
| нажата кнопка мыши n |
| кнопка мыши n отпущена |
| нажата и отпущена кнопка мыши n |
| двойное нажатие кнопки мыши n |
| тройное нажатие кнопки мыши n |
| Shift был нажат во время изменения состояния кнопки |
| Control был нажат во время изменения состояния кнопки |
| Control был нажат во время изменения состояния кнопки |
Изменено в версии 3.10: Константы BUTTON5_* теперь доступны, если они предоставляются библиотекой curses.
В следующей таблице перечислены предопределённые цвета:
Константа | Цвет |
|---|---|
| Чёрный |
| Синий |
| Цвета (светло-зелёный голубой) |
| Зелёный |
| Пурпурный (пурпурно-красный) |
| Красный |
| Белый |
| Жёлтый |
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/curses.html