Введение

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

curses — это библиотека управления терминалом для Unix-подобных систем, обеспечивающая создание приложений с текстовым пользовательским интерфейсом (TUI). Название является игрой слов на основе термина "оптимизация курсора". Это набор функций, управляющих отображением приложения на символьных терминалах (например, VT100).

Обзор

Используя библиотеку curses, программисты могут создавать текстовые приложения, не ориентируясь на конкретный тип терминала. Библиотека curses на выполняющей системе отправляет необходимые управляющие символы, соответствующие типу терминала. Она предоставляет абстракцию одного или нескольких окон, отображаемых на экране терминала. Каждое окно представлено матрицей символов. Программист задает желаемый вид каждого окна, а затем указывает библиотеке curses обновить экран. Библиотека определяет минимальный набор изменений, необходимых для обновления отображения, и выполняет их, используя специфические возможности терминала и последовательности управления. Другими словами, программист создает матрицу символов, определяющую внешний вид экрана, а curses берет на себя всю работу по отображению. API curses описан в различных источниках. Большинство реализаций curses используют базу данных, описывающую возможности тысяч различных терминалов. Некоторые реализации, такие как PDCurses, используют специализированные драйверы устройств вместо терминальной базы данных. Большинство реализаций используют terminfo, некоторые – termcap. Curses обладает преимуществами обратной совместимости с символьными терминалами и простотой. Для приложений, не требующих растровой графики или нескольких шрифтов, реализация интерфейса с использованием curses обычно намного проще и быстрее, чем с использованием X toolkit.

История

Первая библиотека curses была написана Кеном Арнольдом и впервые выпущена вместе с BSD UNIX, где использовалась в нескольких играх, наиболее известной из которых была Rogue. В 1990-х годах в библиотеку BSD были внесены некоторые улучшения в виде curses "4.4BSD", например, для обеспечения более одного типа выделения видео. Однако они не получили широкого распространения. Название "curses" – это игра слов, основанная на оптимизации курсора. Иногда ошибочно утверждается, что curses использовался в редакторе vi. На самом деле, код в curses, оптимизирующий перемещение курсора с одного места экрана в другое, был заимствован из vi, который существовал раньше curses. Через несколько лет Мэри Энн Хортон, которая поддерживала исходный код vi и termcap в Беркли, перешла в корпорацию AT&T и создала другую версию с использованием terminfo, которая стала частью UNIX System III и UNIX System V. Из-за лицензионных ограничений на последнюю, версии библиотеки BSD и AT&T разрабатывались независимо. Помимо улучшения termcap/terminfo, в версии AT&T были внесены другие улучшения:
выделение видео (полужирный шрифт, подчеркивание). Версия BSD поддерживала только выделение. Рисование линий. Версия BSD оказывала здесь небольшую поддержку. Цвета. В версии BSD это не поддерживалось. Разработка curses от AT&T, по-видимому, прекратилась в середине 1990-х годов, когда был определен стандарт X/Open Curses. В 1995 году сопровождающий BSD, Кит Бостик, официально отказался от библиотеки curses в пользу ncurses. Разработка ncurses и PDCurses продолжается. Версия curses для BSD продолжает поддерживаться в операционной системе NetBSD (поддержка широких символов, миграция с termcap на terminfo и т. д.).

Курсы и ПДК

Различные направления разработки начались с имитации библиотек curses от AT&T, по крайней мере, из трех реализаций: pcurses от Павла Кертиса (начатая в 1982 году), PDCurses (Public Domain curses) Марка Хесслинга для поддержки его редактора THE (начатая в 1987 году), а также Rexx/Curses и PC curses (версия 1.4 и более ранние версии от Бьорна Ларссона, вдохновлённые библиотекой Павла Кертиса до 1990 года).

Скорпионы

ncurses (new curses) "возник как pcurses и был перевыпущен как ncurses 1.8.1 в конце 1993 года". ncurses – наиболее известная реализация curses, которая послужила стимулом для дальнейшей разработки других вариантов, таких как BSD curses в проекте NetBSD.

Переносимость

Хотя библиотека ncurses изначально разрабатывалась для Linux, OpenBSD, FreeBSD и NetBSD, она была портирована на многие другие ANSI/POSIX UNIX системы, главным образом благодаря Томасу Дики. PDCurses, хотя и не идентична ncurses, использует те же вызовы функций и работает аналогично ncurses, за исключением того, что PDCurses ориентирована на другие устройства, например, консольные окна для DOS, Win32, OS/2, а также X11. Переход между ними не представляет большой сложности. Например, roguelike игра ADOM была написана для Linux и ncurses, а затем портирована на DOS и PDCurses.

Приложения

Curses предназначен для обеспечения функциональности, подобной графическому интерфейсу пользователя (GUI), на текстовом устройстве, таком как ПК, работающий в консольном режиме, аппаратный ANSI-терминал, клиент Telnet или SSH и т.п. Программное обеспечение, основанное на Curses, – это программное обеспечение, чей пользовательский интерфейс реализован посредством библиотеки Curses или совместимой библиотеки (например, ncurses). Программы, основанные на Curses, часто имеют пользовательский интерфейс, напоминающий традиционный графический интерфейс пользователя, включая «виджеты», такие как текстовые поля и прокручиваемые списки, а не интерфейс командной строки (CLI), который обычно встречается на текстовых устройствах. Это может сделать их более удобными для пользователя, чем программы на основе CLI, при этом сохраняя возможность работы на текстовых устройствах. Программное обеспечение, основанное на Curses, также может потреблять меньше ресурсов и работать на более широком спектре систем (как с точки зрения аппаратного, так и программного обеспечения), чем их аналоги с графическим интерфейсом. Это включает в себя старые машины, выпущенные до 1990 года, а также современные встраиваемые системы, использующие только текстовые дисплеи. Curses наиболее часто ассоциируется с Unix-подобными операционными системами, хотя существуют и реализации для Microsoft Windows.