В расширенном режиме видеотерминалов 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: ветвление | Debian GNU/Linux