Strona 1 z 2

Potrzebny skrypt sprawdzający czy któreś okno jest zmaksymalizowane

: 12 maja 2014, 22:33
autor: szczemp
Potrzebny skrypt sprawdzający czy któreś okno jest zmaksymalizowane.
Nie wiem czy jest jakaś komenda, którą wywołam z terminala i zwróci mi jakąś wartość, jeśli któreś z uruchomionych okien zajmuje cały ekran.

: 12 maja 2014, 23:20
autor: Rafal_F
Wszystko zależy od menedżera okien, ale spróbuj tak: polecenie

Kod: Zaznacz cały

wmctrl -l
listuje wszystkie okna, z tej listy wyciągamy ID (to wartość z pierwszej kolumny). Wyżej otrzymane ID wklejamy do programu xprop:

Kod: Zaznacz cały

xprop -id ID _NET_WM_STATE
i analizujemy wynik.
Przykład:

Kod: Zaznacz cały

$ wmctrl -l
0x02200001  0    N/A mplayer2
Jak widać to okno mplayera, i teraz:

Kod: Zaznacz cały

$ xprop -id 0x02200001 _NET_WM_STATE
_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ
To znaczy, że okno jest zmaksymalizowane w poziomie i w pionie. Inne wartości to:
  • _NET_WM_STATE(ATOM) = _NET_WM_STATE_FULLSCREEN - okno w trybie pełnoekranowym.
  • _NET_WM_STATE(ATOM) = _NET_WM_STATE_HIDDEN - okno zminimalizowane do paska.
  • _NET_WM_STATE(ATOM) = - (brak parametru) - żadne z powyższych, zwykłe okno.
Parametry mogą być łączone, np: _NET_WM_STATE(ATOM) = _NET_WM_STATE_HIDDEN, _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ - okno zmaksymalizowane i zminimalizowane (tak wiem brzmi bez sensu).

: 12 maja 2014, 23:21
autor: dedito

: 12 maja 2014, 23:27
autor: Rafal_F
Nie wiem jak ten skrypt zadziała bo nie chce mi się sprawdzać, ale fullscreen to co innego niż zmaksymalizowane okno. Fullscreen to pełny ekran - przykrywa też paski narzędziowe, czego maksymalizacja nie robi.

: 13 maja 2014, 11:12
autor: dedito
Też nie sprawdzałem tego skryptu. Opiera się to na narzędziu xdotool http://www.semicomplete.com/projects/xdotool/ i z tego co widzę ten skrypt sprawdza, czy któreś okno jest aktywne więc nie jest to ani full-screen ani maksymalizacja.
Przypuszczam, że to narzędzie potrafi sprawdzić też inne stany okna co sprowadzi się do lekkiej przeróbki skryptu.

: 13 maja 2014, 13:25
autor: Rafal_F
Okno aktywne może być fullscreen, albo zmaksymalizowane (o ile dobrze rozumiem znaczenie aktywne). A skrypt pobiera rozmiary okna i porównuje z rozmiarami ekranu (w pikselach). xwininfo nie podaje info o stanie okna. W moim przypadku zmaksymalizowana opera ma rozmiar 1280x982 przy rozdzielczości ekranu 1280x1024. Problemem są jak już wcześniej napisałem paski narzędzi (wszelkiego rodzaju docki), które rezerwują sobie pewien fragment ekranu. Żeby znaleźć zmaksymalizowane okno w ten sposób należałoby znaleźć wszystkie paski narzędzi, odjąć ich sumaryczny rozmiar od rozmiaru ekranu i dopiero porównać z rozmiarem okna. Dlatego jak już wcześniej napisałem ten skrypt nadaje się do określania czy okno jest w fullscreen, a jego modyfikacja wcale nie jest taka łatwa.

: 13 maja 2014, 14:53
autor: dedito
No faktycznie skrypt porównuje aktualną rozdzielczość pulpitu z rozdzielczością wszystkich okien (tak chyba należy w tym przypadku rozumieć aktywne okna jako listę wszystkich okien obecnie wyświetlanych).
Modyfikacja faktycznie może nie być taka łatwa.

: 13 maja 2014, 15:21
autor: Rafal_F
Ja rozumiem okno aktywne jako okno na którym aktualnie się pracuje. Zwłaszcza, że w tym skrypcie nie ma żadnej pętli, to jest tylko jedno porównanie (jedno okno).

: 13 maja 2014, 16:03
autor: dedito
Ok, zgadza się.

: 14 maja 2014, 08:06
autor: szczemp
Całkiem sprawnie mi poszło. Dzięki Wam.
Jest jeszcze inna sprawa, raczej nie związana z zmaksymalizowanymi oknami. Nie wiem czy warto zakładać nową dyskusję na ten temat, więc zapytam tu. Jak uznacie, że warto, to rozdzielcie tematy.
Mój ojciec jest przyzwyczajony do docka po prawej stronie. Instalowanie zewnętrznych aplikacji nie ma sensu, bo nie potrzebuje tych wszystkich opcji i sprzęt też nie jest dość mocny żeby tego nie odczuł. Zrobiłem mu po prawej stronie zwykły panel. Ale ubzdurało mu się zwijanie i rozwijanie tego panelu skrótem klawiszowym. Znowu potrzeba jakiś program konsolowy, co zmieni szerokość panelu. Albo przynajmniej opcje 'zawsze widoczny' i 'autoukrywanie'. Naturalnie debian i kde.