НАЗВАНИЕ
terminfo - База данных средств терминала
СИНТАКСИС
/usr/lib/terminfo/*/*
ОПИСАНИЕ
terminfo - база данных, описывающая терминалы, используемая с помощью с помощью terminfo(2). Терминалы описываются в
terminfo множеством средств, которыми они располагают, и описанием, как выполняется операция. Требования заполнения и последовательности инициализации включаются в terminfo.
Входы в terminfo состоят из множества полей, разделенных запятой ','. Пробелы после каждой ',' игнорируются. Первый вход для каждого терминала дает различные имена, известные терминалу. Каждый из этих входов разделяется "|". Первое заданное имя - наиболее общая аббревиатура для терминала, (называемая "корневым именем"), последнее заданное имя должно быть длинным именем, полностью идентифицирующем терминал, и все другие воспринимаются как синонимы имени терминала. Все имена, кроме последнего, должны состоять из больших букв и не содержать пробелов; последнее имя может содержать большие буквы и пробелы для читабельности.
Имена терминалов (кроме последнего входа) должны выбираться при использовании следующих обозначений. Отдельная аппаратная часть, выполняющая роль терминала, должна иметь выбранное корневое имя, например, "h2621". Это имя не должно содержать черточки, за исключением тех синонимов, которые могут быть выбраны, и не конфликтующих с другими именами. Режимы, в которых может находиться аппартура, или которые не предпочитает пользователь, должны указываться, присоединив черточку к указателю режима. Так, vt-100 в режиме со 132 колонками должен быть vt100-w. Когда возможно, следует использовать следующие суффиксы:
Суффикс | Значение | Пример |
---|---|---|
-w | Широкий режим (более чем 80 колонок) | vt100-w |
-am | С автоматическими краями (обычно по умолчанию) | vt100-am |
-nam | Без автоматических краев | vt100-nam |
-n | Число строк на экране | aaa-60 |
-na | Нет ключей-стрелок (оставляет их на месте) | c100-na |
-np | Число страниц в памяти | c100-4p |
-rv | Инверсионный видео | c100-rv |
В следующей таблице "variable" - имя, с помощью которого программист (использующий библиотеку terminfo) обозначает возможность. "capname" - короткое имя, используемое в тексте базы данных и с помощью персонального модернизирования базы данных. "i.code" - внутренний код из двух букв, используемый при составлении базы данных, и всегда соответствует имени возможности termcap(5).
Имя возможности не имеет жесткого предела длины, но формальный предел из 5 символов позаимствован для сохранения их краткости. Всякий раз, когда возможно, имена выбираются так, чтобы быть такими же или подобными ANSI X3.64-1979 стандарту. Семантики, также, предназначаются для сопоставления их спецификаций.
Variable | Capname | I. Code | Description |
---|---|---|---|
Booleans: | |||
аuto_left_margin | bw | bw | cub1 заворачивается от столбца 0 до последнего столбца. |
auto_right_margin | am | am | Терминал имеет автоматические границы. |
beehive_glitch | xsb | xb | "Улей" (f1-Escape; f2 - Ctrl C) |
ceol_standout_glitch | xhp | xs | Впереди стоящие символы не перезаписываются (hp) |
eat_newline_glitch | xenl | xn | Символы новой строки игнорируются после 80-го столобца (Concept) |
erase_overstrike | eo | eo | Можно забивать лишние символы пробелом |
generic_type | gn | gn | Родовой тип строки (напр., dialup, switch) |
hard_copy | hc | hc | Терминал твердой копии |
has_meta_key | km | km | Имеется мета-клавиша (верх. регистр, устанавливает бит контроля) |
has_status_line | hs | hs | Имеется дополнительная "строка состояния" |
insert_null_glitch | in | in | Режим вставки отличается символами "пусто" |
memory_above | da | da | Изображение может быть сохранено перед экраном |
memory_below | db | db | Изображение может быть сохранено под экрананом |
move_insert_mode | mir | mi | Предохранять от перемещения в режиме вставки |
move_standout_mode | msgr | ms | Предохранять от перемещения режимах standout |
over_strike | os | os | Лишние набранные символы терминала |
status_line_esc_ok | eslok | es | В строке состояния может быть использован Escape |
teleray_glitch | xt | xt | "Разрушенные" табуляции, символ magic so |
tilde_glitch | hz | hz | Hazeltine; невозможна печать символов ~ |
transparent_underline | ul | ul | Лишние вводы символа подчеркивания |
xon_xoff | xon | xo | Терминал использует хэншейкинг XON/XOFF |
Числовые: | |||
columns | cols | co | Количество столбцов в строке |
init_tabs | it | it | Изначально заместить табуляциями каждые # пробелов |
lines | lines | li | Количество строк на экране или странице |
lines_of_memory | lm | lm | Строк в памяти (если больше, чем lines). Значение 0 указывает, что величина переменна |
magic_cookie_glitch | xmc | sg | Количество пробелов, оставляемых smso и rmso. |
padding_baud_rate | pb | pb | Нижнее значение бод, при котором требуется заполнение символами cr/nl. |
virtual_terminal | vt | vt | Виртуальный номер терминала (система UNIX) |
width_status_line | wsl | ws | Кол-во столбцов в строке состояния |
Строковые: | |||
back_tab | cbt | bt | Обратная табуляция (Р) |
bell | bel | bl | Звуковой сигнал (Р) |
carriage_return | cr | cr | Возврат каретки (Р*) |
change_scroll_region | csr | cs | Изменение на строки от #1 до #2 (vt-100) (PG) |
clear_all_tabs | tbc | ct | Прочистить все позиции табуляции (Р) |
clear_screen | clear | cl | Очистка экрана и установка курсора в начальное положение |
clr_eol | el | ce | Очистка до конца строки |
clr_eos | ed | cd | Очистка до конца изображения (Р*) |
column_address | hpa | ch | Установка столбца курсора |
command_character | cmdch | CC | Установливаемый символ cmd в прототипе |
cursor_address | cup | cm | Относительное перемещение курсора на экране: строка #1, столбец #2 (PG) |
cursor_down | cud1 | do | Вниз на одну строку |
cursor_home | home | ho | Курсор в начальное положение (если не cup) |
cursor_invisible | civis | vi | Сделать курсор невидимым |
cursor_left | cub1 | le | Передвинуть курсор влево на одну позицию |
cursor_mem_address | mrcup | CM(+) | Относительная адресация курсора в памяти |
cursor_normal | cnorm | ve | Сделать курсор обычным (переделать vs/vi) |
cursor_right | cuf1 | nd | Неразрушительное перемещение курсора (курсор вправо) |
cursor_to_ll | ll | ll | Последняя строка, первый столбец (если не сup) |
cursor_up | cuul | up | Вверх на строку (курсор вверх) |
cursor_visible | cvvis | vs | Сделать курсор видимым |
delete_character | dch1 | dc | Удаление символа (Р*) |
delete_line | dll | dl | Удаление сторки (Р*) |
dis_status_line | dsl | ds | Сделать небоступной строку состояния |
down_half_line | hd | hd | Вниз на половину строки (вперед на 1/2 перевода строки) |
enter_alt_charset_mode | smacs | as | Начать альтернативный набор символов (Р) |
enter_blink_mode | blink | mb | Включить режим мерцания |
enter_bold_mode | bold | md | Включить режим повышеной яркости |
enter_ca_mode | smcup | ti | Цепочка для начала программ, которые используют cups |
enter_delete_mode | smdc | dm | Режим удачения (ввод) |
enter_dim_mode | dim | mh | Включить режим половинной яркости |
enter_insert_mode | smir | im | Режим вставки (ввод) |
enter_protected_mode | prot | mp | Включить режим защиты |
enter_reverse_mode | rev | mr | Включить обратный видеорежим |
enter_secure_mode | invis | mk | Включить режим пробелов (символы невидимы) |
enter_standout_mode | smso | so | Начать режим standout |
enter_underline_mode | smul | us | Начать режим подчеркивания |
erase_chars | ech | ec | Стереть #1 символов (PG) |
exit_alt_charset_mode | rmacs | ae | Завершить альтернативный набор символов |
exit_attribute_mode | sgr0 | me | Выключить все атрибуты |
exit_ca_mode | rmcup | te | Цепочка для завершения программ, которые используют cups |
exit_delete_mode | rmdc | ed | Завершить режим удаления |
exit_insert_mode | rmir | ei | Завершить режим вставки |
exit_standout_mode | rmso | se | Завершить режим standout |
exit_underline_mode | rmul | ue | Завершить режим подчеркивания |
flash_screen | flash | vb | Символ звукового сигнала видим (может не переместить курсор) |
form_feed | ff | ff | Прогон страницы твердой копии (Р*) |
from_status_line | fsl | fs | Возврат из строки состояния |
init_1string | is1 | i1 | Строка инициализации терминала |
init_2string | is2 | i2 | Строка инициализации терминала |
init_3string | is3 | i3 | Строка инициализации терминала |
init_file | if | if | Имя файла, содержащего is |
insert_characters | ich1 | ic | Вставка символа (Р) |
insert_line | il1 | al | Добавление пустой строки (Р*) |
insert_padding | ip | ip | После вставленного символа вставить символ-заполнитель |
key_backspace | kbs | kb | Посылается клавишей "шаг назад" |
key_catab | ktbc | ka | Посылается клавишей очистки всех табуляций |
key_clear | kclr | kC(+) | Посылается клавишами очистки экрана или стирания |
key_ctab | kctab | kt | Посылается клавишей очистки табуляции |
key_dc | kdchl | kD(+) | Посылается клавишей удаления |
key_dl | kdll | kL(+) | Посылается клавишей удаления строки |
key_down | kcud1 | kd | Посылается клавишей "стрелка вниз" терминала |
key_eic | krmir | kM(+) | Посылается rmir или smir в режиме вставки |
key_eol | kel | kE(+) | Посылается клавишей очистки до конца строки |
key_eos | ked | kS(+) | Посылается клавишей очистки до конца экрана |
key_f0 | kf0 | k0 | Посылается функциональной клавишей f0 |
key_f1 | kf1 | k1 | Посылается функциональной клавишей f1 |
key_f10 | kf10 | k | Посылается функциональной клавишей f10 |
key_f2 | kf2 | k2 | Посылается функциональной клавишей f2 |
key_f3 | kf3 | k3 | Посылается функциональной клавишей f3 |
key_f4 | kf4 | k4 | Посылается функциональной клавишей f4 |
key_f5 | kf5 | k5 | Посылается функциональной клавишей f5 |
key_f6 | kf6 | k6 | Посылается функциональной клавишей f6 |
key_f7 | kf7 | k7 | Посылается функциональной клавишей f7 |
key_f8 | kf8 | k8 | Посылается функциональной клавишей f8 |
key_f9 | kf9 | k9 | Посылается функциональной клавишей f9 |
key_home | khome | kh | Посылается клавишей home |
key_ic | kich1 | kl | Посылается клавишами вставки/ ввода в режиме вставки |
key_il | kill | kA(+) | Посылается вставкой строки |
key_left | kcub1 | kl | Посылается клавишей "стрелка влево" |
key_ll | kll | kH(+) | Посылается клавишей home-down |
key_npage | knp | kN(+) | Посылается клавишей следующей страницы |
key_ppage | kpp | kP(+) | Посылается клавишей предыдущей страницы |
key_right | kcuf1 | kr | Посылается клавишей "стрелка вправо" |
key_sf | kind | kF(+) | Посылается клавишей прокрутки вперед/вниз |
key_sr | kri | kR(+) | Посылается клавишей прокрутки назад/вверх |
key_stab | khts | kT(+) | Посылается клавишей установки табуляции |
key_up | kcuu1 | ku | Посылается клавишей "стрелка вверх" |
keypad_local | rmkx | ke | Вне режима "keypad transmit" |
keypad_xmit | smkx | ks | Перевести терминал в режим "keypad transmit" |
lab_f0 | lf0 | l0 | Метки на функциональной клавише f0, если не f0 |
lab_f1 | lf1 | l1 | Метки на функциональной клавише f1, если не f1 |
lab_f10 | lf10 | la | Метки на функциональной клавише f10, если не f10 |
lab_f2 | lf2 | l2 | Метки на функциональной клавише f2, если не f2 |
lab_f3 | lf3 | l3 | Метки на функциональной клавише f3, если не f3 |
lab_f4 | lf4 | l4 | Мeтки на функциональной клавише f4, если не f4 |
lab_f5 | lf5 | l5 | Метки на функциональной клавише f5, если не f5 |
lab_f6 | lf6 | l6 | Метки на функциональной клавише f6, если не f6 |
lab_f7 | lf7 | l7 | Метки на функциональной клавише f7, если не f7 |
lab_f8 | lf8 | l8 | Метки на функциональной клавише f8, если не f8 |
lab_f9 | lf9 | l9 | Метки на функциональной клавише f9, если не f9 |
meta_on | smm | mm | Включение режима "meta mode" |
meta_off | rmm | mo | Выключение режима "meta mode" |
newline | nel | nw | Новая строка (ведет себя как cr, за которым следует lf) |
pad_char | pad | pc | Символ-заполнитель (вместо пустого символа) |
parm_dch | dch | DC(+) | Удалить #1 символов (PG*) |
parm_delete_line | dl | DL(+) | Удалить #1 строк (PG*) |
parm_down_cursor | cud | DO(+) | Переместить курсор вниз на #1 строк (PG*) |
parm_ich | ich | IC(+) | Вставить #1 пробелов (PG*) |
parm_index | indn | SF(+) | Прокрутка вперед на #1 строк (PG) |
parm_insert_line | il | AL(+) | Добавить #1 пустых строк (PG*) |
parm_left_cursor | cub | LE(+) | Переместить курсор влево на #1 позиций (PG*) |
parm_right_cursor | cuf | RI(+) | Переместить курсор вправо на #1 позиций (PG*) |
parm_rindex | rin | SR(+) | Прокрутка назад на #1 строк (PG) |
parm_up_cursor | cuu | UP(+) | Переместить курсор вверх на #1 строк (PG*) |
pkey_key | pfkey | pk | Программная функциональная клавиша #1 для печати строки #2 |
pkey_local | pfloc | pl | Программная функциональная клавиша #1 для выполнения строки #2 |
pkey_xmit | pfx | px | Программная функциональная клавиша #1 для передачи строки #2 |
print_screen | mc0 | ps | Печать сожержимого экрана |
prtr_off | mc4 | pf | Включение принтера |
repeat_char | rep | rp | Выключение принтера |
reset1_string | rs1 | r1 | Полный сброс терминала в обычные режимы |
reset2_string | rs2 | r2 | Полный сброс терминала в обычные режимы |
reset3_string | rs3 | r3 | Полный сброс терминала в обычные режимы |
reset_file | rf | rf | Имя файла, содержащего строку сброса |
restore_cursor | rc | rc | Установка курсора в позицию последнего sc |
row_address | vpa | cv | Абсолютная позиция по вертикали (строка установки) (PG) |
save_cursor | sc | sc | Сохранение позиции курсора (Р) |
scroll_forward | ind | sf | Прокрутка текста вверх (Р) |
scroll_reverse | ri | sr | Прокрутка текста вниз (Р) |
set_attributes | sgr | sa | Определить видеоатрибуты (PG9) |
set_tab | hts | st | Проставить табуляции во все столбцы текущей строки |
set_window | wind | wi | Текущим окном являются строки #1-#2, столбцы #3-#4 |
tab | ht | ta | Табулировать до следующего места табуляции оборудования через 8 позиций |
to_status_line | tsl | ts | Переход в строку состояния, первый столбец |
underline_char | uc | uc | Подчеркнуть один символ и встать за ним |
up_half_line | hu | hu | Вверх на пол-строки (назад на 1/2 прогона строки) |
init_prog | iprog | iP | Полное имя программы инициализации |
key_a1 | ka1 | K1(+) | Верхний левый угол клавиатуры |
key_a3 | ka3 | K3(+) | Верхний правый угол клавиатуры |
key_b2 | kb2 | K2(+) | Центр клавиатуры |
key_c1 | kc1 | K4(+) | Нижний левый угол клавиатуры |
key_c3 | kc3 | K5(+) | Нижний правый угол клавиатуры |
prtr_on | mc5p | pO(+) | Включить принтер для #1 байтов |
Простой вход
Следующий вход, описывающий Concept-100, находится среди
более сложных в файле terminfo.
concept100 |c100| concept| c104| c100-4p| concept 100, am, bel=^G, blank=\EH, blink=\EC, clear=^L$<2*>, cnorm=\Ew, cols#80, cr=^M$<9>, cub1=^H, cud1=^J, cuf1=\E=, cup=\Ea&p1&' '&+&c&p2&' '&+&c' cuu1=\E;, cvvis=\EW, db, dch1=\E^A$<16*>, dim=\EE, d11=\E^B$<3*>, ed=\E^C$<16*>, el=\E^U$<16>, eo, flash=\Ek$<20>\Ek, ht=\t$<8>, il1=\E^R$<3*>, in, ind=^J, .ind=^J$<9>, ip=$<16*>, is2=\EU\Ef\E7\E5\E8\El\ENH\EK\E\200\Eo&\200\Eo\47\E, kbs=^h, kcub1=\E<, kcud1=\E<, kcuf1=\E=, kcuu1=\E;, kf1=\E5, kf2=\E6, Kf3=\E7, khome=\E?, lines#24, mir, pb#9600, prot=\EI, rep=\Er&p1&c&p&2&' '&+&c$<.2*), rev=\ED, rmcup=\Ev $<6>\Ep\r\n, rmir=\E\200, rmkx=\Ex, rmso=\Ed\Ee, rmul=\Eg, rmul=\Tg, sgr0=\EN\200, smcup=\EU\Ev8p\Ep\r, smir=\E^P, smkx=\EX, smso=\EE\ED, smull=\EG, tabs, ul, vt#8, xenl.
Входы могут продолжаться в размноженные строки путем помещения пробелов в начале каждой строки, кроме первой. Строкикомментарии начинаются с '#'. Средства в terminfo - 3-х типов: булевские средства, которые указывают, что терминал имеет характерные особенности, числовые средства, задающие размер терминала, и величины конкретных задержек, строчные средства,задающие последовательности, которые могут быть использованы для выполнения конкретных операций терминала.
Виды средств
Все средства имеют имена . Например, факт, что
Concept-100 имеет automatic margins ( то есть, автоматический
возврат и продвижение на строку, когда достигается конец строки), отмечается средством am. Отсюда следует, что описание
Concept включает am. За числовыми средствами следует символ
"#", и затем значение. Таким образом, cols, который указывает
количество колонок терминала, дает значение '80' для Concept.
Наконец, строкоые средства, такие как el (очистить до конца последовательность строк), задаются двухсимвольным кодом, '=', затем следует строка, заканчивающаяся ','. Задержка в миллисекундах может появляться где угодно в этом средстве, заключается в $<..>, как el=\EK$<3>, и символы наполнения поддерживаются tputs для обеспечения этой задержки. Задержка может быть либо числом,например, '20', либо числом, за которым следует '*', например, '3*'. '*' показывает, что требуемое заполнение пропорционально числу строк, на которые действует операция, а задаваемое количество является требуемым заполнением per-affected-unit. (В случае символа вставки этот коэффициент является числом, равным количеству задействованных строк. Это всегда 1, за исключением тех случаев, когда терминал имеет xenl, и аппаратура использует его.) Когда определяется '*', иногда полезно задавать задержку в виде '3.5', чтобы определить задержку на устройство в десятках миллисекунд. (Допускается только одно десятичное значение.)
Количество управляющих последовательностей обеспечивается строковыми средствами для облегчения раскодирования символов. Обе \E и \e преобразуются в символ ESCAPE, ^x преобразует в ctrl-x для любого соответственного x, и последовательности \n \l \r \t\ \b \f \s задают новую строку, linefeed, возврат, табуляцию, backspace, formfeed и пробел. Другие управляющие символы включают \^ для ^, \\ для \, \, для запятой, \: для :, \0 для 0. (\0 будет вырабатывать \200, который не звершает строку, но ведет себя как нулевой символ на большинстве терминалов). Наконец, символ может задаваться как три восьмеричные цифры после \a.
Иногда отдельные средства могут быть раскомментированы. Для выполнения этого, помещается период перед названием средства. Например, смотри второй ind в примере, приведенном выше.
Подготовительное описание
Наиболее эффективный способ подготовить описание терминала
- это имитировать описание подобного терминала в terminfo и
постепенно построить описание, используя частичное описание vi
для проверки правильности. Помните, что наиболее необычные терминалы могут предъявлять нехватку возможностей файла terminfo,
чтобы описывать их или дефекты в vi. Для облегчения проверки
описания терминала вы можете поместить переменную среды
TERMINFO в составное имя каталога, содержащего полное описание,
с которым вы работаете, и программы будут просматриваться здесь
быстрее, чем в /usr/lib/terminfo. Чтобы получить заполнения для
вставленной строки справа ( если изготовитель терминала не документировал это), серьезный тест должен редактировать копию
/etc/passwd до 9600 бод, удалить около 16 или 16 строк с середины экрана и затем много раз быстро нажать 'u' клавишу. Если
терминальный дисплей беспорядочен, обычно необходимо большое заполнение. Подобный тест может использоваться для символа вставки.
Основные средства
Числовые средства cols описывают число колонок в каждой
строке терминала. Если терминал - CRT, то число строк на экране задается посредством lines. Если терминал перескакивает в
начало следующей строки, когда он достигает правого края, то
он должен обладать средством am. Если терминал должен очистить
свой экран, оставив свой кусрор в начальной позиции, это задается средством clear. Если терминал делает лишние удары (быстрее чем стирается позиция, когда символ набивается заново), то
используется средство os. Если терминал представляет собой печатающее устройство без мягкой копии, задаются оба средства os
и hc. (os поддерживается для сохранения терминалов, таких как
TEKTRONIX 4010 серии, также как твердые копии и APL терминалы). Если существует код для продвижения курсора в левый угол
текущего ряда, это задается как cr. (Обычно бывает возврат каретки, ctrl-M). Если существует код для выработки звукового
сигнала, то он определяется как bel.
Существует код для продвижения курсора на одну позицию влево (такую как backspace), средство следует задавать как cub1. Аналогично, коды для продвижения вправо, вверх и вниз определяются как cuf1, cuu1 и cud1. Эти локальные движения курсора не должны изменять текста, который они проходят, например, вы обычно не сможете использовать 'cuf1=', так как область, которую он проходит, будет стираться.
Важно, что локальное движения курсора, закодированное в terminfo, не определены в левой и верхней границах терминала CRT. Программы никогда не должны пытаться делать backspace влево, если не задано bw, и переходить через верх. По мере просмотра текста назад программа будет идти к левому углу экрана и посылать строку ind.
По мере просмотра текста вперед программа идет в верхний левый угол экрана и посылает строку ri (обратный индекс). Строки ind и ri не определяются, когда они не на соответствующих углах экрана.
Параметризованными версиями просматривающих последовательностей являются indn и rin, имеющие ту же самую семантику, что и ind и ri, кроме тех случаев, когда они принимают один параметр и просматривают таким образом много строк. Они также не определяются, кроме как, на соответствующих углах экрана.
Средство am говорит, был ли курсор нажат справа от экрана,когда выводился текст, но это не обязательно поддерживать средством cuf1 из последней колонки. Локальное перемещение, которое определяется из левого края при заданном bw, существует, при этом cub1 из левого угла будет двигаться в правый угол предшествующей строки. Если bw не задано, эффект не предсказуем. Это полезно для вычерчивания рамки угла экрана. Если терминал имеет преключатель, способный выбирать автоматические края, то файл terminfo обычно потверждает, что он присутствует; например, am. Если терминал имеют команду, которая перемещает к первой колонки следующей строки, то команда может задаваться как nel (новая строка). Не имеет значения, если команда очищает остаток текущей строки, поэтому, если терминал не имеет cr и lf, то все же возможно обойтись рабочим nel без одной или обоих.
Этих средств достаточно для описания твердых копий и glass-tty терминалов. Таким образом, модель 33 телетайпа описывается следующим образом:
33|tty33|ty|model 33 teletype, bel=^G, cols#72, cr=^M, cud1=^J, hc,ind=^j, osгде Lear Siegler ADM-3 описывается следующим образом:
adm3|3|lsi adm3, am, bel=^G, clear=^Z, cols#80, cr=^M, cub1=^H, cud1=^J, ind=^J, lines#24
Параметризованные строки
Адресация курсора и другие строки, запрашивающе параметры
в терминале, описываются средствами параметризованных строк, с
помощью printf(2), подобно управвляющему в нем %x. Например,
для адресации курсора используется средство cup, использующее
два параметра: строка и колонка для адресации. (Строки и колонки пронумерованы то 0 и относятся к физическому экрану, за которым наблюдает пользователем, а не к какой-либо невидимой памяти). Если терминал имеет относительную адресацию курсора, то
это может быть задано mrcup.
Механизм параметризации использует стек и специальный код % для манимулирования. Обычно последовательность помещает один из параметров в стек и потом печатает его в некотором формате. Часто необходимы более сложные операции.
% кодирование имеет следующие значения:
Операции в двоичном коде - в виде postfix c операциями в обычном порядке. То есть, для того чтобы получить x-5 следует использовать "%gx%{5}%-".
Расмотрим HP2645, которому для получения 3 строки и 12 колонки требуется послать \E&a12c03Y, происходящее за 6 миллисекунд. Отметим, что порядок строк и колонок здесь инвертируется, и эти ряд и колонка печатаются как две цифры. Так, средство 2cup 0 означает cup=\E&%p2%dc%p1%2dY$<6>.
Для Microterm ACT-IV перед посылкой текущей строки и колонки нужно выполнить ^T, где строка и колонка закодированы в двоичном исчислении, cup=^T%p1%c%p2%c. Терминалы, использующие %, должны обладать свойством backspace курсора (cub1) и передвижением курсора вверх на одну строку (cuu1). Это необходимо, так как это не всегда сохраняет передачу \n ^D и \r, когда система может изменить или убрать их. (Библиотечные программы имеют дело с режимами tty набора terminfo, так что таблицы никогда не расширяются, поэтому \t сохраняется для посылки. Это существенно для Ann Arbor 4080.)
И наконец, пример LSI ADM-IV, использующий смещение по строке и колонке с помощью символа пробела, так cup=\E=%p1%' '%+%c. После посылки '\E=' помещает первый параметр, значение ASCII для области (32), складывает их (помещая сумму в стек на место двух предыдущих значений) и выводит это значение в качестве символа. Затем делает то же самое со вторым параметром. Возможна более сложная арифметика, использующая стек.
Если терминал имеет абсолютную адресацию курсора в строке или колонке, она может задаваться единственным параметром hpa (абсолютная горизонтальная позиция) и vpa (абсолютная вертикальная позиция). Иногда они короче, чем более общая последовательность двух параметров (как в HP2645), и могут быть использованы в предпочтении к cup. Если имеются локальные параметризованные перемещения (например, переместиться на n позиций вправо), то они могут быть заданы cud, cub, cuf и cuu с единстенным параметром, показывающим, на сколько позиций двигаться. Преимущественно они используются в терминалах, не имеющих cup, таких как TEKTRONIX 4025.
Перемещения курсора
Если терминал имеет быстрый способ поместить курсор в верхний угол экрана (самый верхний левый угол экрана), то мы задаем это как home; аналогично, быстрый способ достичь левого нижнего угла - использовать ll; это можно получить, поднимаясь
вверх с помощью cuu1 из начальной позиции, но программа никогда
не может выполнить это сама ( до тех пор, пока не сделает ll),
потому что нельзя сделать никаких допущений относительно результата движения вверх из начальной позиции. Отметим, что начальная позиция - то же самое, что и адресация к (0,0): к верхнему левому углу экрана, а не памяти. (Так, последовательность
\EH терминалов HP не может использоваться для 2home 0.)
Очищение области
Если терминал может очищать остаток строки, начиная от
текущей позиции, оставляя курсор на то же месте, надо задать
el. Если терминал может очищать до конца дисплея от текущей
позиции, то следует задавать ed. ed определяется только из
первой колонки строки. (Так, он может воспроизводиться с помощью запроса об уничтожении большего количества строк, если
истинное ed не присутствует).
Вставка/уничтожение строки
Если терминал может открыть несколько пустых строк там,
где расположен курсор, то это может задавться il1; это выполнимо только в первой позиции строки. Курсор должен появиться
на новой пустой строке. Если терминал должен уничтожать строку,
на которой расположен курсор, то это задается dl1; это выполнимо только в первой позиции строки, которая должна быть уничтожена. Версии il1 и dl1, использующие один параметр и помещающие или уничтожающие несколько строк, могут задаваться как il
и dl. Если терминал имеет устанавливаемую область просмотра
(подобную vt-100), команды, которые не используют это, могут
быть описаны средством csr, которое использует два параметра:
начальную и конечную строки просмотра области. Позиция курсора, однако, не определена после выполнения этой команды. Возможно получить результат вставки или вычеркивания строк, используя команды sc и rc ( сохранения и восстановления
курсора). Вставление строк сверху и снизу экрана может быть
выполнено с помощью ri и ind на многих терминалах без истинной
вставки или вычеркивания строк, и это часто происходит на терминалах, использующих это свойство.
Если терминал имеет возможность определять окно как часть памяти, на которую воздействуют все команды, то это задается параметризованной сторкой wind. В этом случае используется 4 параметра: начальная и конечная строки в памяти и начальная и конечная колонки в памяти, в таком порядке.
Если терминал может сохранять дисплейную память над, то следует задавать средство da; если дисплейная память задается ниже, то db. Это указывает, что уничтожение строки и просмотр может доставлять пустые строки вверх снизу, или же просмотр назад с помощью ri может опускать их сверху.
Вставка/стирание символа
Имеется два основных вида разумных терминалов, что касается вставки/стирания символа, которые могут быть описаны с
помощью terminfo. Наиболее общие операции вставки/стирания
символов затрагивают символ в такой строке и сдвигают символ
строго с конца строки. Другие терминалы, такие как Concept 100
и Perkin Elmer Owl, делают различие между напечатыванием и ненапечатыванием пробелов на экране, помещая на место вставляемого или уничтожаемого символа ненапечатанный пробел, который
также высвечивается или расширяет их их до двух пробелов. Вы
можете отличать тип терминала, который вы имеете, путем чистки
экрана, затем печатая текст, разделенный движением курсора.
Печатание abc def использует локальные перемещения курсора (не
позиции) между abc и def. Тогда курсор помещается перед abc, и
терминал устанавливается в режим вставки. Если печатание символов вызывает остаток строки к жесткому сдвигу, и символы отпадают, тогда ваш терминал не делает различия между пробелами
и ненапечатанными пробелами порциями. Если "abc" сдвигается к
def, которые потом вместе начинают двигаться к концу и затем
на следующую вставленную строку, вы имеете второй тип терминала и должны использовать средство in, которое устанавливает
для вставки нуль. Если существуют два логически разделенных
аттрибута (одна строка vs, режим ввода множественных строк и
специальное обращение с ненапечатанными позициями), то мы не
находим терминалов, у которых режим вставки не может быть описан одним аттрибутом.
terminfo может описывать как терминалы, которые имеют режим вставки, так и терминалы, посылающие простую последовательность, чтобы открыть пустую позицию в текущей строке. Чтобы войти в режим вставки, используется последовательность smir. Чтобы выйти из режима встаки используется последовательность rmir. Теперь зададим в качестве ich1 любую последовательность, необходимую для посылки сразу перед тем, как символ, который следует вставить. Большинство терминалов с истинным режимом вставки не выдают ich1; терминалы, посылающие последовательность для открытия экрана, должны его здесь содержать. (Если терминал имеет оба средства, то режим вставки предпочитается ich1. Не используйте ни одного, пока терминал не потребует их для использования в комбинации). Если необходимо последующее (после вставки) заполнение, то задавайте его как число миллисекунд в ip (параметр строки). Любая другая последовательность, которая может потребоваться для посылки после вставки одного символа, также может задаваться в ip. Если вашему терминалу нужны и режим вставки, и специальный код, который предшевствует специальному символу, тогда могут быть заданы smir/rmir и ich1, и оба могут использоваться. Средства ich с одним параметром n повторяют действия ich1 n раз.
Иногда бывает необходимо повторить режим вставки для уничтожения символов в той же строке (например, если имеется таблица после вставляемой позиции). Если ваш терминал позволяет перемещение в процессе режима вставки, вы можете задавать средство mir для ускорения вставки в этом случае. Избежание mir будет влиять только на скорость. Некоторые терминалы (как Datamedia) не должны использовать mir из-за работы режима вставки.
И наконец, вы можете определить dch1 для уничтожения работы одного символа, dch с одним параметром n для уничтожения n символов и режим уничтожения, задаваемый smdc и rmdc, для входа и выхода в него ( любой режим терминала допускается для работы в 2 dch1 0).
Команда для стирания символов (эквивалентная выводу n пробелов без перемещения курсора) может задаваться как ech c одним параметром.
Выделение, подчеркивание и видимые сигналы
Если ваш терминал имеет один или более аттрибутов дисплея, то они будут представлены в ряде различных способов. Вам
следует выбрать один вид дисплея в режиме standout, представляющим хороший, высококонтрастный, хорошо различимый формат
для яркого высвечивания сообщений об ошибках и других, имеющих
значение выходов. (Если вы имеете выбор, подходит инверсионный
видео полуяркого изображения или один инверсионный видео).
Последовательности для входа и выхода в режиме standout задаются соответственно, как smso и rmso. Если код для изменения
режима standout оставляет один или два пробела на экране, как
в TVI 912 и Teleray 1061, то следует задать xmc, для того чтобы сообщить количество оставленных пробелов.
Коды для начала подчеркивания и конца подчеркивания могут задаваться соответственно, как smul и rmul. Если терминал имеет код для подчеркивания текущего символа и сдвигает курсор на позицию вправо, как Microterm Mime, то следует задать uc.
Другие средства для входа в различные режимы выделения включают blink (мерцание), bold (повышенная яркость), dim (средняя яркость), invis ( пробел или невидимый текст), prot (защищенный), rev (инверсионный видео), sgr0 (выключение аттрибутных режимов all), smacs (режим ввода набора изменяемых символов). Включение одного из этих режимов может выключать или не выключать эти режимы.
Если есть последовательность, устанавливающая произвольные комбинации режимов, она должна задаваться, как sgr (признак установки), используя 9 параметров. Каждый параметр, 0 или 1, означает, присутствует или нет соответствующий признак. Эти 9 параметров идут в порядке: standout, подчеркивание, инверсия, мерцание, низкая яркость, высокая яркость, пробел, защита, изменение набора символов. Не все режимы нуждаются в поддержке с помощью sgr только те, для которых существуют соответствующие аттрибуты команд.
Терминал с глитчем "magic cookie" (xmc) приготавливает специальные "cookies", когда они принимают устанавливающие режимы последовательности, которые задействуют дисплейный алгоритм ранее, чем принимают дополнительные биты для каждого символа. Некоторые терминалы, такие как HP 2621, автоматически выходят из режима standout, когда они передвигаются на новую строку, или когда адресуется курсор. Программы, использующие режим standout, должны выйти из этого режима прежде, чем двикать курсор или посылать новую строку, если не присутствует msrg, допускающее для возможности перемещения в режиме standout.
Если терминал имеет возможность мерцания экрана для указания ошибки (замещающее звуковой сигнал), то она дается flash; не должно перемещать курсор.
Если курсор необходимо сделать более ярким, когда он не на последней строке (выполнить, например, немерцающее подчеркивание для более легкого поиска блока или мерцающее подчеркивание), то последовательность задается как cviis. Средство cnorm должно быть задано, когда допускается влияние на оба эти режима.
Если терминал должен находится в специальном режиме во время выполнения программы, используя эти средства, коды для входа и выхода в этот режим могут задаваться как smcup и rmcup.
Это увеличивает для терминала, как Сoncept, на более, чем одну страницу. Если терминал имеет только относительную адресацию в памяти курсора, а не относительную адресацию курсора на экране, окно размером в экран должно фиксироваться в терминале для аресации курсора для работы надлежащим образом. Также ээто используется для TEKTRONIX 4025, где smcup устанавливает управляющий символ для того, чтобы использовать его с помощью terminfo.
Если ваш терминал правильно генерирует подчеркнутые символы (без требования специальных кодов), даже если они не перебиваются, то вам следует использовать средство ul.Если лишние клавиши затираются пробелами, то следует отметить этот факт, используя eo.
Клавиатура
Если терминал имеет клавиауру, которая передает коды,
когда нажимается клавиша, и может выдаваться эта информация.
Отметим, что невозможно управлять терминалами, когда клавиатура работает локально (это применяется, например, на клавишах
HP 2621). Если клавиатуры могут устанавливаться для передачи
или непередачи, даются коды smkx и rmkx. В противном случае,
предполагается, что клавиатура всегда передает. Коды, посылаемые с помощью левой стрелки, правой стрелки, стрелки вверх,
стрелки вниз и начальной клавиши, могут быть заданы как kcub1,
kcuf1, kcuu1, kcud1 и khome соответсвенно. Если имеются функциональные клавиши, такие как f0, f1, ..., f10, то посылаемые
коды могут задаваться как kf0, kf1, ..., kf10. Если эти клавиши имеют метки, отличные от f0 до f1, то метки 2lf0, lf1, ...,
lf10 могут присваиваться. Коды, передаваемые другими пециальными функциональными клавишами, могут задаваться: kll (вернуться в начальное положение), kbs (backspace), ktbc (очистить
все клавиши табуляции), kctab (очистить stop в этой колонке),
kclr (очистить экран и стереть клавиши), kdch1 (убрать символ), kdl1 (убрать строку), kmir (выйти из режима вставки),
kel (очистить до конца строки), ked (очистить до конца экрана), kich1 ( вставить символ или включить режим встаки), kil1
(вставить строку), knp (следующая страница), kpp (предыдущая
страница), kind (просмотр вперед/вниз), kri (просмотр назад/вниз), khts (установить stop в этой колонке). В добавление, если клавиатура имеет массив клавиш 3 на 3 , включая 4
клавиши-стрелки, могут задаваться как ka1, ka3, kb2, kc1 и
kc3. Эти клавиши могут использоваться, когда необходимо заполнение 3 на 3.
Табуляция и инициализация
Если терминал имеет аппаратные символы табуляции, команда
для продвижения к следующему символу табуляции stop будет задаваться как ht (обычно ctrl-I). Команда "backtab", которая
продвигает до следующего символа табуляции stop. При преобразовании, если режим телетайпа указывает, что символы табуляции
расширяются с помощью компьютера прежде, чем посылаются на
терминал, в программах не следует использовать ht и cbt, даже
если они присутствуют, так как пользователь не имеет установленных надлежащим образом символов табуляции. Если терминал
имеет аппаратные символы табуляции, которые изначально установлены через каждые n позиций при включении терминала,задается параметр it, показывающий количество позиций, через которые
должны быть установлены символы табуляции. Это обычно используется командой tset(1) для определения, установлен ли режим
расширения для символов табуляции, и установлены ли символы
stop. Если терминал имеет символы stop, сохраняющиеся в памяти, то описание terminfo допускает, что они установлены правильно.
Другие средства включают is1, is2 и is3, строки инициализации для терминала, iprog, составное имя программы, которое следует выполнить для инициализации терминала и if, имя файла, содержащего строки длинной инициализации. Эти строки ожидаются для установки терминала в режим, связанный с остаттком описания файла terminfo. Они обычно посылаются на терминал с помощью программы tset, каждый раз, пока пользователь загружается. Оним будут печататься в следующем порядке: is1, is2, устанавливая символы табуляции, использующие tbc и hts; выполняемую программу iprog; и, наконец, is3. Большая часть инициализации выполняется с помощью is2. Определенные режимы терминала могут устанавливаться без дублирования строк путем помещения общей последовательности в is2 и определенных букв в is1 и is3. Пара последовательностей, которая выполняет жесткую замену из неизвестного состояния, может быть задана rs1,rs2,rf и rs3, аналогично для is2 и if. Команды обычно помещаются в rs2 и rf, если они дают неприятный эффект на экране и не обязательны при загрузке. Например, команды, устанавливающие vt-100 в 80-колонный режим, обычно бывают частью is2, но они вызывают мерцание экрана и не нужны, пока они не перейдут в этот режим.
Если есть команды, которые помещают и очищают символы табуляции stop, они могут задаваться tbc ( стереть все символы stop) и hts ( установить символ табуляции stop в текущую колонку текущей строки). Если требуется более сложная последовательность для установки символов табуляции, которые были описаны выше, последовательность может заменяться в is2 или if.
Задержки
Некоторые средства управляют заполнениями в драйвере телетайпа. Они в первую очередь необходимы для тврдых копий терминала и используются программой tset при соответствующей установке режима телетайпа. Задержки, включенные в средства cr,
ind, cub1, ff и tab, вызывают установку битов задержки, которые помещаются в драйвер телетайпа. Если задается pb (цена заполнения), это значение может опускаться после значения pb.
Разное
Если в терминале требуются другие символы заполнения, отличные от нуля, это может задать с помощью pad. Используется
только первый символ строки pad.
Если в терминале имеется дополнительное "состояние строки", которое, как правило, не используется программами, этот факт может быть отмечен. Если состояние строки показано, как дополнительная строка под нижней строкой, на которую курсор может адресоваться (такие как HEATHKIT h'19's 25ти строковая или 24х строковая vt-100, в которой установлена 24х строковая область просмотра), следует испоьзовать средство hs. Специальные строки, позволяющие попасть в начало строки состояния и вернуться из нее, могут задаваться с помощью tsl и fsl. (fsl должна оставлять курсор в той же позиции, где он находился перед выполнением tsl. Если необходимо, то в tsl и fsl можно включать строки sc и rc для достижения этого результата.) Параметр tsl берет один параметр, который является номером колонки состояния строки, к которой должен двигаться курсор. Если управляющие последовательности и другие специальные команды, такие как tab, работает, если в состоянии строки задан флаг eslok. Строка, которая выключает состояние строки (или в другом случае стирает его содержимое), это можно задать с помощью dsl. Если терминал имеет команды сохранения и восстановления позиции курсора, это можно задать с помощью sc и rc. Состояние строки обычно допускается такой же ширины, как остаток экрана, то есть cols Если состояние строки другой ширины ( возможно потому, что терминал не позволяет загрузить целую линию), ширина в колонках может быть указана с помощью числового параметра wsl.
Если терминал может свдигать на полстроки вверх или вниз, это задается как hu (полстроки вверх) и hd (полстроки вниз). Это, главным образом, полезно для подстрочных и надстрочных индексов в терминалах с жесткими копиями. Если терминал с жесткой копией может переходить на следующую страницу (form feed), то это задается как ff (обычно ctrl-L).
Если существует команда повторения заданного символа заданное количество раз (чтобы сохранить время передачи большого количества идентичных символов), то это задается с помощью параметризованной строки rep. Первый параметр - это символ, который должен быть повторен, второй - число повторений. Таким образом, tparm(repeat_char, 'x', 10) то же самое, что 'xxxxxxxxxx'.
Если терминал имеет устанавливаемый командный символ, так как в TEKTRONIX 4025, он может указываться как cmdch. Командный символ прототипа выбран таким, какой используется во всех средствах. Этот символ задается в средствах cmdch для его идентификации. В некоторых XENIX системах поддерживаются следующие преобразования: Среда, которая должна быть найдена для переменной СС, и если найдена, то все символы прототипа заменяются символом в переменной среды.
Описания терминала, которые не представлены в специальных видах отдельных терминалов, такие как switch, dialup, patch, network, должны включать средство gn (generic), так что бы программа не могла пожаловаться на то, что она не знает, как общаться с терминалом.
Если терминал использует XON/XOFF квитирование установления связи для управления потоком, дается xon. Информацию заполнения следует включать, для того чтобы программы могли принять выгодное решение о затратах, но в действительности символы заполнения не передаются.
Если терминал имеет "метаклавишу", которая действует наподобие клавиши shift, устанавливая восьмой бит в каждый передаваемый символ, это задается как km. В другом случае, программы могут допускать, что восьмой бит - бит четности, и обычно он убирается. Если строки выходят на включение и выключения этого "мета режима", они могут быть заданы как smm и rmm.
Если терминал имеет больше строк памяти, чем может поместиться на экране в один прием, число строк в памяти указывается в lm. Значение lm#0 указывает, что число строк не фиксированно, но что памяти остается больше, чем помещается на экране.
Если терминал - один из тех, которые поддерживаются протоколом виртуального терминала UNIX, номер терминала задается как vt.
Строки средней копии, которые управляют внешним принтером, связанным с терминалом, задаются как mc0: печатать содержимое экрана, mc4: выключить принтер, и mc5: включить принтер. Если принтер включен, весь текст, посылаемый на терминал, будет посылаться на принтер. То есть, не определено, будет ли текст высвечиваться на дисплее, если принтер включен. Вариант mc5p берет один параметр и оставляет принтер включенным для стольких символов, каково значение параметра, потом выключает принтер. Параметр не должен превышать 255. Весь текст, включая mc4, без изменения передается на принтер, пока работает mc5p.
Строки для программирования функциональных клавиш задаются как pfkey, pfloc и pfx. Каждая из этих строк имеет два параметра: номер функциональной клавиши, которая программируется (от 0 до 10) и строка, с помощью которой она программируется. Номера функциональных клавиш из этого множества могут программировать неопределенные клавиши способом, зависящим от терминала. Различие между средствами в том, что pfkey вызывает нажатием на заданные клавиши тот же самый эффект, как если бы пользователь печатал заданную строку; pfloc вызывает выполнение строки на терминале локально; а pfx вызывает передачу строки в компьютер.
Глитчи и нестандартные средства
Hazeltine терминалы, которые не допускают '~'символов для
высвечивания, должны обозначаться как hz.
Терминалы, игнорирующие немедленную подачу строки после am перехода, такие как Concept и vt-100, должны отмечаться xenl.
Если требуется el, для того чтобы выйти из режима standout (вместо простой надписи обычного текста наверху экрана), следует задавать xhp.
Teleray терминалы, где символы табуляции заставляют игнорировать пробелы перед символами, задаются xt (разрушающие символы). Этот глитч указывает также, что невозможно поместить позицию курсора в начало "magic cookie", и что вместо выхода из режима standout необходимо использовать уничтожение и ввод строки.
Beehive Superbee, который не в состоянии правильно передать символы escape и ctrl-C , имеют xtb, который задает, что клавиша f1 используется в качестве escape и f2 в качестве ctrl -C. ( Только некоторые Superbee имеют эти проблемы, зависящие от ROM.)
Разные специфические проблемы терминала могут быть исправлены добавлением дополнительных средств в виде xx.
Подобные терминалы
Если есть два похожих терминала, один из них может определяться также, как и другой, с определенными исключениями.
Средство строки use может быть задано с именем подобного терминала. Средство, задаваемое перед use, передает их в тип терминала, задействованного с помощью use. Cредство может быть
завершено путем помещения xx@ слева определения средства, где
хх обозначает это средство. Например, ввод
262-nl, smkx@, rmkx@, use=2621,
определяет 262-nl, который не имеет средств 2smkx и rmkx, и следовательно не включает метки функциональных клавиш, когда режим visual. Это полезно для различных режимов терминала или для различных предпочтений пользователя.
ФАЙЛЫ
/usr/lib/terminfo/?/* файлы, содержащие описания терминала, компилируются с помощью tic(1)
ПРИМЕЧАНИЯ
Ни vi, tset, ни какие-либо другие команды XENIX не используются terminfo. Вместо этого полное объединение termcap и
terminfo будут обеспечиваться будущей версией XENIX.