з'ясувати розмір відкритого терміналу


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.