Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

Файлы terminfo пишутся по одному на каждый тип терминала в исходном формате, пригодном (или почти пригодном!) для чтения, который затем компилируется командой

tic
в более компактный и эффективный формат, используемый прикладными программами. Странно, стандарт X/Open ссылается на описания исходного и откомпилированного формата, но не упоминает команду
tic
, необходимую для реального преобразования исходного формата в откомпилированный. Для вывода пригодной для чтения версии откомпилированного элемента набора terminfo можно использовать программу infocmp.

Далее приведен пример файла terminfo для терминала VT100:

$ infocmp vt100

vt100|vt100-am|dec vt100 (w/advanced video),

 am, mir, msgr, xenl, xon, cols#80, it#8, lines#24, vt#3,

 acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,

 bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,

 clear=\E[H\E[J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,

 cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n,

 cuf=\E[%p1%dC, cuf1=\E[C$<2>,

 cup=\E[%i%p1%d; %p2%dH$<5>, cuu=\E[%p1%dA,

 cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>,

 el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=\t,

 hts=\EH, ind=\n, ka1=\EOq, ka3=\EOs, kb2=\EOr, kbs=\b,

 kc1=\EOp, kc3=\EOn, kcub1=\EOD, kcud1=\EOB,

 kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, kf0=\EOy, kf1=\EOP,

 kf10=\EOx, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOt,

 kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, rc=\E8,

 rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmkx=\E[?11\E>,

 rmso=\E[m$<2>, rmul=\E[m$<2>,

 rs2=\E>\E[?31\E[?41\E[?51\E[?7h\E[?8h, sc=\E7,

 sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e^O%;,

 sgr0=\E[m^0$<2>, smacs=^N, smkx=\E[?1h\E=,

 smso=\E[1;7m$<2>; smul=\E[4m$<2>, tbc=\E[3g,

Каждое определение в

terminfo
состоит из трех типов элементов. Каждый элемент называется
capname
(имя характеристики) и определяет характеристику терминала.

Булевы или логические характеристики просто обозначают наличие или отсутствие поддержки терминалом конкретного свойства. Например, булева характеристика

xon
присутствует, если терминал поддерживает управление потоком
XON/XOFF
.

Числовые характеристики определяют размеры или объемы, например

lines
— это количество строк на экране, a
cols
— количество столбцов. Число отделяется от имени характеристики символом
#
. Для описания терминала с 80 столбцами и 24 строками следует написать
cols#80, lines#24
.

Строковые характеристики немного сложнее. Они применяются для двух разных типов характеристик: определения строк вывода, необходимых для доступа к функциям терминала, и определения строк ввода, которые будут получены, когда пользователь нажмет определенные клавиши, обычно функциональные или специальные клавиши на цифровой клавиатуре. Некоторые строковые параметры очень просты, например

el
, что означает "стереть до конца строки". Для того чтобы сделать это на терминале VT100, потребуется escape-последовательность
Esc, [, K
. В исходном формате terminfo это записывается как
еl=\Е[K
.

Специальные клавиши определены аналогичным образом. Например, функциональная клавиша <F1> на терминале VT100 посылает последовательность

Esc, O, P
, которая определяется как
kf1=\EOP
.

Все несколько усложняется, если escape-последовательности требуются какие-либо параметры. Большинство терминалов могут перемещать курсор в заданные строку и столбец. Ясно, что неразумно хранить отдельную характеристику для каждой точки экрана, в которую можно переместить курсор, поэтому применяется общая строковая характеристика с параметрами, определяющими значения, которые вставляются при использовании характеристики. Например, терминал VT100 использует последовательность

Esc, [, <row>, <col>, H
для перемещения курсора в заданную позицию. В исходном формате terminfo это записывается довольно устрашающе:
cup=\E[%i%p1%d;%p2%dH$<5>
.

Эта строка означает следующее:

 

\E
— послать escape-символ;

 

[
— послать символ
[
;

 

%i
— дать приращение аргументам;

 

%p1
— поместить первый аргумент в стек;

 

%d
— вывести число из стека как десятичное;

 

;
— послать символ
;
;

 

%р2
— поместить второй аргумент в стек;

 

%d
— вывести число из стека как десятичное;

  • Читать дальше
  • 1
  • ...
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: