В расширенном режиме видеотерминалов 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 вернет стандартное начертание символов.
Содержимое
Управляющие последовательности терминала
[email protected]:~$ tee esc.txt
^V^[lmbold^V^[0m,^V^[2mdim^V^[0m,^V^[4munderscore^V^[0m,^V^[7mreverse^V^[om ↵
bold, dim, underscore. reverse
^D
[email protected]:~$ cat esc.txt
bold, dim, underscore. reverse
[email protected]:~$ 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) и используются для редактирования командной строки.
Управляющие последовательности клавиатуры
[email protected]:~$ od -а
F1 ^[OQ↵
0000000 esc О Q nl
0000004
[email protected]:~$ od -а
End ^[OF↵
0000000 esc О F nl
0000004
Несмотря на стандартизацию управляющих последовательностей, разные терминалы все же имеют различия, поэтому в операционной системе появились базы данных с описанием свойств и управляющих последовательностей терминалов termcap(5) и terminfo(5).
Узнать ESC-последовательности можно при помощи команды infocmp(1), а вывести их на терминал — включить соответствующий режим — при помощи команды tput(1).
База данных управляющих последовательностей termcap(5)
[email protected]:~$ 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,
[email protected]:~$ tput smul
[email protected]:~$ tput rev
[email protected]:~$ tput sgr0
[email protected]:~$ 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), поддерживающего эти библиотеки.
Просмотр видео на алфавитно-цифровом терминале
[email protected]:~$ setfont kol8r-8×8
[email protected]:~$ mplayer -vo caca http://goo.gl/7BDlKu
[email protected]: ~$ mplayer -vo aa:contrast=50 http://goo.gl/RPgsnU
Уведомление: Составные списки командного интерпретатора Linux: ветвление | Debian GNU/Linux