Как я могу автоматически перейти к области просмотра недавно открытого приложения?

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

Пример этого был бы, у меня есть файловый менеджер, открытый в рабочей области 2-1, где я нажимаю на файл ролика, который открыл бы VLC в рабочей области 1-2. Как я заставляю навигатора рабочей области переключаться автоматически на VLC в рабочей области 1-2?

2
задан 12 October 2016 в 12:03

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

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

  1. Потребности сценария wmctrl:

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

  3. Выполните его командой:

    python3 /path/to/move_toviewport.py
    
  4. Если все хорошо работает, добавьте к Приложениям Запуска: Тире> Приложения Запуска> Добавляет. Добавьте команду выше.

Как это работает

  • Сценарий следит возможно недавно за появляющимися окнами, с помощью wmctrl -lG
  • Если будет новое окно, то сценарий считает свою (абсолютную) позицию по рабочей области охвата и впоследствии переместится в соответствующее использование области просмотра wmctrl -o x,y
2
ответ дан 2 December 2019 в 03:58

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

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