
Eu tentei xdotool
e , mas todos parecem retornar o tamanho do conteúdo da janela, que não inclui a largura da borda xwininfo
. xprop
Existe alguma ferramenta de linha de comando que possa encontrar essa largura de borda? E esperamos que a ferramenta funcione em diferentes gerenciadores de janelas compatíveis com EWMH.
Responder1
Dependendo do seu gerenciador de janelas, você pode usar xwininfo -tree -root
para listar toda a hierarquia de janelas e, em seguida, subir a árvore da janela de destino até o enquadramento da janela que o gerenciador de janelas colocou ao redor do destino.
O script a seguir faz isso iterativamente, executando xwininfo -tree
apenas na janela de destino para encontrar a janela pai e, em seguida, repetindo o processo subindo na árvore passo a passo até que o pai seja a raiz ( Parent window id: ...(the root window)
). Ele assume que a janela que tem a raiz como pai é o quadro desejado.
Ao adicionar -stats
você obtém acesso fácil à largura e altura da janela. Por exemplo, em um xterm
quadro de 724 por 1069 pixels, obtemos um quadro de 742 por 1087 pixels:
$ xwininfo -tree -stats -id $WINDOWID
Parent window id: 0x8002ff (has no name)
...
Width: 724
Height: 1069
$ xwininfo -tree -stats -id 0x8002ff
Parent window id: 0x8002fe (has no name)
...
Width: 724
Height: 1069
$ xwininfo -tree -stats -id 0x8002fe
Parent window id: 0xc1 (the root window) (has no name)
...
Width: 742
Height: 1087
Aqui está o script, usando um número de identificação de janela como argumento:
#!/bin/bash
# http://unix.stackexchange.com/a/331516/119298
getwh(){
xwininfo -tree -stats -id "$id" |
awk '/Parent window id:/{ parent = ($0~/the root window/)?0:$4; }
/ Width:/ { w = $2 }
/ Height:/ { h = $2 }
END { printf "%s %d %d\n",parent,w,h }'
}
id=${1:-${WINDOWID?}}
set -- $(getwh "$id")
w=$2 h=$3
while id=$1
[ "$id" != 0 ]
do set -- $(getwh "$id")
done
let bw=$2-w bh=$3-h
echo "total border w and h $bw $bh"
Ele imprime total border w and h 18 18
e você precisa dividi-los por 2 para que a largura da borda assuma simetria. Se este não for o caso, por exemplo, com uma barra de título grande, você também precisará usar a diferença nos deslocamentos x e y para calcular as bordas individuais superior, inferior, esquerda e direita.
Responder2
um método indireto é despejar o conteúdo usando xwd e depois medir a imagem produzida.
xwd -frame | xwdtopnm | head -2
xwdtppnm
é do pacote netpbm