узнать размер открытого терминала

13

На DE мы можем изменить размеры терминала (например, gnome-Terminal), как я могу узнать размер терминала в терминах пикселей или количества столбцов и строк?

Эдвард Торвальдс
источник

Ответы:

20

Если вы выполните команду

stty size

он возвращает размер текущего терминала в строках и столбцах. Пример:

$ stty size
24 80

Вы можете прочитать строки и столбцы в переменные следующим образом (благодаря комментарию Яниса ):

$ read myrows mycols < <(stty size)

Получение размера в пикселях требует знания разрешения вашего экрана, и я не думаю, что sttyимеет прямой доступ к такой информации.

Джозеф Р.
источник
Сэр, это не возможно получить вывод в терминах пикселей?
Эдвард Торвальдс
Обратите внимание , что в bashпо echoкоманде в этом ответе не будет видеть переменные, так как readв трубопроводе будет выполнен в подоболочки. (Он работает ksh, хотя.) Для bashвас может потребоваться использование, например, read myrows mycols < <( stty size ).
Янис
1

В среде рабочего стола вы используете X, и xwininfoутилита может показывать размер окна в пикселях. Кроме того, если вы работаете на настольном компьютере (например, не подключены удаленно), эмулятор терминала предоставляет переменную, $WINDOWIDкоторую вы можете использовать в качестве параметра xwininfo, например:

xwininfo -id $WINDOWID

и получить список перечисления это:

xwininfo: Window id: 0xc00025 "uxterm"

  Absolute upper-left X:  65
  Absolute upper-left Y:  167
  Relative upper-left X:  0
  Relative upper-left Y:  22
  Width: 624
  Height: 577
  Depth: 24
  Visual: 0x22
  Visual Class: TrueColor
  Border width: 1
  Class: InputOutput
  Colormap: 0x21 (installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +65+167  -589+167  -589-256  +65-256
  -geometry 103x42+65+145

В этом примере строки с Widthи Heightявляются размером в пикселях . Последняя строка с -geometryдает размер в символах (а также положение верхнего левого угла - в пикселях).

Говоря об изменении размера окна, resizeпрограмма показывает количество строк и столбцов. Для этого примера показано

$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;

В вопросе не указывалось, как можно использовать информацию, но поскольку выходные данные являются текстовыми, в предсказуемом формате они легко сценариев. Вот простой пример использования awk:

#!/bin/sh
if [ -n "$WINDOWID" ]
then
    xwininfo -id $WINDOWID | awk '
    BEGIN { px = 0; py = 0; chars = "?x?"; }
    /Height:/ { py = $2; }
    /Width:/ { px = $2; }
    /-geometry/ { chars = $2; sub("+.*","",chars); }
    END { printf "%dx%d pixels, %s chars\n", py, px, chars; }'
else
    printf '? no WINDOWID found\n'
fi

какие отпечатки

577x624 pixels, 103x42 chars
Томас Дики
источник