Trên DE, chúng ta có thể thay đổi kích thước thiết bị đầu cuối (ví dụ gnome-terminal) để thuận tiện cho chúng tôi, làm thế nào tôi có thể biết kích thước của thiết bị đầu cuối theo pixel hoặc số cột và hàng?
Trên DE, chúng ta có thể thay đổi kích thước thiết bị đầu cuối (ví dụ gnome-terminal) để thuận tiện cho chúng tôi, làm thế nào tôi có thể biết kích thước của thiết bị đầu cuối theo pixel hoặc số cột và hàng?
Câu trả lời:
Nếu bạn ban hành lệnh
stty size
nó trả về kích thước của thiết bị đầu cuối hiện tại trong các hàng và cột. Thí dụ:
$ stty size
24 80
Bạn có thể đọc các hàng và cột thành các biến như thế này (nhờ bình luận của Janis ):
$ read myrows mycols < <(stty size)
Lấy kích thước bằng pixel đòi hỏi kiến thức về độ phân giải màn hình của bạn và tôi không nghĩ stty
có quyền truy cập trực tiếp vào thông tin đó.
bash
các echo
lệnh trong câu trả lời này sẽ không thấy các biến, vì read
trong các đường ống sẽ được thực hiện trong một subshell. (Tuy nhiên, nó hoạt động trong ksh
.) Cho bash
bạn có thể muốn sử dụng, ví dụ : read myrows mycols < <( stty size )
.
Trong môi trường máy tính để bàn , bạn đang sử dụng X và xwininfo
tiện ích có thể hiển thị kích thước của cửa sổ tính bằng pixel. Ngoài ra, nếu bạn đang chạy trên máy tính để bàn (và không, ví dụ, được kết nối từ xa), trình giả lập thiết bị đầu cuối cung cấp một biến $WINDOWID
mà bạn có thể sử dụng làm tham số xwininfo
, ví dụ:
xwininfo -id $WINDOWID
và có được một danh sách danh sách này:
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
Trong ví dụ này, các dòng có Width
và Height
là kích thước tính bằng pixel . Dòng cuối cùng, với -geometry
kích thước tính bằng ký tự (cũng như vị trí của góc trên bên trái - tính bằng pixel).
Nói về việc thay đổi kích thước cửa sổ, resize
chương trình hiển thị số lượng dòng và cột. Trong ví dụ này, nó cho thấy
$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;
Câu hỏi không chỉ ra làm thế nào thông tin có thể được sử dụng, nhưng vì đầu ra là văn bản, ở định dạng có thể dự đoán được, nên nó dễ dàng được viết theo kịch bản. Đây là một ví dụ đơn giản sử dụng 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
mà in
577x624 pixels, 103x42 chars