tìm ra kích thước của thiết bị đầu cuối mở


13

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:


20

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ĩ sttycó quyền truy cập trực tiếp vào thông tin đó.


Thưa ông, không thể có được đầu ra về mặt pixel?
Edward Torvalds

Lưu ý rằng trong bashcác echolệnh trong câu trả lời này sẽ không thấy các biến, vì readtrong các đường ống sẽ được thực hiện trong một subshell. (Tuy nhiên, nó hoạt động trong ksh.) Cho bashbạn có thể muốn sử dụng, ví dụ : read myrows mycols < <( stty size ).
Janis

1

Trong môi trường máy tính để bàn , bạn đang sử dụng X và xwininfotiệ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 $WINDOWIDmà 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ó WidthHeightlà kích thước tính bằng pixel . Dòng cuối cùng, với -geometrykí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ổ, resizechươ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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.