Как я могу центрировать окно с сочетанием клавиш?

Я вошел в раздел сетки compizconfig и настроил все команды мозаичного размещения.

Когда я тестировал команды, я не видел, что любой из них эффективно центрировал экран.

Я вошел в раздел размещения окна и настроил новые окна для открытия центрируемый. Но если я перемещаю окно в правую сторону и затем хочу центрировать ее, я не знаю, как я должен сделать это с командой клавиатуры. "Помещенный центр" максимизирует его, и "восстановление" переместит его в свое новое положение / размер.

Подводить итог

скажите, что у меня есть оконное покрытие правильная половина экрана. Я хочу сохранить размеры / измеряют то же, но просто центрируют его.

2
задан 3 October 2016 в 23:56

1 ответ

Введение:

Следующий скрипт выравнивает центр активного окна пользователя с центром экрана. Он предназначен для привязки к сочетанию клавиш в меню «Настройки» -> «Клавиатура» -> «Сочетания клавиш».


Использование:

  1. Сохраните сценарий как ~/bin/center_active_window.py. Убедитесь, что у него есть права на выполнение с помощью chmod +x ~/bin/center_active_window.py
  2. Откройте «Параметры системы» -> «Клавиатура» -> «Горячие клавиши» -> «Пользовательский». Нажмите + .
  3. Вам будет предложено всплывающее окно с запросом имени и команды. Имя может быть любым, команда должна указывать полный путь к вашему новому сценарию, т.е. /home/your_user_name/bin/center_active_window.py. Нажмите Применить
  4. Нажмите на текст Disabled и назначьте ему пользовательскую привязку клавиш после появления соответствующего запроса. Я использую Ctrl + Super + C , но вы можете использовать все, что захотите.

Исходный код

Также доступно как gist на 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()

2
ответ дан 2 December 2019 в 03:44

Другие вопросы по тегам:

Похожие вопросы: