找出开放式终端的大小


13

在DE上,为了方便起见,我们可以调整终端的大小(例如gnome-terminal),如何知道终端的大小(以像素或列和行数为单位)?

Answers:


20

如果您发出命令

stty size

它以行和列的形式返回当前终端的大小。例:

$ stty size
24 80

您可以像这样将行和列读入变量(感谢Janis的comment):

$ read myrows mycols < <(stty size)

在像素上而获得的大小需要你的屏幕的分辨率的知识,我不认为stty有这样的信息的直接访问。


先生,无法获得以像素为单位的输出吗?
爱德华·托瓦尔兹

请注意,此答案中bashecho命令将看不到变量,因为read管道中的将在子shell中执行。(但是ksh,它适用于。)对于bash您来说,您可能想使用read 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.