Использование программируемых меток
Большинство терминалов поддерживает программируемые метки в нижней части своего экрана. На клавиатуре этим меткам обычно соответствует функциональные клавиши. Меток обычно восемь, каждая длиной в восемь знаков и высотой в одну-две строки.
Библиотека curses содержит подпрограммы, поддерживающие единую модель из восьми программируемых меток. Если терминал их не имеет, нижняя строка его экрана превращается в область программируемых меток. Для использования в curses-программах таких меток, нет необходимости иметь на клавиатуре соответствующие им функциональные клавиши.
Далее кратко описываются большинство подпрограмм curses, применяющихся при работе с программируемыми метками: slk_init(), slk_set(), slk_refresh(), slk_noutrefresh(), slk_clear() и slk_restore().
Если Вы пользуетесь программируемыми метками в curses-программе, Вам необходимо перед initscr() вызвать подпрограмму slk_init(). При этом устанавливается внутренний флаг, указывающий initscr(), что программируемые метки используются. Если initscr() обнаружит, что программируемые метки отсутствуют на терминале, либо их меньше восьми, либо их длина менее восьми символов, она удаляет нижнюю строку stdscr, чтобы использовать ее для размещения программируемых меток. При этом размер stdscr
и значение переменной LINES уменьшается на единицу. Разумно написанная программа, использующая переменные LINES и COLS, будет выполняться правильно, как если бы этой строки вообще не было бы на экране.
slk_init() имеет один аргумент, определяющий способ размещения меток на экране в случае использования для этого строки из stdscr. Выбор возможен между размещением группами 3-2-3, как это принято на терминалах AT&T, либо 4-4, как на терминалах Хьюлетт-Паккард. Подпрограммы curses определяют положение и размер меток в соответствии с указанным способом, причем максимально возможная длина метки - восемь символов.
Подпрограмма slk_set() имеет три аргумента: номер метки (1-8), текст, помещаемый в метку (не более восьми символов), выравнивание этого текста в поле метки (0 - выравнивание влево, 1 - центрирование, 2 - выравнивание вправо).
Подпрограмма slk_noutrefresh() подобна wnoutrefresh() тем, что она обновляет содержимое внутреннего образа экрана, но не выводит данные на реальный экран. Поскольку после ее вызова обычно вызывают wrefresh(), именно slk_noutrefresh(), как правило, используется для вывода меток на экран терминала.
Подобно тому, как wrefresh() эквивалентна последовательным вызовам wnoutrefresh() и doupdate(), подпрограмма slk_refresh()
эквивалентна последовательным вызовам slk_noutrefresh() и doupdate().
Чтобы программируемые метки не мешали работе в среде shell, перед обращением к endwin() можно вызвать slk_clear(), которая удаляет программируемые метки с экрана и вызывает doupdate(). Программируемые метки можно восстановить на экране функцией slk_restore(). Подробнее о подпрограммах для работы с программируемыми метками см. curses(3X).