TERMINFO(5)

НАЗВАНИЕ
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 стандарту. Семантики, также, предназначаются для сопоставления их спецификаций.

  • (P) указывает, что наполнение может быть определено.
  • (G) указывает, что строка, заданная (#i), пропускается через tparm с parms.
  • (*) указывает, что наполнение может базироваться на количестве взаимодействующих строк.
  • (#i) указывает i-ый параметр
  • (+) Не представлена во всех версиях termcap.
VariableCapnameI. CodeDescription
Booleans:
аuto_left_marginbwbwcub1 заворачивается от столбца 0 до последнего столбца.
auto_right_marginamamТерминал имеет автоматические границы.
beehive_glitchxsbxb"Улей" (f1-Escape; f2 - Ctrl C)
ceol_standout_glitchxhpxsВпереди стоящие символы не перезаписываются (hp)
eat_newline_glitchxenlxnСимволы новой строки игнорируются после 80-го столобца (Concept)
erase_overstrikeeoeoМожно забивать лишние символы пробелом
generic_typegngnРодовой тип строки (напр., dialup, switch)
hard_copyhchcТерминал твердой копии
has_meta_keykmkmИмеется мета-клавиша (верх. регистр, устанавливает бит контроля)
has_status_linehshsИмеется дополнительная "строка состояния"
insert_null_glitchininРежим вставки отличается символами "пусто"
memory_abovedadaИзображение может быть сохранено перед экраном
memory_belowdbdbИзображение может быть сохранено под экрананом
move_insert_modemirmiПредохранять от перемещения в режиме вставки
move_standout_modemsgrmsПредохранять от перемещения режимах standout
over_strikeososЛишние набранные символы терминала
status_line_esc_okeslokesВ строке состояния может быть использован Escape
teleray_glitchxtxt"Разрушенные" табуляции, символ magic so
tilde_glitchhzhzHazeltine; невозможна печать символов ~
transparent_underlineululЛишние вводы символа подчеркивания
xon_xoffxonxoТерминал использует хэншейкинг XON/XOFF
Числовые:
columnscolscoКоличество столбцов в строке
init_tabsititИзначально заместить табуляциями каждые # пробелов
lineslinesliКоличество строк на экране или странице
lines_of_memorylmlmСтрок в памяти (если больше, чем lines). Значение 0 указывает, что величина переменна
magic_cookie_glitchxmcsgКоличество пробелов, оставляемых smso и rmso.
padding_baud_ratepbpbНижнее значение бод, при котором требуется заполнение символами cr/nl.
virtual_terminalvtvtВиртуальный номер терминала (система UNIX)
width_status_linewslwsКол-во столбцов в строке состояния
Строковые:
back_tabcbtbtОбратная табуляция (Р)
bellbelblЗвуковой сигнал (Р)
carriage_returncrcrВозврат каретки (Р*)
change_scroll_regioncsrcsИзменение на строки от #1 до #2 (vt-100) (PG)
clear_all_tabstbcctПрочистить все позиции табуляции (Р)
clear_screenclearclОчистка экрана и установка курсора в начальное положение
clr_eolelceОчистка до конца строки
clr_eosedcdОчистка до конца изображения (Р*)
column_addresshpachУстановка столбца курсора
command_charactercmdchCCУстановливаемый символ cmd в прототипе
cursor_addresscupcmОтносительное перемещение курсора на экране: строка #1, столбец #2 (PG)
cursor_downcud1doВниз на одну строку
cursor_homehomehoКурсор в начальное положение (если не cup)
cursor_invisiblecivisviСделать курсор невидимым
cursor_leftcub1leПередвинуть курсор влево на одну позицию
cursor_mem_addressmrcupCM(+)Относительная адресация курсора в памяти
cursor_normalcnormveСделать курсор обычным (переделать vs/vi)
cursor_rightcuf1ndНеразрушительное перемещение курсора (курсор вправо)
cursor_to_llllllПоследняя строка, первый столбец (если не сup)
cursor_upcuulupВверх на строку (курсор вверх)
cursor_visiblecvvisvsСделать курсор видимым
delete_characterdch1dcУдаление символа (Р*)
delete_linedlldlУдаление сторки (Р*)
dis_status_linedsldsСделать небоступной строку состояния
down_half_linehdhdВниз на половину строки (вперед на 1/2 перевода строки)
enter_alt_charset_modesmacsasНачать альтернативный набор символов (Р)
enter_blink_modeblinkmbВключить режим мерцания
enter_bold_modeboldmdВключить режим повышеной яркости
enter_ca_modesmcuptiЦепочка для начала программ, которые используют cups
enter_delete_modesmdcdmРежим удачения (ввод)
enter_dim_modedimmhВключить режим половинной яркости
enter_insert_modesmirimРежим вставки (ввод)
enter_protected_modeprotmpВключить режим защиты
enter_reverse_moderevmrВключить обратный видеорежим
enter_secure_modeinvismkВключить режим пробелов (символы невидимы)
enter_standout_modesmsosoНачать режим standout
enter_underline_modesmulusНачать режим подчеркивания
erase_charsechecСтереть #1 символов (PG)
exit_alt_charset_modermacsaeЗавершить альтернативный набор символов
exit_attribute_modesgr0meВыключить все атрибуты
exit_ca_modermcupteЦепочка для завершения программ, которые используют cups
exit_delete_modermdcedЗавершить режим удаления
exit_insert_modermireiЗавершить режим вставки
exit_standout_modermsoseЗавершить режим standout
exit_underline_modermulueЗавершить режим подчеркивания
flash_screenflashvbСимвол звукового сигнала видим (может не переместить курсор)
form_feedffffПрогон страницы твердой копии (Р*)
from_status_linefslfsВозврат из строки состояния
init_1stringis1i1Строка инициализации терминала
init_2stringis2i2Строка инициализации терминала
init_3stringis3i3Строка инициализации терминала
init_fileififИмя файла, содержащего is
insert_charactersich1icВставка символа (Р)
insert_lineil1alДобавление пустой строки (Р*)
insert_paddingipipПосле вставленного символа вставить символ-заполнитель
key_backspacekbskbПосылается клавишей "шаг назад"
key_catabktbckaПосылается клавишей очистки всех табуляций
key_clearkclrkC(+)Посылается клавишами очистки экрана или стирания
key_ctabkctabktПосылается клавишей очистки табуляции
key_dckdchlkD(+)Посылается клавишей удаления
key_dlkdllkL(+)Посылается клавишей удаления строки
key_downkcud1kdПосылается клавишей "стрелка вниз" терминала
key_eickrmirkM(+)Посылается rmir или smir в режиме вставки
key_eolkelkE(+)Посылается клавишей очистки до конца строки
key_eoskedkS(+)Посылается клавишей очистки до конца экрана
key_f0kf0k0Посылается функциональной клавишей f0
key_f1kf1k1Посылается функциональной клавишей f1
key_f10kf10kПосылается функциональной клавишей f10
key_f2kf2k2Посылается функциональной клавишей f2
key_f3kf3k3Посылается функциональной клавишей f3
key_f4kf4k4Посылается функциональной клавишей f4
key_f5kf5k5Посылается функциональной клавишей f5
key_f6kf6k6Посылается функциональной клавишей f6
key_f7kf7k7Посылается функциональной клавишей f7
key_f8kf8k8Посылается функциональной клавишей f8
key_f9kf9k9Посылается функциональной клавишей f9
key_homekhomekhПосылается клавишей home
key_ickich1klПосылается клавишами вставки/ ввода в режиме вставки
key_ilkillkA(+)Посылается вставкой строки
key_leftkcub1klПосылается клавишей "стрелка влево"
key_llkllkH(+)Посылается клавишей home-down
key_npageknpkN(+)Посылается клавишей следующей страницы
key_ppagekppkP(+)Посылается клавишей предыдущей страницы
key_rightkcuf1krПосылается клавишей "стрелка вправо"
key_sfkindkF(+)Посылается клавишей прокрутки вперед/вниз
key_srkrikR(+)Посылается клавишей прокрутки назад/вверх
key_stabkhtskT(+)Посылается клавишей установки табуляции
key_upkcuu1kuПосылается клавишей "стрелка вверх"
keypad_localrmkxkeВне режима "keypad transmit"
keypad_xmitsmkxksПеревести терминал в режим "keypad transmit"
lab_f0lf0l0Метки на функциональной клавише f0, если не f0
lab_f1lf1l1Метки на функциональной клавише f1, если не f1
lab_f10lf10laМетки на функциональной клавише f10, если не f10
lab_f2lf2l2Метки на функциональной клавише f2, если не f2
lab_f3lf3l3Метки на функциональной клавише f3, если не f3
lab_f4lf4l4Мeтки на функциональной клавише f4, если не f4
lab_f5lf5l5Метки на функциональной клавише f5, если не f5
lab_f6lf6l6Метки на функциональной клавише f6, если не f6
lab_f7lf7l7Метки на функциональной клавише f7, если не f7
lab_f8lf8l8Метки на функциональной клавише f8, если не f8
lab_f9lf9l9Метки на функциональной клавише f9, если не f9
meta_onsmmmmВключение режима "meta mode"
meta_offrmmmoВыключение режима "meta mode"
newlinenelnwНовая строка (ведет себя как cr, за которым следует lf)
pad_charpadpcСимвол-заполнитель (вместо пустого символа)
parm_dchdchDC(+)Удалить #1 символов (PG*)
parm_delete_linedlDL(+)Удалить #1 строк (PG*)
parm_down_cursorcudDO(+)Переместить курсор вниз на #1 строк (PG*)
parm_ichichIC(+)Вставить #1 пробелов (PG*)
parm_indexindnSF(+)Прокрутка вперед на #1 строк (PG)
parm_insert_lineilAL(+)Добавить #1 пустых строк (PG*)
parm_left_cursorcubLE(+)Переместить курсор влево на #1 позиций (PG*)
parm_right_cursorcufRI(+)Переместить курсор вправо на #1 позиций (PG*)
parm_rindexrinSR(+)Прокрутка назад на #1 строк (PG)
parm_up_cursorcuuUP(+)Переместить курсор вверх на #1 строк (PG*)
pkey_keypfkeypkПрограммная функциональная клавиша #1 для печати строки #2
pkey_localpflocplПрограммная функциональная клавиша #1 для выполнения строки #2
pkey_xmitpfxpxПрограммная функциональная клавиша #1 для передачи строки #2
print_screenmc0psПечать сожержимого экрана
prtr_offmc4pfВключение принтера
repeat_charreprpВыключение принтера
reset1_stringrs1r1Полный сброс терминала в обычные режимы
reset2_stringrs2r2Полный сброс терминала в обычные режимы
reset3_stringrs3r3Полный сброс терминала в обычные режимы
reset_filerfrfИмя файла, содержащего строку сброса
restore_cursorrcrcУстановка курсора в позицию последнего sc
row_addressvpacvАбсолютная позиция по вертикали (строка установки) (PG)
save_cursorscscСохранение позиции курсора (Р)
scroll_forwardindsfПрокрутка текста вверх (Р)
scroll_reverserisrПрокрутка текста вниз (Р)
set_attributessgrsaОпределить видеоатрибуты (PG9)
set_tabhtsstПроставить табуляции во все столбцы текущей строки
set_windowwindwiТекущим окном являются строки #1-#2, столбцы #3-#4
tabhttaТабулировать до следующего места табуляции оборудования через 8 позиций
to_status_linetsltsПереход в строку состояния, первый столбец
underline_charucucПодчеркнуть один символ и встать за ним
up_half_linehuhuВверх на пол-строки (назад на 1/2 прогона строки)
init_progiprogiPПолное имя программы инициализации
key_a1ka1K1(+)Верхний левый угол клавиатуры
key_a3ka3K3(+)Верхний правый угол клавиатуры
key_b2kb2K2(+)Центр клавиатуры
key_c1kc1K4(+)Нижний левый угол клавиатуры
key_c3kc3K5(+)Нижний правый угол клавиатуры
prtr_onmc5ppO(+)Включить принтер для #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.

Механизм параметризации использует стек и специальный код % для манимулирования. Обычно последовательность помещает один из параметров в стек и потом печатает его в некотором формате. Часто необходимы более сложные операции.

% кодирование имеет следующие значения:

  • %% выводит '%'
  • %d print pop() как in printf
  • %2d print pop() аналогично %2d
  • %3d print pop() аналогично %3d
  • %02d
  • %03d как in printf
  • %c print pop() дает %с
  • %s print pop() дает %s
  • %p[1-9] проталкивает i-ую переменную
  • %P[a-z] устанавливает переменную [a-z] в pop()
  • %g[a-z] вычисляет переменную [a-z] и протолкивает ее
  • %'c' символ константа с
  • %[nn] целая котстанта nn
  • % + % - %*% /%m арифметика (%m является mod): push(pop() op pop())
  • %& %| %^ битовые операции: push(pop() op pop())
  • %= %> %< логические операции: push(pop() op pop())
  • % ! %~ унарные операции: push(op pop())
  • %i прибавить 1 к первым двум параметрам (для терминалов ANSI)
  • % ? expr %t thenpart %e elsepart %; if-then-else, %e elsepart - необязательно.
  • else-if возможны для Algol 68:
  • %?c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e %; ci - условия, bi - тела.

Операции в двоичном коде - в виде 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.