Как сделать одинаково измеренные окна в углах экрана?

Я недавно видел этот ответ на большой вопрос, и я задался вопросом, это также возможно на Ubuntu GNOME 15.10 с GNOME 3.18 и GDM, а также на Compiz как ответ на тот вопрос шоу?

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

3
задан 22 April 2017 в 10:47

2 ответа

На краю регистрации дубликата этого (но вопрос немного отличается), сценарий ниже делает то, что Вы описываете при выполнении его с аргументами

python3 /path/to/script.py 2 2

Однако, если существует больше чем четыре окна (или больше, чем ячейки сетки при использовании других аргументов, чем 2 2), сценарий помещает только четыре самых старых окна в сетку.

Что это делает

Когда четыре окна открыты, случайным образом помещенные на экран:

enter image description here

запущение скрипта расположит их в сетке:

enter image description here

Сценарий

#!/usr/bin/env python3
import subprocess
import sys

#--- set your preferences below: padding between windows, margin(s)
cols = int(sys.argv[1]); rows = int(sys.argv[2]); padding = 10; left_margin = 0; top_margin = 30
#---

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")
def get_res():
    xr = get("xrandr").split(); pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def check_window(w_id):
    w_type = get("xprop -id "+w_id)
    if " _NET_WM_WINDOW_TYPE_NORMAL" in w_type:
        return True
    else:
        return False

# get resolution
res = get_res()
# define (calculate) the area to divide
area_h = res[0] - left_margin; area_v = res[1] - top_margin
# create a list of calculated coordinates
x_coords = [int(left_margin+area_h/cols*n) for n in range(cols)]
y_coords = [int(top_margin+area_v/rows*n) for n in range(rows)]
coords = sum([[(cx, cy) for cx in x_coords] for cy in y_coords], [])
# calculate the corresponding window size, given the padding, margins, columns and rows
w_size = [str(int(area_h/cols - padding)), str(int(area_v/rows - padding))]
# find windows of the application, identified by their pid
wlist = [w.split()[0] for w in get("wmctrl -lp").splitlines()]
w_list = [w for w in wlist if check_window(w) == True][:cols*rows]
print(w_list)

# remove possibly maximization, move the windows
for n, w in enumerate(w_list):
    data = (",").join([str(item) for item in coords[n]])+","+(",").join(w_size)
    cmd1 = "wmctrl -ir "+w+" -b remove,maximized_horz"
    cmd2 = "wmctrl -ir "+w+" -b remove,maximized_vert"
    cmd3 = "wmctrl -ir "+w+" -e 0,"+data
    for cmd in [cmd1, cmd2, cmd3]:
        subprocess.Popen(["/bin/bash", "-c", cmd])

Как использовать

  1. Для сценария нужны оба xdotool и wmctrl:

    sudo apt-get install xdotool wmctrl
    
  2. Скопируйте сценарий в пустой файл, сохраните его как twobytwo.py

  3. Тестовый прогон это путем открытия четырех окон (по крайней мере одно окно терминала для выполнения команды), выполнение команда:

    python3 /path/to/twobytwo.py 2 2
    

    Окна должны переместиться в сетку 4, как во втором изображении

  4. Если все хорошо работает, добавьте его к сочетанию клавиш: выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду:

    python3 /path/to/twobytwo.py 2 2
    

Примечание (примечания)

  • в главном разделе существует раздел:

    left_margin = 0
    

    Я обнулил это, так как у гнома нет средства запуска слева. Для Единицы это должно быть (по крайней мере), 65, В зависимости от ширины набора средства запуска.

  • Как упомянуто, сценарий, как это, сетки четыре самых старых окна. Это означает, нужно ли Вам больше окон, которые будут помещены в ту же сетку, для сценария нужно редактирование. Упомяните раз так.
1
ответ дан 1 December 2019 в 15:24

Gnome, который Shell может быть изменен с помощью Расширения Gnome - я думаю , это расширение будет работать на Вас:

Это сделано путем перетаскивания окон в положение, оно покажет оранжевое выделение (кажется, не соответствует теме:/). Можно изменить разрыв между окнами в настройках:

enter image description here

, Хотя в настоящее время это расширение не доступно для GNOME 3.18, таким образом, Вы будете иметь к , дают этому обходному решению движение .

5
ответ дан 1 December 2019 в 15:24

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

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