Mover e redimensionar janelas para os cantos da tela
Publicado por Ryuk Shinigami (última atualização em 30/01/2020)
[ Hits: 5.266 ]
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
Script para controle do servidor ProFTP no Slackware
Shell Script para instalação do ePSXe no Ubuntu
Instalação de programas em Debian-like
Script para enviar put para uma API usando curl e dados no formato json
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)