Mover e redimensionar janelas para os cantos da tela
Publicado por Ryuk Shinigami (última atualização em 30/01/2020)
[ Hits: 5.236 ]
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
Escrever números, datas, horas e outros por extenso
Encerrar vários processos de uma mesma aplicação
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhorando a precisão de valores flutuantes em python[AJUDA] (7)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (4)
É cada coisa que me aparece! - não é só 3% (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta