Управляющие последовательности ОС Linux

В расширенном режиме видеотерминалов W:[VT52], W: [VT100], W: [VT220] появилась возможность вывода символов в произвольное место экрана и использования полужирного, затемненного, негативного, подчеркнутого и других начертаний символов. Возможности ввода дополнились функциональными клавишами, клавишами перемещения курсора, дополнительной клавиатуры и пр.

Для этого потребовались дополнительные управляющие символы, которые не поместились в кодировку ascii(7), потому терминалы стали использовать управляющие последовательности символов console_codes(7), предваряемые управляющим символом ESC с кодом 0x1В.

Так, например, последовательность ESC # 8 вызовет визуальный тест выравнивания краев терминала, заполнением буквой Е всех строк и столбцов, ESC с сбросит терминал в исходное состояние, ESC [ 1m включит полужирное начертание, ESC [2 m — затемненное начертание, ESC [4 m — подчеркивание, a ESC [ 0 m вернет стандартное начертание символов.

Управляющие последовательности терминала

john@ubuntu:~$ tee esc.txt

^V^[lmbold^V^[0m,^V^[2mdim^V^[0m,^V^[4munderscore^V^[0m,^V^[7mreverse^V^[om ↵

bold, dim, underscore. reverse

^D

john@ubuntu:~$ cat esc.txt

bold, dim, underscore. reverse

john@ubuntu:~$ od esc.txt

0000000 033    [    1   m   b    о    l    d   033    [    0   m    ,   033 [     2

0000020     m    d    i   m 033 [    0   m      ,   033  [ 4    m      u   n    d

0000040      e     r   s    с     о    r    e 033    [       0  m ,  033     [    7    n

0000060      r     e  v     e     r    s    e 033     [      0   m  \n

0000074

Управляющие символы и их последовательности являются обычными байтами и при литеральном вводе с терминала могут быть сохранены в файл, например при помощи команды tee(1).

При последующем выводе на терминал, например при помощи команды cat(1), будут задействованы соответствующие расширенные возможности.

Побайтное содержимое файла можно при этом увидеть  на терминале посредством восьмеричного od(1) или шестнадцатеричного дампа hexdump(1), hd(1).

Многие «дополнительные» клавиши современных терминалов, такие как функциональные F1…F12, клавиши управления курсором ↓ ↑ → ← ,  скроллингом PgUp, PgDn, Home, End и пр., генерируют управляющие последовательности, которые обрабатываются, например, библиотекой readline(3) и используются для редактирования командной строки.

Управляющие последовательности клавиатуры

john@ubuntu:~$ od -а

F1 ^[OQ↵

0000000 esc    О   Q    nl

0000004

john@ubuntu:~$ od -а

End ^[OF↵

0000000 esc    О     F    nl

0000004

Несмотря на стандартизацию управляющих последовательностей, разные терминалы все же имеют различия, поэтому в операционной системе появились базы данных с описанием свойств и управляющих последовательностей терминалов termcap(5) и terminfo(5).

Узнать ESC-последовательности можно при помощи команды infocmp(1), а вывести их на терминал — включить соответствующий режим — при помощи команды tput(1).

База данных управляющих последовательностей termcap(5)

john@ubuntu:~$ infocmp
#          Reconstructed’ via infocmp from file: /llb/temlnfo/l/linux

linux|linux console,
an,  bce,  ccc,  eo,   mir,   msgr,   xenl,  xon,

colors#8, it#8,  ncv#18,   pairs#64,

. . .   . . .   . . .

op=\E[39;49m, rc=\E8, rev=\E[7m     ri=\EM,  rmacs=\E[10m,

. . .   . . .   . . .

sgr0=\E[0;10m , smacs=\E[11m,   smam=\E[?7h, smir=\E[4h,

. . .   . . .   . . .

smpch=\E[11m,  smso=\E[7m,   smul=\E[4m    tbc=\E[3g,

john@ubuntu:~$ tput smul

john@ubuntu:~$ tput rev

john@ubuntu:~$ tput sgr0

john@ubuntu:~$ tput smul | od -ac

0000000  esc        [    4    m
033       [    4    m
0000004

Примером простейшей программы, использующей управляющие последовательности для форматирования символов при выводе на экран, является утилита просмотра справочных, страниц man(1). В качестве  более изощренных программ, использующих управление расширенными возможностями терминала, можно привести less(1), nano(1), mc(1), многие из которых используют для этоuо библиотеку ncruses(3).

А самым экстремальным примером использования управляющих последовательностей терминалов является W:[ASCII-графика] и W:[ANSI-графика], реализующаяся библиотеками aalib и саса, при помощи которых на алфавитно-цифровом (!) терминале можно просматривать видеофильмы, например, при помощи видеоплеера mplayer(1), поддерживающего эти библиотеки.

Просмотр видео на алфавитно-цифровом терминале

john@ubuntu:~$ setfont kol8r-8×8

john@ubuntu:~$ mplayer -vo caca http://goo.gl/7BDlKu

john@ubuntu: ~$ mplayer -vo aa:contrast=50 http://goo.gl/RPgsnU

Управляющие последовательности ОС Linux: 1 комментарий

  1. Уведомление: Составные списки командного интерпретатора Linux: ветвление | Debian GNU/Linux

Добавить комментарий