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

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

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

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

Подвести итоги

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

2 ответа

Решение

Вступление:

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


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

  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://Ask-ubuntu.ru/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()

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

      #!/bin/sh

ScreenX=$(xdpyinfo | awk -F'[ x]+' '/dimensions:/{print $3}')
ScreenY=$(xdpyinfo | awk -F'[ x]+' '/dimensions:/{print $4}')

WindowX=$(xwininfo -id $(xdotool getactivewindow) | awk -F'[ :]+' '/Width:/{print $3}')
WindowY=$(xwininfo -id $(xdotool getactivewindow) | awk -F'[ :]+' '/Height:/{print $3}')

#WindowX=$(xwininfo -id $(xdotool getactivewindow) | sed -n -e "s/^ \+Width: \([0-9]\+\).*/\1/p")
#WindowY=$(xwininfo -id $(xdotool getactivewindow) | sed -n -e "s/^ \+Height: \([0-9]\+\).*/\1/p")

PositionX=$(((ScreenX/2)-(WindowX/2)))
PositionY=$(((ScreenY/2)-(WindowY/2)))

#echo "Screen X: " $ScreenX
#echo "Window X: " $WindowX
#echo "Position X: " $PositionX

#echo "Screen Y: " $ScreenY
#echo "Window Y: " $WindowY
#echo "Position Y: " $PositionY

wmctrl -r :ACTIVE: -e 1,$PositionX,$PositionY,$WindowX,$WindowY

Некоторые команды прокомментированы. Я решил сохранить их просто ради любопытства, потому что они работали очень хорошо, пока я пытался понять, что делать (я не очень хорошо знаком со скриптами bash).

Если кто-нибудь знает, как сделать этот скрипт чище и/или плавнее, расскажите нам. Это было бы очень здорово.

Я надеюсь, что это полезно.

Ваше здоровье.

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