Como posso centralizar uma janela com um atalho de teclado?

2

Eu entrei na seção de grade do compizconfig e personalizei todos os comandos de mosaico.

Quando eu estava testando os comandos, não vi que nenhum deles efetivamente centralizasse a tela.

Entrei na seção de colocação de janelas e configurei novas janelas para abrir o centro. Mas se eu mover uma janela para o lado direito e, em seguida, quiser centralizá-la, não sei como devo fazer isso com um comando de teclado. O "put center" irá maximizá-lo e "restore" irá movê-lo para sua posição / tamanho mais recente.

Para resumir

diga que tenho uma janela cobrindo a metade direita da tela. Eu quero manter as dimensões / tamanho iguais, mas apenas centralizá-lo.

    
por max pleaner 03.10.2016 / 22:56

1 resposta

2

Introdução:

O script a seguir alinha o centro da janela ativa do usuário com o centro da tela. Pretende-se que seja ligado a um atalho de teclado em Definições - > Teclado - > Menu de atalhos.

Uso:

  1. Salve o script como ~/bin/center_active_window.py . Certifique-se de que tenha permissões executáveis com chmod +x ~/bin/center_active_window.py
  2. Abrir configurações do sistema - > Teclado - > Atalhos - > Personalizadas. Clique em + .
  3. Você será solicitado com um pop-up solicitando Nome e Comando. O nome pode ser qualquer coisa, o comando deve ser o caminho completo para o novo script, por exemplo, /home/your_user_name/bin/center_active_window.py . Clique em Aplicar
  4. Clique no texto Disabled e atribua a ele uma vinculação de tecla personalizada quando solicitado. Estou usando Ctrl + Super + C , mas você pode usar o que quiser.

Código-fonte

Também disponível como gist no GitHub

#!/usr/bin/env python3

# Author: Serg Kolo
# Date: Oct 3rd, 2016
# Description: Script for aligning the center of 
#     user's active window with the center of the monitor
# Tested on: Ubuntu 16.04
# Written for: http://askubuntu.com/q/832720/295286

from __future__ import print_function
from gi.repository import Gdk
import subprocess

def get_offset(*args):
    command = ['xprop','-notype','_NET_FRAME_EXTENTS',
               '-id',str(args[0])
    ]

    out = subprocess.check_output(command)
    return int(out.decode().strip().split(',')[-2])

def main():

    screen = Gdk.Screen.get_default()
    window = screen.get_active_window()
    window.unmaximize()
    window_width = window.get_width()
    window_y = window.get_origin()[-1]
    print(window_y)
    window_monitor = screen.get_monitor_at_window(window)
    monitor_center = screen.get_monitor_geometry(window_monitor).width/2

    # if centers of window and screen are aligned
    # the top left corner will be at screen_center - window_width/2    
    new_position = monitor_center - window_width /2

    # For some reason there is vertical offset necessary
    # Apparently this comes form _NET_FRAME_EXTENTS value
    offset = get_offset(int(window.get_xid()))

    window.move(new_position,window_y-offset)
    print(window.get_origin()) 

if __name__ == '__main__':
    main()
por Sergiy Kolodyazhnyy 04.10.2016 / 03:38