Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

Последовательности setterm представляют собой набор последовательностей CSI с управляющим символом

]
. Они перечислены в табл. 21.10.

Таблица 21.10. Консольные последовательности setterm

par Описание
1 Устанавливает цвет для представления атрибута подчеркивания параметра par2.
2 Устанавливает цвет для представления атрибута тусклости параметра par2.
8 Текущие атрибуты setterm сохраняются как значения по умолчанию, тем самым они становятся стандартными атрибутами изображения символов.
9 Устанавливает интервал гашения экрана на par2 минуты, но не более чем на 60 минут. Если параметр par2 равен нулю, то гашение экрана блокируется.
10 Частота звонковой сигнализации
консоли приравнивается к par2 Гц или к стандартному шагу, если параметр par2 не определен.
11 Длительность звукового сигнала консоли приравнивается к par2 миллисекундам, если параметр par2 указан, но не более чем 2000. Если par2 не задан, то восстанавливается стандартная длительность.
12 Если для консоли par2 выделена память, то консоль par2 становится активной (см. главу 20).
13 Восстанавливает экран после гашения.
14 Интервал выключения питания VESA приравнивается к par2 минутам, но не более чем 60 минут. Если параметр par2 равен нулю, то отключение питания VESA блокируется.

Сообщение консоли того, что она должна отображать — далеко не все; вы также обязаны распознавать последовательности нажатия клавиш и знать, к каким клавишам они привязаны. Некоторые из этих последовательностей определены в базе данных

