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?
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?
Respuestas:
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 stty
tenga acceso directo a dicha información.
bash
el echo
comando en esta respuesta no verá las variables, ya que read
en la tubería se ejecutará en una subshell. (Funciona en ksh
, sin embargo.) Para bash
es posible que desee utilizar, por ejemplo, read myrows mycols < <( stty size )
.
En un entorno de escritorio , está utilizando X, y la xwininfo
utilidad 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 $WINDOWID
que 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 Width
y Height
son del tamaño en píxeles . La última línea, con -geometry
da 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 resize
programa 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