У меня есть два окна: A и B. Возможно ли каким-то образом связать два окна вместе, так что переключение на A также вызывает B, или переключение на B также увеличивает A?
Я понимаю, Рабочие пространства - альтернативный вариант, но было интересно, возможно ли это также?
. Решение ниже позволит вам выбрать любую комбинацию из двух, трех или более окон, которые будут объединены и подняты как одна с сочетанием клавиш.
Скрипт выполняет свою работу с тремя аргументами:
add
, чтобы добавить активное окно к группе
raise
, чтобы поднять группу set
[ f3], чтобы очистить группу, готов к определению новой группы
#!/usr/bin/env python3
import sys
import os
import subprocess
wlist = os.path.join(os.environ["HOME"], ".windowlist")
arg = sys.argv[1]
if arg == "add":
active = subprocess.check_output([
"xdotool", "getactivewindow"
]).decode("utf-8").strip()
try:
currlist = open(wlist).read()
except FileNotFoundError:
currlist = []
if not active in currlist:
open(wlist, "a").write(active + "\n")
elif arg == "raise":
group = [w.strip() for w in open(wlist).readlines()]
[subprocess.call(["wmctrl", "-ia", w]) for w in group]
elif arg == "clear":
os.remove(wlist)
sudo apt-get install wmctrl xdotool
Скопируйте сценарий выше в пустой файл, сохраните его как groupwindows.py. Запустите сценарий: откройте два окна терминала, запустите команду: python3 /absolute/path/to/groupwindows.py add
в обоих из них. Закройте их другими окнами (или минимизируйте их). Откройте третье окно терминала, запустите команду: python3 /absolute/path/to/groupwindows.py raise
Первые два окна будут подняты как один. Если все работает нормально, создайте три пользовательских сочетания клавиш: Выберите: Системные настройки> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте приведенные ниже команды к трем отдельным ярлыкам: в моей системе я использовал: Alt + A, выполнив команду: python3 /absolute/path/to/groupwindows.py add
..., чтобы добавить окно в группу. Alt + R, выполнив команду: python3 /absolute/path/to/groupwindows.py raise
..., чтобы поднять группу. Alt + C, выполнив команду: python3 /absolute/path/to/groupwindows.py clear
..., чтобы очистить группу Скрипт работает довольно просто:
При запуске с Аргумент add, скрипт хранит / добавляет идентификатор окна активного окна в скрытый файл ~/.windowlist. Когда он запускается с аргументом raise, сценарий читает файл, он вызывает окна в списке с помощью команды:wmctrl -ia <window_id>
При запуске с аргументом clear скрипт удаляет скрытый файл ~/.windowlist. wmctrl -ia <window_id>
Как уже упоминалось, сценарий выше позволяет добавлять окна в любое время к сгруппированным окнам. Версия ниже также позволяет любому любому из окон (в любое время) из сгруппированного списка:
#!/usr/bin/env python3
import sys
import os
import subprocess
wlist = os.path.join(os.environ["HOME"], ".windowlist")
arg = sys.argv[1]
# add windows to the group
if arg == "add":
active = subprocess.check_output([
"xdotool", "getactivewindow"
]).decode("utf-8").strip()
try:
currlist = open(wlist).read()
except FileNotFoundError:
currlist = []
if not active in currlist:
open(wlist, "a").write(active + "\n")
# delete window from the group
if arg == "delete":
try:
currlist = [w.strip() for w in open(wlist).readlines()]
except FileNotFoundError:
pass
else:
currlist.remove(subprocess.check_output([
"xdotool", "getactivewindow"]).decode("utf-8").strip())
open(wlist, "w").write("\n".join(currlist)+"\n")
# raise the grouped windows
elif arg == "raise":
group = [w.strip() for w in open(wlist).readlines()]
[subprocess.call(["wmctrl", "-ia", w]) for w in group]
# clear the grouped window list
elif arg == "clear":
os.remove(wlist)
Дополнительным аргументом для запуска скрипта является delete, поэтому :
python3 /absolute/path/to/groupwindows.py delete
удаляет активное окно из сгруппированных окон. Чтобы запустить эту команду, в моей системе я установил Alt + D как ярлык.