PERL: БИБЛИОТЕКА ПРОГРАММИСТА



              

PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 504


Визуальные сигналы поддерживаются не всеми терминалами, поэтому мы вклю­чили их вызов в eval. Если визуальный сигнал не поддерживается, Trequi re иници­ирует die, при этом переменная $vb останется равной "". В противном случае пе­ременной $vb присваивается служебная последовательность для выдачи сигнала.

Более разумный подход к выдаче сигналов реализован в графических терми­нальных системах (таких, какх(еггп). Многие из них позволяют включить визуаль­ные сигналы на уровне внешнего приложения, чтобы программа, тупо выводя­щая chr(7), была менее шумной.

> Смотри также---------------------------------------------------------------------------------------------

Раздел «Quote и Quote-like Operators» в perlop(l); документация по стандарт­ному модулю Term:: Cap.

15.8. Использование termios

Проблема

Вы хотите напрямую работать с характеристиками своего терминала.

Решение

Воспользуйтесь интерфейсом POSIX termios.


15.8. Использование termios   533

Комментарий

Представьте себе богатые возможности команды stty — можно задать все, от служеб­ных символов до управляющих комбинаций и перевода строки. Стандартный мо­дуль POSIX обеспечивает прямой доступ к низкоуровневому терминальному ин­терфейсу и позволяет реализовать хйг/-подобные возможности в вашей программе.

Программа из примера 15.2 показывает, какие управляющие символы исполь­зуются вашим терминалом для стирания в предыдущей и текущей позиции кур­сора (вероятно, это клавиши «забой» и Ctrl+U). Затем она присваивает им исто­рические значения, # и @>, и предлагает ввести какой-нибудь текст. В конце своей работы программа восстанавливает исходные значения управляющих символов.

Пример 15.2. demo

#'/usr/bin/perl -w

# Демонстрация работы с интерфейсом POSIX termios

use POSIX qw(-termios_h),

$term = POSIX::Termios->new, $term->getattr(fileno(STDIN));

$erase = $term->getcc(VERASE),

Skill = $term->getcc(VKILL),

printf    Erase is character %d,   %s\n\   $erase,   uncontrol(chr($erase)),




Содержание  Назад  Вперед