Как программно определить размеры символов моего окна терминала? - PullRequest
6 голосов
/ 22 апреля 2011

Я пишу скрипт, который будет отображать биржевую диаграмму как ASCII-изображение в окне эмулятора терминала.Я обычно использую OSX / Terminal.app, но приемлемым вариантом будет решение на основе Linux.

В моем сценарии в настоящее время есть аргументы командной строки для ширины и высоты экрана (опять же, как измеряется в символах, а не в пикселях)со значениями по умолчанию, определенными переменными среды моего собственного изобретения.Я хотел бы, чтобы эти сценарии определяли размер текущего окна (IN CHARACTERS) и использовали TH в качестве значения по умолчанию.Типичный размер большого окна на моем 17-дюймовом Macbook Pro может быть 200 x 68.

Это скрипт на Perl, но если вы знаете решение на каком-то другом языке, скажите!

TIA.
Ken

Ответы [ 3 ]

7 голосов
/ 22 апреля 2011

Обычный способ сделать это - tput lines и tput cols;это запрашивает, в следующем порядке:

  • $LINES и $COLUMNS переменные среды;
  • termios настройки, которые устанавливаются эмуляторами терминала при изменении размера их окон;
  • описание terminfo, обозначенное $TERM.
2 голосов
/ 22 апреля 2011

Из C вы можете использовать опцию TIOCGWINSZ для системного вызова ioctl на /dev/tty.

. Это отображается модулем Term::ReadKey - с man perlfaq8:

Как получить размер экрана?

Если у вас установлен модуль Term::ReadKey из CPAN, вы можете использовать его для получения ширины и высоты в символахи в пикселях:

use Term::ReadKey;
($wchar, $hchar, $wpixels, $hpixels) = GetTerminalSize();
1 голос
/ 22 апреля 2011

При интерактивном запуске bash определяет $LINES и $COLUMNS.В противном случае используйте curses / ncurses для получения размеров терминала.

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