Python: как переключаться между рабочими пространствами с помощью Xlib? - PullRequest
4 голосов
/ 09 марта 2010

Как мне переключаться между рабочими пространствами моего оконного менеджера, используя Python с модулем Xlib?

Это моя самая многообещающая попытка:

#!/usr/bin/python

from Xlib import X, display, error, Xatom, Xutil
import Xlib.protocol.event

screen = Xlib.display.Display().screen()
root   = screen.root


def sendEvent(win, ctype, data, mask=None):
        """ Send a ClientMessage event to the root """
        data = (data+[0]*(5-len(data)))[:5]
        ev = Xlib.protocol.event.ClientMessage(window=win, client_type=ctype, data=(32,(data)))

        if not mask:
            mask = (X.SubstructureRedirectMask|X.SubstructureNotifyMask)
        root.send_event(ev, event_mask=mask)


# switch to desktop 2
sendEvent(root, Xlib.display.Display().intern_atom("_NET_CURRENT_DESKTOP"), [2])

Приведенный выше код бесстыдно похищен из разных мест в источнике PyPanel; к сожалению, он ничего не делает, даже не генерирует предупреждение / исключение. Я что-то здесь упускаю?

Я использую Python и PyGTK. Xlib кажется правильным выбором для переключения рабочих столов. Я не собираюсь использовать wnck (глючный модуль Python) или аналогичный, но я все равно буду благодарен за любые указатели.

Могу добавить, что это моя первая попытка написания приложения на Python с использованием Xlib (или PyGTK).

1 Ответ

2 голосов
/ 09 марта 2010

Очевидно, вам нужно поработать над тем же объектом Display, а затем flush в конце. Что-то вроде:

display = Xlib.display.Display()
screen = display.screen()
root = screen.root

# ...

sendEvent(root, display.intern_atom("_NET_CURRENT_DESKTOP"), [1, X.CurrentTime])
display.flush()

Кредит: идея от очень похожая тема (которая почти работает).

P.S. Кстати, номер рабочего стола начинается с 0.

...