Как определить, максимизировано ли окно или минимизировано из сценария удара

У меня есть сценарий удара, который перемещает мои окна от левого экрана до правильного экрана в установке двойного экрана. В настоящее время способ, которым это работает, циклически повторяется через идентификаторы окна, которыми дают xdotool search --onlyvisible --maxdepth 2 --class "" и затем перемещает их направо экраном width. Это уже работает..., если рассматриваемое окно не, максимизирует или минимизированный.

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

Если не возможно сделать через xdotool, должно быть возможно снова использовать идентификатор окна, предоставленный упомянутой выше командой.

11
задан 7 April 2019 в 23:43

1 ответ

Получите информацию о статусе окна

Можно получить информацию (и намного больше) от команды:

xprop -id <window_id>

Для получения то, что Вы конкретно ищете:

xprop -id 0x04c00010 | grep "_NET_WM_STATE(ATOM)"

Вывод будет похож:

_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_HIDDEN

на окне, которое максимизировано (h + v) и минимизировано одновременно, или просто

_NET_WM_STATE(ATOM) =

(или никакой вывод вообще), если ни один из тех не имеет место.

Больше забавы

Конечно, с помощью различных языков, можно использовать Wnck, как в отрывке Python ниже. (отрывок из окна-shuffler). Отрывок производит список, показывая имя окна + также True или False (минимизированный).

#!/usr/bin/env python3
import gi
gi.require_version('Wnck', '3.0')
from gi.repository import Wnck


def get_winlist(scr=None, selecttype=None):
    """
    get the window list. possible args: screen, select_type, in case it is
    already fetched elsewhere. select type is optional, to fetch only
    specific window types.
    """
    if not scr:
        scr = Wnck.Screen.get_default()
        scr.force_update()
    windows = scr.get_windows()
    if selecttype:
        windows = [w for w in windows if check_windowtype(w, selecttype)]
    return windows

wlist = get_winlist()
for w in wlist:
    print(w.get_name(), ",", w.is_maximized())

Вывод похож:

Wnck.Window - Classes - Wnck 3.0 - Mozilla Firefox , True
Postvak IN - vlijm@planet.nl - Mozilla Thunderbird , True
Showtime , False
settingsexample.vala - Visual Studio Code , False
*Niet-opgeslagen document 1 - gedit , False
desktop_weather , False
Tilix: Standaard , False

N.B.

  • xprop будет handel оба шестнадцатеричных числа (как произведено от, например. wmctrl) и десятичное число (как произведено от, например. xdotool) идентификатор одинаково, например, любое использование:

    xprop -id 111371626
    

    или

    xprop -id 0x06a3656a
    
  • Методы не будут работать над Уэйлендом!

11
ответ дан 23 November 2019 в 04:06

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

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