Основные знания
В эпоху широкого распространения телетайпных машин они выступали в качестве выходных терминалов, подключенных к центральным компьютерам по кабелям. Пользователям приходилось отправлять ряд специальных управляющих команд в программу терминала, чтобы управлять выводом на экране терминала. Например, изменять положение курсора на экране, очищать содержимое определенной области на экране, прокручивать экран, переключать режимы отображения, подчеркивать текст, изменять внешний вид, цвет, яркость и т. д. символов. Эти управляющие действия реализуются с помощью строки, называемой последовательностью escape-символов. Они так называются, потому что эти последовательные байты начинаются с символа 0x1B
, который является escape-символом (символ, вводимый при нажатии клавиши ESC
). Даже сейчас можно имитировать эффект вывода телетайпных терминалов той эпохи, вводя последовательности escape-символов в программы эмуляции терминала. Если вы хотите отобразить текст на терминале (или программе эмуляции терминала) с цветным фоном, вы можете ввести следующую последовательность escape-символов в командную строку:
echo "^[[0;31;40mIn Color"
Здесь ^
и [
- это так называемые escape-символы. (Примечание: в данном случае ^[
- это один символ. Он не вводится последовательным нажатием символов ^
и [
. Чтобы напечатать этот символ, сначала нужно нажать Ctrl+V
, а затем клавишу ESC
.) После выполнения вышеуказанной команды вы должны увидеть, что фон текста In Color
изменился на красный. С этого момента весь отображаемый текст будет выводиться с этим эффектом. Если вы хотите прекратить этот эффект и вернуться к исходному формату, можно использовать следующую команду:
echo "^[[0;37;40m"
Теперь вы знаете, для чего нужны эти символы (последовательности escape-символов)? (Попробуйте изменить параметры между точками с запятой и посмотрите, какой результат получится.) Возможно, он будет отличаться от того, что вы представляли? Это может быть связано с различиями в терминальных средах, которые зависят от различных терминалов или операционных систем. (Вы не можете заставить монохромный терминал отображать цветные символы, верно?) Чтобы избежать таких проблем совместимости и обеспечить единообразный вывод на разных терминалах, разработчики UNIX придумали механизм, называемый termcap
. termcap
- это на самом деле файл, который распространяется вместе с последовательностями escape-символов. В этом файле перечислены все последовательности escape-символов, которые текущий терминал может корректно выполнить, обеспечивая, чтобы результат выполнения введенных последовательностей escape-символов соответствовал спецификациям этого файла. Однако в последующие годы после изобретения этого механизма другой механизм, называемый terminfo
, постепенно начал заменять termcap
. С тех пор пользователям больше не нужно было изучать сложные спецификации последовательностей escape-символов в termcap
при программировании, а нужно было только обращаться к базе данных terminfo
для управления экранным выводом.
Предположим, что все приложения обращаются к базе данных terminfo
для управления выводом (например, отправки управляющих символов и т. д.) в ситуации, когда используется terminfo
. Вскоре такие вызовы кода сделают весь программу сложной для контроля и управления. Появление этих проблем привело к появлению CURSES
. Название CURSES
происходит от игры слов cursor optimization
(оптимизация курсора).
Библиотека CURSES
предоставляет пользователям гибкий и эффективный API (прикладной программный интерфейс), инкапсулируя низкоуровневые управляющие коды (последовательности escape-символов) терминала. Это позволяет пользователям управлять курсором, создавать окна, изменять цвета переднего и заднего плана и обрабатывать операции с мышью. Таким образом, пользователи могут обойти эти утомительные низкоуровневые механизмы при написании приложений для текстовых терминалов.
NCURSES
- это клон CURSES
из System V Release 4.0 (SVr4)
. Это свободно настраиваемая библиотека, полностью совместимая со старыми версиями CURSES
. Короче говоря, это библиотека, которая позволяет приложениям напрямую управлять отображением на экране терминала. Когда впоследствии упоминается библиотека CURSES
, это также относится к библиотеке NCURSES
.
NCURSES
не только инкапсулирует низкоуровневые функции терминала, но и предоставляет довольно стабильную рабочую структуру для создания красивых интерфейсов. Она включает функции для создания окон. А ее "сестринские" библиотеки Menu
, Panel
и Form
- это расширения базовой библиотеки CURSES
. Эти библиотеки обычно распространяются вместе с CURSES
. Мы можем создать приложение, содержащее несколько окон, меню, панелей и форм. Окна можно управлять независимо, например, прокручивать или скрывать их. Меню позволяют пользователям создавать команды для удобного выполнения операций. Формы позволяют пользователям создавать окна для простого ввода и отображения данных. Панели - это расширение функций управления окнами NCURSES и могут накладывать или стекать окна.