Операционная система UNIX. Руководство программиста




Программа editor - часть 2


В-четвертых, команда CTRL+L выполняет функцию, которую должны иметь большинство curses-программ. Случается так, что другие программы выводят что-либо на экран (например, при передаче сообщений), либо экран портится в результате сбоев оборудования. В этом случае пользователь может ввести CTRL+L, в результате чего экран очищается и заполняется вновь посредством

wrefresh (curscr)

Наконец, еще одной важной особенностью является то, что вводимые команды заканчиваются нажатием CTRL+D, а не ESC. Было бы соблазнительно использовать ESC, так как эта клавиша является одной из немногих, присутствующих на любой клавиатуре (наряду с RETURN и BREAK). Однако, это может привести к возникновению двусмысленности. Большинство терминалов использует последовательности символов, начинающиеся с ESC для управления терминалом и имеют клавиши, при нажатии на которые передаются такие последовательности. Если программа получает с клавиатуры ESC, она не может различить, нажал ли пользователь ESC или другую функциональную клавишу.

Editor и другие использующие curses программы решают эту проблему, устанавливая таймер. Если за некоторый интервал времени приходит еще символ и он может быть началом последовательности, которую генерирует функциональная клавиша, программа пытается читать последующие символы до тех пор, пока не будет считана вся последовательность для функциональной клавиши, либо символ, который не может быть частью такой последовательности, либо пока не истечет определенное время. Эта стратегия хороша, но не абсолютно надежна. Пользователь может нажать ESC и сразу за ней еще клавишу, и тогда curses-программа решит, что была нажата функциональная клавиша. Кроме того, ESC не сразу передается обрабатывающей программе, в результате чего последняя медленнее реагирует на нажатие этой клавиши.

Многие существующие ныне программы используют ESC в качестве одной из основных своих команд, и это положение нельзя изменить, не вызвав недовольства большого количества пользователей. Чтобы использовать функциональную клавиатуру, эти программы должны решать описанную выше проблему двусмысленности - в лучшем случае путем использования таймера. Мораль всего этого ясна: избегайте использования клавиши ESC в Ваших программах.




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