Как я могу автоматически перейти к окну просмотра недавно открытого приложения?
Недавно я обнаружил магию Compiz, которую я сейчас настроил, чтобы открывать несколько приложений в разных рабочих пространствах. У меня вопрос: как заставить переключатель рабочей области автоматически переходить в рабочую область приложения после его открытия?
Примером этого может быть открытие файлового менеджера в рабочей области 2-1, где я нажимаю на файл фильма, который открывает VLC в рабочей области 1-2. Как заставить навигатор рабочей области автоматически переключаться на VLC в рабочей области 1-2?
1 ответ
Сценарий ниже изменит текущий видовой экран на тот, где появляется любое новое окно.
Сценарий не добавляет заметной / измеримой нагрузки (с использованием системного монитора) на вашу систему.
#!/usr/bin/env python3
import subprocess
import time
def get_wlist():
# get the output of wmctrl -lG, try because wmctrl is a bit buggy :)
try:
return subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
def get_wids(currlist):
# get the window ids
return [l.split()[0] for l in currlist.splitlines()]
def get_abspos():
posdate = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
return [int(n) for n in posdate[5].split(",")]
while True:
# wait until the desktop is ready to run wmctrl
wdata1 = get_wlist()
if wdata1:
break
time.sleep(1)
# and then...
wlist1 = get_wids(wdata1)
while True:
time.sleep(2)
wdata2 = get_wlist()
if wdata2:
wlist2 = get_wids(wdata2)
new = [w for w in wlist2 if not w in wlist1]
for item in new:
line = wdata2.splitlines()[wlist2.index(item)].split()
pos = [int(line[n]) for n in [2, 3]]
absposcount = get_abspos()
abspos = [str(pos[0]+absposcount[0]), str(pos[1]+absposcount[1])]
# print(abspos)
subprocess.Popen(["wmctrl", "-o", ",".join(abspos)])
wlist1 = wlist2; wdata1 = wdata2
Как пользоваться
Скрипт нужен
wmctrl
:sudo apt-get install wmctrl
Скопируйте скрипт в пустой файл, сохраните его как
move_toviewport.py
Запустите его командой:
python3 /path/to/move_toviewport.py
Если все работает нормально, добавьте в Startup Applications: Dash > Startup Applications > Add. Добавьте команду выше.
Как это устроено
- Скрипт следит за возможно новыми окнами, используя
wmctrl -lG
- Если появится новое окно, сценарий прочитает свою (абсолютную) позицию в рабочей области охвата, а затем переместится в соответствующее окно просмотра, используя
wmctrl -o x,y