Я совершенно уверен, что это невозможно сделать. Причина заключается в том, что оконные среды, такие как GNOME, ожидают, что программное обеспечение справится с этим, и производители программного обеспечения ожидают, что оконные среды справятся с этим.
Devilspie - хорошая идея, но она выполняет сопоставление с образцом (т.е. если name == 'google-chrome'). Так что же произойдет, если я открою два браузера? Они оба перемещены в одно и то же рабочее пространство? У меня есть 6x3 = 18 рабочих пространств, каждое с определенным экземпляром Chrome. Было бы полезно, если бы я мог переименовать эти программы (например, «google-chrome1», «google-chrome2» ...), но я не могу найти способ сделать это. Поэтому мы должны использовать wmctrl.
wmctrl немного лучше b / c, в дополнение к использованию заголовков окон, вы также можете использовать идентификаторы окон или просто использовать текущее подсвеченное окно. Идентификаторы окон - трудная задача, потому что они не генерируются сразу. См. ниже
gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
но затем управление не возвращается в командную строку, пока не завершится GEDIT. Все, что нам нужно сделать, чтобы обойти это, это поставить &
знак
gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
но теперь управление в 99,999% времени возвращается в командную строку ДО того, как оконные менеджеры запустят окно, и нет способа найти идентификатор окна. Нужно установить очень сложную технику зацикливания, чтобы проверить, были ли созданы какие-либо новые окна, и угадать, ищем ли мы это окно.
Проверка активного окна через флаг :ACTIVE:
имеет ту же проблему, она не ждет завершения работы программы.
wmctrl
мне кажется очень странной программой Похоже, что он был разработан для людей без мыши или неспособных физически перетаскивать свои программы через рабочие пространства.