Mover e redimensionar janelas para os cantos da tela
Publicado por Ryuk Shinigami (última atualização em 30/01/2020)
[ Hits: 5.388 ]
Homepage: www.alem.com.br
Download windowmove2.sh (versão 2)
Este script pode ser usado em qualquer ambiente gráfico para manipular as janelas ativas com atalhos de teclado. Útil para posicionar/redimensionar as janelas lado a lado, complementando as funções do próprio gerenciador de janelas.
#!/bin/bash # Autor: Paulo Costa (costapha@outlook.com) # Posiciona a janela ativa nos cantos ou no centro da Área de Trabalho. # Configure no seu DE atalhos de teclado para cada função do script. # Dependências: x11-utils (xprop), xdotool, wmctrl help() { echo "Como usar este script: $ ./windowmove.sh (options) options: (1) move para o canto inferior esquerdo da tela; (2) move para a metade inferior da tela; (3) move para o canto inferior direito da tela; (4) move para a metade esquerda da tela; (5) move para o centro da tela; (6) move para a metade direita da tela; (7) move para o canto superior esquerdo da tela; (8) move para a metade superior da tela; (9) move para o canto superior direito da tela; (1|3|5|7|9)r move e redimensiona para um quarto da tela. " } top-left() { WX="0%" WY="0%" xdotool getactivewindow windowmove $WX $WY } top-right() { WX="100%" WY="0%" xdotool getactivewindow windowmove $WX $WY } bottom-left() { WX="0%" WY="100%" xdotool getactivewindow windowmove $WX $WY } bottom-right() { WX="100%" WY="100%" xdotool getactivewindow windowmove $WX $WY } center() { # Tamanho da janela (sem bordas): WW=$(xdotool getactivewindow getwindowgeometry | grep -oP 'Geometry: \K.*' | cut -d'x' -f1) WH=$(xdotool getactivewindow getwindowgeometry | grep -oP 'Geometry: \K.*' | cut -d'x' -f2) # Tamanho Total da janela (com bordas): TWW=$(( $BE + $WW + $BD )) TWH=$(( $BS + $WH + $BI )) # Posição (X,Y) centralizada: GRAVITY=$(xprop -id $ID | grep -oP 'gravity:\s+\K.*') if [ $GRAVITY = "Static" ]; then WX=$(( $AX + $BE + ($AW - $TWW) / 2 )) WY=$(( $AY + $BS + ($AH - $TWH) / 2 )) else WX=$(( $AX + ($AW - $TWW) / 2 )) WY=$(( $AY + ($AH - $TWH) / 2 )) fi xdotool getactivewindow windowmove $WX $WY } center-resize() { # Tamanho da janela (sem bordas): WW=1200 WH=600 # Tamanho Total da janela (com bordas): TWW=$(( $BE + $WW + $BD )) TWH=$(( $BS + $WH + $BI )) # Posição (X,Y) centralizada: GRAVITY=$(xprop -id $ID | grep -oP 'gravity:\s+\K.*') if [ $GRAVITY = "Static" ]; then WX=$(( $AX + $BE + ($AW - $TWW) / 2 )) WY=$(( $AY + $BS + ($AH - $TWH) / 2 )) else WX=$(( $AX + ($AW - $TWW) / 2 )) WY=$(( $AY + ($AH - $TWH) / 2 )) fi #wmctrl -r :ACTIVE: -e 0,$WX,$WY,$WW,$WH xdotool getactivewindow windowsize $WW $WH xdotool getactivewindow windowmove $WX $WY } half-vertical() { MVW=$(( ($AW / 2) - $BE - $BD )) MVH=$(( $AH - $BS - $BI )) xdotool getactivewindow windowsize $MVW $MVH } half-horizontal() { MVW=$(( $AW - $BE - $BD )) MVH=$(( ($AH / 2) - $BS - $BI )) xdotool getactivewindow windowsize $MVW $MVH } fourth() { MVW=$(( ($AW / 2) - $BE - $BD )) MVH=$(( ($AH / 2) - $BS - $BI )) xdotool getactivewindow windowsize $MVW $MVH } # Dimensões (WxH) da Área de Trabalho (A) AX=$(wmctrl -d | awk 'NR==1{print $8}' | cut -d',' -f1) AY=$(wmctrl -d | awk 'NR==1{print $8}' | cut -d',' -f2) AW=$(wmctrl -d | awk 'NR==1{print $9}' | cut -d'x' -f1) AH=$(wmctrl -d | awk 'NR==1{print $9}' | cut -d'x' -f2) # ID da janela ativa: ID=$(xprop -root _NET_ACTIVE_WINDOW | cut -d' ' -f5) # Tamanho das bordas do gerenciador de janelas: # Borda Esquerda BE=$(xprop -id $ID _NET_FRAME_EXTENTS | cut -d' ' -f3 | sed 's/,//') # Borda Direita BD=$(xprop -id $ID _NET_FRAME_EXTENTS | cut -d' ' -f4 | sed 's/,//') # Borda Superior BS=$(xprop -id $ID _NET_FRAME_EXTENTS | cut -d' ' -f5 | sed 's/,//') # Borda Inferior BI=$(xprop -id $ID _NET_FRAME_EXTENTS | cut -d' ' -f6 | sed 's/,//') case $1 in 1) bottom-left ;; 2) half-horizontal; bottom-left ;; 3) bottom-right ;; 4) half-vertical; top-left ;; 5) center ;; 6) half-vertical; top-right ;; 7) top-left ;; 8) half-horizontal; top-left ;; 9) top-right ;; 1r) fourth; bottom-left ;; 3r) fourth; bottom-right ;; 5r) center-resize ;; 7r) fourth; top-left ;; 9r) fourth; top-right ;; *) help; exit 1 esac
Gerenciar hosts virtuais do Apache
cofigurar a rede passando por roteador
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Youtube e networkmeneger para de funcionar (5)
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)