sprawdź rozmiar otwartego terminalu

13

W DE możemy zmienić rozmiar terminala (na przykład gnome-terminal) dla naszej wygody, jak mogę poznać rozmiar terminala pod względem pikseli lub liczby kolumn i wierszy?

Edward Torvalds
źródło

Odpowiedzi:

20

Jeśli wydasz polecenie

stty size

zwraca rozmiar bieżącego terminala w wierszach i kolumnach. Przykład:

$ stty size
24 80

Możesz czytać wiersze i kolumny w takie zmienne (dzięki komentarzowi Janis ):

$ read myrows mycols < <(stty size)

Uzyskanie rozmiaru w pikselach wymaga znajomości rozdzielczości ekranu i nie sądzę, aby sttymiał bezpośredni dostęp do takich informacji.

Joseph R.
źródło
proszę pana, czy nie jest możliwe uzyskanie wyniku wyrażonego w pikselach?
Edward Torvalds,
Zauważ, że w bashtym echopolecenia w tej odpowiedzi nie będzie widać zmienne, ponieważ readw rurociągu zostanie wykonany w podpowłoce. (Działa to kshjednak.) bashMożesz użyć np read myrows mycols < <( stty size ).
Janis,
1

W środowisku pulpitu używasz X, a xwininfonarzędzie może pokazywać rozmiar okna w pikselach. Ponadto, jeśli działasz na pulpicie (i nie jesteś na przykład podłączony zdalnie), emulator terminala udostępnia zmienną, $WINDOWIDktórej możesz użyć jako parametru xwininfo, np.

xwininfo -id $WINDOWID

i uzyskaj listę:

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

W tym przykładzie, wiersze z Widthi Heightsą wielkości w pikselach . Ostatni wiersz, z, -geometrypodaje rozmiar w znakach (a także pozycję lewego górnego rogu - w pikselach).

Mówiąc o zmianie rozmiaru okna, resizeprogram pokazuje liczbę linii i kolumn. W tym przykładzie pokazuje

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

Pytanie nie wskazywało, w jaki sposób informacja może być wykorzystana, ale ponieważ dane wyjściowe są tekstem, w przewidywalnym formacie, można je łatwo wykonać w skrypcie. Oto prosty przykład użycia 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

który drukuje

577x624 pixels, 103x42 chars
Thomas Dickey
źródło