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?
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?
Odpowiedzi:
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 stty
miał bezpośredni dostęp do takich informacji.
bash
tym echo
polecenia w tej odpowiedzi nie będzie widać zmienne, ponieważ read
w rurociągu zostanie wykonany w podpowłoce. (Działa to ksh
jednak.) bash
Możesz użyć np read myrows mycols < <( stty size )
.
W środowisku pulpitu używasz X, a xwininfo
narzę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ą, $WINDOWID
któ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 Width
i Height
są wielkości w pikselach . Ostatni wiersz, z, -geometry
podaje rozmiar w znakach (a także pozycję lewego górnego rogu - w pikselach).
Mówiąc o zmianie rozmiaru okna, resize
program 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