descubra o tamanho do terminal aberto

5

No DE podemos redimensionar terminal (gnome-terminal por exemplo) para nossa conveniência, como posso saber o tamanho do terminal em termos de pixels ou número de colunas e linhas?

    
por Edward Torvalds 19.04.2015 / 02:32

2 respostas

11

Se você emitir o comando

stty size

retorna o tamanho do terminal atual em linhas e colunas. Exemplo:

$ stty size
24 80

Você pode ler as linhas e colunas em variáveis como esta (graças ao comentário da Janis ):

$ read myrows mycols < <(stty size)

A obtenção do tamanho em pixels requer conhecimento da resolução da tela e não acho que stty tenha acesso direto a essas informações.

    
por 19.04.2015 / 03:34
0

Em um ambiente de área de trabalho , você está usando o X, e o utilitário xwininfo pode mostrar o tamanho da janela em pixels. Além disso, se você estiver executando na área de trabalho (e não, por exemplo, conectado remotamente), o emulador de terminal fornece uma variável $WINDOWID que você pode usar como um parâmetro para xwininfo , por exemplo,

xwininfo -id $WINDOWID

e obtenha uma lista de listagem:

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

Neste exemplo, as linhas com Width e Height são o tamanho em pixels . A última linha, com -geometry , dá o tamanho em caracteres (assim como a posição do canto superior esquerdo - em pixels).

Falando em redimensionar a janela, o programa resize mostra o número de linhas e colunas. Para este exemplo, mostra

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

A pergunta não indica como a informação pode ser usada, mas como a saída é texto, em um formato previsível, ela é prontamente roteirizada. Aqui está um exemplo simples usando o 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
    
por 11.06.2016 / 17:26

Tags