Каждый раз, когда кто-то устанавливает другой размер для виртуальной консоли, less
распознает разрешение окна (я предполагаю, что ...); в соответствии с этим, он меняет количество строк текста, которое он должен визуализировать. Как рассчитывается этот параметр?
12
Ответы:
Если вы ищете способ проверки из скрипта, вы можете сделать одно из следующих:
tput cols
иtput lines
, как подсказывает МанатворкНо если вы хотите детали, здесь мы идем:
Для виртуальных терминалов (xterm и др.) Существует
ioctl()
системный вызов, который сообщит вам, каков размер окна. Если это возможно,less
использует этот вызов. Кроме того, когда вы изменяете размер окна, все, что работает в этом окне, получаетSIGWINCH
сигнал, который даетless
понять, что он должен проверить новый размер окна. Например, я запустилless
запуск (как идентификатор процесса 16663), подключился к немуstrace
и изменил размер окна. Вот что я увидел:Это также то, что
tput cols
иtput lines
делают за кадром, если могут. Для получения дополнительной информации об этом методе см.man tty-ioctl
И найдите TIOCGWINSZ.Для других терминалов, таких как те, которые подключены к последовательным портам, нет никакой возможности получить эту информацию напрямую В этом случае
less
начинает искать ключи в переменных среды.LINES
иCOLUMNS
часто будет установлен на размеры терминала. Фактически, еслиbash
илиzsh
может найти размеры терминала, он автоматически сам установит эти переменные, чтобы не очень умные программы могли видеть размер терминала. Однако большинство других оболочек, включаяdash
иtcsh
, не устанавливают эти переменные.TERM
обычно устанавливается на тип терминала, и в этом случае база данных terminfo может содержать ожидаемый размер терминала. Еслиtput rows
не удается использовать IOCTL (например, если вы подключены через последовательный порт), он вернется к значениям, записанным здесь. Для терминала, размер которого может измениться, это только предположение и, вероятно, будет неверным.Для получения дополнительной информации см.
man tput
Команду для управления терминалом иman terminfo
список вещей, которые вы можете указать терминалу делать.источник
Если вы посмотрите на исходный код, вам будут известны
less
вызовыioctl()
для получения размера окна в Linux.источник
Я не уверен, что это та информация, которую вы ищете. Я думаю,
less
регистрирует обработчик сигнала дляSIGWINCH
. Когда измерение терминала изменяется, он получаетSIGWINCH
сигнал и проверяет tty информацию для текущего измерения терминала. http://www.gnu.org/software/libc/manual/html_node/Miscellaneous-Signals.htmlисточник