Я могу установить привязку клавиш для изменения размеров окна к половине его размера в выбранном направлении?

Используя Ubuntu 14.04, я изучаю получение 40 дюймов 4k дисплей и нашел, как изменить размер окон вниз к разделам четверти экрана, но я хотел бы способность далее изменить размер их вниз при желании. Например, я хотел бы к keybind, чтобы значение по умолчанию compiz взяло полноэкранное окно и поместило его в верхнюю левую четверть экрана, но, если нажато снова, далее уменьшило его на верхнюю левую восьмую часть экрана или поместило окно в нижнюю правую четверть главной четверти экрана (поднимающий одну восьмую вертикально и горизонтально экрана). Эта функциональность скрыта в compiz или каком-либо другом приложении, с которым я не знаком?

2
задан 24 January 2015 в 01:56

1 ответ

Сценарий ниже может использоваться в качестве дополнительной функциональности к "изменить размер к четверти" опции в 14,04. Это может быть выполнено с аргументами: "левый", "правильный", "вниз", для дальнейшего вырезания четверти в восьмерках.

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

Если Вам переместили Ваше окно в четверть Вашего экрана:

enter image description here

сценарий прорубит окно в половине, или левые, право, главная или нижняя половина, в зависимости от аргумента, с которым Вы выполняете его (см. ниже).

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

  • Использование сценария wmctrl, который не находится по умолчанию в Вашей системе:

    sudo apt-get install wmctrl
    
  • Скопируйте сценарий ниже в пустой файл, сохраните его как organize_w в каталоге ~/bin. Сделайте исполняемый файл сценария. Вероятно, необходимо будет все еще создать каталог ~/bin. Это имеет преимущество, что можно запустить скрипт только названием сценария:

  • Добавьте четыре команды к пользовательским сочетаниям клавиш. Настройки открытой системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Добавьте четыре команды к сочетаниям клавиш.
    В моей системе я нашел четыре чрезвычайно пригодных ярлыка все еще доступными: Я предложил бы добавить команды под этими сочетаниями клавиш:

    organize_w left 
    

    Shift+Ctrl+Numpad <

    эффект:

    enter image description here

    organize_w right 
    

    Shift+Ctrl+Numpad>

    эффект:

    enter image description here

    organize_w up 
    

    Shift+Ctrl+Numpad ^

    эффект:

    enter image description here

    organize_w down 
    

    Shift+Ctrl +Numpad v

    эффект:

    enter image description here

    Таким образом, можно расположить окна как ниже с несколькими нажатиями клавиш:

  • enter image description here

Сценарий:

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

arg = sys.argv[1]
WA_correction = 28

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])

xprop_data = get("xprop -root").split()
w_id = xprop_data[xprop_data.index("_NET_ACTIVE_WINDOW(WINDOW):")+4].replace(",", "")
frontmost = w_id[:2]+"0"+w_id[2:]
w_data = [l for l in get("wmctrl -lG").splitlines() if frontmost in l][0].split()
new_G = w_data[2:6]
new_G[1] = str(int(int(new_G[1])-WA_correction))
xy_corr = lambda x: -10 if int(x) < 100 else 0
if arg == "left":
    new_G[2] = str(int(int(new_G[2])/2 + xy_corr(new_G[0])))
    new_G[3] = str(int(int(new_G[3]) + xy_corr(new_G[1])))            
elif arg == "right":
    new_G[0] = str(int(int(new_G[0])+int(new_G[2])/2))    
    new_G[2] = str(int(int(new_G[2])/2))
    new_G[3] = str(int(int(new_G[3]) + xy_corr(new_G[1])))
elif arg == "up":
    new_G[2] = str(int(new_G[2]) + xy_corr(new_G[0]))
    new_G[3] = str(int(int(new_G[3])/2 + xy_corr(new_G[1])))
elif arg == "down":
    new_G[1] = str(int(int(new_G[1]) + int(new_G[3])/2))
    new_G[2] = str(int(new_G[2]) + xy_corr(new_G[0]))
    new_G[3] = str(int(int(new_G[3])/2))

execute("wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz")
execute("wmctrl -ir "+frontmost+" -e 0,"+(",").join(new_G))



править:

Версия XFCE

С несколькими незначительными изменениями сценарий может также использоваться для изменения размеров wndows в половину / четверть или восемь на XFCE (протестированный на 14,04).

Используйте его точно как версия для Единицы:

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

arg = sys.argv[1]
WA_correction = 48

def get(command):
    return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")

def execute(command):
    subprocess.Popen(["/bin/bash", "-c", command])

xprop_data = get("xprop -root").split()
w_id = xprop_data[xprop_data.index("_NET_ACTIVE_WINDOW(WINDOW):")+4].replace(",", "")
frontmost = w_id[:2]+"0"+w_id[2:]
w_data = [l for l in get("wmctrl -lG").splitlines() if frontmost in l][0].split()
new_G = w_data[2:6]
new_G[1] = str(int(int(new_G[1])-WA_correction))
if arg == "left":
    new_G[2] = str(int(int(new_G[2])/2))      
elif arg == "right":
    new_G[0] = str(int(int(new_G[0])+int(new_G[2])/2))    
    new_G[2] = str(int(int(new_G[2])/2))
elif arg == "up":
    new_G[3] = str(int(int(new_G[3])/2))
elif arg == "down":
    new_G[1] = str(int(int(new_G[1]) + int(new_G[3])/2))
    new_G[3] = str(int(int(new_G[3])/2))

execute("wmctrl -r :ACTIVE: -b remove,maximized_vert,maximized_horz")
execute("wmctrl -ir "+frontmost+" -e 0,"+(",").join(new_G))

(Версия XFCE, также отправленная на gist.gisthub)

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

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

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