Jestem całkiem pewien, że nie da się tego zrobić. Powodem wydaje się być to, że środowiska okienkowe, takie jak GNOME, oczekują, że oprogramowanie to poradzi, a twórcy oprogramowania oczekują, że poradzą sobie z tym środowiska okienkowe.
Devilspie to dobry pomysł, ale dopasowuje wzorce (tzn. Jeśli nazwa == 'google-chrome'). Co się stanie, jeśli otworzę dwie przeglądarki? Oboje zostali przeniesieni do tego samego obszaru roboczego? Mam obszary robocze 6x3 = 18, każdy z określonym wystąpieniem chrome. Pomógłbym, gdybym mógł zmienić nazwę tych programów (np. „Google-chrome1”, „google-chrome2” ...), ale nie mogę znaleźć sposobu, aby to zrobić. Więc musimy użyć wmctrl.
wmctrl jest nieco lepszym b / c oprócz korzystania z tytułów okien, możesz także użyć identyfikatorów okien lub po prostu użyć aktualnie podświetlonego okna. Identyfikatory okien są kłopotliwe z uzyskaniem b / c, ponieważ nie są natychmiast generowane. Patrz poniżej
gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
ale wtedy kontrola nie jest zwracana do wiersza poleceń, dopóki PO GEDIT nie zostanie zakończony. Wszystko, co musimy zrobić, aby to obejść, to &
znak
gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1
ale teraz kontrola jest w 99,999% przypadków zwracana do wiersza poleceń PRZED menedżerami okien uruchamiającymi okno i nie ma możliwości znalezienia identyfikatora okna. Należy skonfigurować bardzo złożoną technikę zapętlania, aby sprawdzić, czy zostały utworzone jakieś nowe okna i zgadnąć, czy jest to okno, którego szukamy.
Sprawdzanie aktywnego okna za pomocą flagi :ACTIVE:
ma ten sam problem, nie czeka na zakończenie działania programu.
wmctrl
uderza mnie jako bardzo dziwny program. Wygląda na to, że został zaprojektowany dla osób bez myszy lub niezdolnych do fizycznego przeciągania programów między obszarami roboczymi.