terminfo
, некоторые — нет. Кроме этого, клавиатура является модальной для увеличения разнообразия возможностей. В режиме приложения клавиши курсора порождают другие коды. Как показано в табл. 21.9, к ним добавляется префикс
^[О
вместо
^[[
. Это необходимо для поддержки унаследованных приложений, в которых предполагается, что они обращаются к терминалам DEC.

Последовательности нажатия клавиш описаны в табл. 21.11. Обратите внимание на то, что в нумерации функциональных клавиш имеются пропуски. Это спланировано для того, чтобы пользователи клавиатур, у которых нет клавиш <F11> и <F12>, не были ущемлены.

Таблица 21.11. Кодирование функциональных клавиш

Последовательности нажатия клавиш Клавиша (клавиши)
^[[[А
<F1>
^[[[В
<F2>
^[[[С
<F3>
^[[[D
<F4>
^[[[Е
<F5>
^[[17~
<F6>
^[[18~
<F7>
^[[19~
<F8>
^[[20~
<F9>
^[[21~
<F10>
^[[23~
<F11>, <Shift+F1>, <Shift+F11>
^[[24~
<F12>, <Shift+F2>, <Shift+F11>
^[[25~
<Shift+F3>
^[[26~
<Shift+F4>
^[[28~
<Shift+F5>
^[[29~
<Shift+F6>
^[[31~
<Shift+F7>
^[[32~
<Shift+F8>
^[[33~
<Shift+F9>
^[[34~
<Shift+F10>
^[[А
<Стрелка вверх>
^[[D
<Стрелка влево>
^[[В
<Стрелка вниз>
^[[С
<Стрелка вправо>
^[[1~
<Home>
^[[2~
<Insert>
^[[3~
<Delete>
^[[4~
<End>
^[[5~
<Page Up>
^[[6~
<Page Down>

21.4.

Прямой вывод на экран

В некоторых случаях наличие одной только способности выводить символы на экран не является достаточным. Частично это связано с невозможностью определить текущее состояние экрана. В системе Unix принята стандартная практика — состояние экрана игнорируется. Если нужно, вы можете задать настройки экрана, при появлении необходимости внести в них изменения, после чего полностью перерисовывать экран всякий раз, когда этого требует пользователь (как правило, нажатием комбинации

^L
). Можно планировать и другие применения.

В частности, для работы программ и функций, предназначенных для фиксирования и восстановления экрана, требуется доступ к текущему содержимому экрана. Система Linux предоставляет такой доступ через два интерфейса. Один из них предлагает только текстовое содержимое экрана, второй содержит атрибуты (цвет и так далее).

Простейший текстовый механизм носит название

vcs
, что, вероятно, означает virtual console screen (экран виртуальной консоли) [155] . Чтение устройства
/dev/vcs0
дает содержимое текущей виртуальной консоли, как оно выглядит на момент чтения. Если экран в настоящий момент прокручен (по умолчанию для прокрутки экрана назначаются клавиатурные последовательности <Control+PageUp> и <Control+PageDown>), устройство
/dev/vcs0
содержит прокрученное содержимое, видимое на экране. Остальные устройства
vcs
,
/dev/vcsn
, представляют текущее состояние виртуальной консоли
n
и обычно доступны через
/dev/ttyn
.

155

Эта тема логически относится к главе 20, поскольку она имеет отношение к виртуальным консолям. Однако практический смысл вынуждает поместить этот раздел в данную главу — поскольку, как упоминалось во введении, настоящую книгу можно читать и выборочно.

При чтении файла

/dev/vcs*
не дается никаких указаний относительно новых строк или размера консоли, кроме метки EOF в конце экрана. Если вы прочитали 2000 байт и затем получили EOF, вы не сможете определить размеры экрана: может быть, он содержит 80 столбцов и 25 строк, а, может быть, 40 столбцов и 50 строк. Для отметки конца строк не выводятся символы новой строки, к тому же каждая пустая символьная ячейка (независимо от того, записывалась ли в нее когда-либо информация) обозначается символом пробела. Существует несколько популярных конфигураций экрана, и нет никакой гарантии, что каждая из них имеет однозначное количество строк и столбцов. Механизм vcs предлагает легкий способ для находчивых системных администраторов или разработчиков увидеть содержимое любой виртуальной консоли. Однако он не особенно полезен с точки зрения программистов, по крайней мере, без посторонней помощи.

Один из удобных способов — это использование

vcs
из X. По умолчанию XFree86 запускает X-сервер на первой свободной виртуальной консоли, но не на той консоли, из которой была активизирована программа. Если вы запускаете XFree86 из виртуальной консоли 1, то вам не нужно возвращаться в консоль 1 для того, чтобы увидеть регистрационные сообщения, которые XFree86 выводит на экран. Просто перенесите наверх окно терминала того же самого размера, что и консоль (обычно 80 столбцов на 25 строк), войдите в систему как привилегированный пользователь (для того чтобы получить доступ к механизму
vcs
) и запустите
cat /dev/vcs1
. Содержимое первой виртуальной консоли заполнит ваше терминальное окно.

Для того чтобы создавать надежные программы, вам, тем не менее, нужны некоторые базовые сведения о состоянии экрана, который не предоставляет механизм

vcs
.

• Цвета.

• Другие атрибуты (например, мерцание).

• Текущая позиция курсора.

• Конфигурация экрана (количество строк и столбцов).

Механизм

vcsа
(что означает virtual console screen with attributes — экран виртуальной консоли с атрибутами) предоставляет всю необходимую информацию. Первые четыре байта
/dev/vcsan
(для того же самого значения
n
, что и в
vcs
) содержат заголовок, показывающий текущую позицию курсора и конфигурацию экрана. Первый байт указывает количество строк, второй — количество колонок, третий — текущий столбец курсора, четвертый — текущую строку курсора. Остальная часть файла содержит переменные байты, которые отображают текст, и байты атрибутов текста данной консоли.

Таким образом, если вам требуется знать только размеры консоли и ее текстовое содержимое, то вы можете прочитать первые два байта из соответствующего механизма

vcsa
, а после этого работать только с механизмом
vcs
. Если вы хотите задать текущую позицию курсора, то нужно заполнить третий и четвертый байты механизма
vcsa
. Обратите внимание на то, что первые два байта предназначены только для чтения (то есть первые два символа являются просто заполнителями). Мы предпочитаем применять пробелы или другие подобные символы для того, чтобы подчеркнуть это. В качестве примера показано перемещение курсора на четвертой виртуальной консоли в восьмую строку и двенадцатый столбец (отсчитывая от нуля):

echo -n -е '..\023\007' > /dev/vcsa4

Параметр

– n
предотвращает добавление символа новой строки в конце,
– е
выполняет интерпретацию кодов смены алфавита, поэтому выражение
\nnn
трактуется как восьмеричный символ
nnn
.

Атрибуты и символьное содержимое отображаются как переменные байты, первый из которых содержит символ, а второй — атрибуты для применения к этому символу. Байт атрибута, как правило, определяется по аналогии с байтом атрибута, используемым на оборудовании VGA. Остальные виды технических средств, включая карты TGA, применяемые во многих машинах Linux/Alpha, и консольный драйвер SPARC, эмулируют обработку атрибутов VGA. На видеоаппаратуре без поддержки цвета, но с поддержкой подчеркивания, атрибуты могут считываться несколько по-другому. Однако способ разработки позволяет делать вид, что все оборудование ведет себя как VGA.

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

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»

Фиктивный брак

Завгородняя Анна Александровна
Фантастика:
фэнтези
6.71
рейтинг книги
Фиктивный брак

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

По дороге на Оюту

Лунёва Мария
Фантастика:
космическая фантастика
8.67
рейтинг книги
По дороге на Оюту

Мастер 5

Чащин Валерий
5. Мастер
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мастер 5

Не лечи мне мозги, МАГ!

Ордина Ирина
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.00
рейтинг книги
Не лечи мне мозги, МАГ!

Измена. Право на семью

Арская Арина
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Измена. Право на семью

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Неудержимый. Книга XXI

Боярский Андрей
21. Неудержимый
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неудержимый. Книга XXI