หาขนาดของเทอร์มินัลเปิด


13

ใน DE เราสามารถปรับขนาดเทอร์มินัล (ตัวอย่างเช่น gnome-terminal) เพื่อความสะดวกของเราฉันจะทราบขนาดของเทอร์มินัลในรูปของพิกเซลหรือจำนวนคอลัมน์และแถวได้อย่างไร

คำตอบ:


20

หากคุณออกคำสั่ง

stty size

มันคืนขนาดของเทอร์มินัลปัจจุบันในแถวและคอลัมน์ ตัวอย่าง:

$ stty size
24 80

คุณสามารถอ่านแถวและคอลัมน์เป็นตัวแปรเช่นนี้ (ขอบคุณความคิดเห็นของ Janis ):

$ read myrows mycols < <(stty size)

การรับขนาดพิกเซลต้องมีความรู้เกี่ยวกับความละเอียดหน้าจอของคุณและฉันไม่คิดว่าsttyจะสามารถเข้าถึงข้อมูลดังกล่าวได้โดยตรง


คุณไม่สามารถรับเอาต์พุตในรูปของพิกเซลได้หรือไม่
Edward Torvalds

โปรดสังเกตว่าในคำสั่งในคำตอบนี้จะไม่เห็นตัวแปรตั้งแต่ในท่อจะถูกดำเนินการใน subshell (ทำงานในแต่.) สำหรับคุณอาจต้องการใช้งานเช่น bashechoreadkshbashread myrows mycols < <( stty size )
Janis

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.