web-dev-qa-db-fra.com

Comment centrer une fenêtre avec un raccourci clavier?

Je suis allé dans la section grid de compizconfig et j'ai personnalisé toutes les commandes de mosaïque.

Lorsque je testais les commandes, je n’ai vu aucun d’entre elles centrer efficacement l’écran.

Je suis allé dans la section de placement des fenêtres et j'ai configuré de nouvelles fenêtres pour qu'elles s'ouvrent centrées. Mais si je déplace une fenêtre du côté droit et que je veux ensuite la centrer, je ne sais pas comment faire avec une commande au clavier. Le "centre de vente" le maximisera et "restaurer" le déplacera à sa position/taille la plus récente.

pour résumer

disons que j'ai une fenêtre couvrant la moitié droite de l'écran. Je veux garder les dimensions/taille identiques, mais juste le centrer.

2
max pleaner

Introduction:

Le script suivant aligne le centre de la fenêtre active de l'utilisateur sur le centre de l'écran. Il est destiné à être lié à un raccourci clavier dans le menu Paramètres -> Clavier -> Raccourcis.


Usage:

  1. Enregistrez le script sous ~/bin/center_active_window.py. Assurez-vous qu'il dispose d'autorisations exécutables avec chmod +x ~/bin/center_active_window.py
  2. Ouvrez les Paramètres système -> Clavier -> Raccourcis -> Personnalisé. Cliquez sur +.
  3. Vous serez invité avec une fenêtre contextuelle vous demandant de nommer et de commander. Le nom peut être n'importe quoi, la commande doit être le chemin complet de votre nouveau script, c'est-à-dire /home/your_user_name/bin/center_active_window.py. Cliquez sur Apply
  4. Cliquez sur le texte Disabled et attribuez-lui un raccourci clavier personnalisé à l'invite. j'utilise Ctrl+Super+C , mais vous pouvez utiliser ce que vous voulez.

Code source

Egalement disponible en tant que Gist on 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 __== '__main__':
    main()

2