averiguar el tamaño de la terminal abierta

13

En DE podemos cambiar el tamaño del terminal (gnome-terminal, por ejemplo) para nuestra conveniencia, ¿cómo puedo saber el tamaño del terminal en términos de píxeles o el número de columnas y filas?

Edward Torvalds
fuente

Respuestas:

20

Si emite el comando

stty size

devuelve el tamaño del terminal actual en filas y columnas. Ejemplo:

$ stty size
24 80

Puede leer las filas y columnas en variables como esta (gracias al comentario de Janis ):

$ read myrows mycols < <(stty size)

Obtener el tamaño en píxeles requiere conocer la resolución de su pantalla y no creo que sttytenga acceso directo a dicha información.

Joseph R.
fuente
señor, ¿no es posible obtener resultados en términos de píxeles?
Edward Torvalds
Tenga en cuenta que en bashel echocomando en esta respuesta no verá las variables, ya que readen la tubería se ejecutará en una subshell. (Funciona en ksh, sin embargo.) Para bashes posible que desee utilizar, por ejemplo, read myrows mycols < <( stty size ).
Janis
1

En un entorno de escritorio , está utilizando X, y la xwininfoutilidad puede mostrar el tamaño de la ventana en píxeles. Además, si está ejecutando en el escritorio (y no, por ejemplo, conectado de forma remota), el emulador de terminal proporciona una variable $WINDOWIDque puede usar como parámetro para xwininfo, por ejemplo,

xwininfo -id $WINDOWID

y obtener una lista de este:

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

En este ejemplo, las líneas con Widthy Heightson del tamaño en píxeles . La última línea, con -geometryda el tamaño en caracteres (así como la posición de la esquina superior izquierda - en píxeles).

Hablando de cambiar el tamaño de la ventana, el resizeprograma muestra el número de líneas y columnas. Para este ejemplo, muestra

$ resize
set noglob;
setenv COLUMNS '103';
setenv LINES '42';
unset noglob;

La pregunta no indicaba cómo se podría usar la información, pero dado que el resultado es texto, en un formato predecible, es fácil de escribir. Aquí hay un ejemplo simple usando 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

que imprime

577x624 pixels, 103x42 chars
Thomas Dickey
fuente