PyXfce


サーバをFedoraCore6にアップデートしたついでに、XfcePythonバインディングである、PyXfceで遊んでみました。
導入は、以下のとおり。(FedoraCore6, i386
パッケージマネージャでlibxfce*をすべてインストール後、以下のコマンド投入。

 wget http://pyxfce.xfce.org/pyxfce-4.4.0.tar.gz
 tar xzf pyxfce-4.4.0.tar.gz
 cd pyxfce-4.4.0
 ./configure
 make
 make install

デフォルトだと、pygtkとかが/usr/bin/python2の方にしか入っていないので、適当にリンクとかはって対処。


で、"Xfce Desktop Environment"のソースで動作を確認してみる。
現在の動作中のプロセスを表示する。Webブラウザを立ち上げたり、ファイルマネージャを立ち上げたりすると、もりもりボタンが増える。

#! /usr/bin/python2

import pygtk
pygtk.require("2.0")
import gtk
from xfce4 import netk

screen = netk.screen_get_default()

class Tasklist(gtk.VBox):
    def __init__(self):
        global screen
        gtk.VBox.__init__(self)
        self._wmap = {}
        self._windows = screen.get_windows()
        screen.connect("window-opened", self.opened_cb)
        screen.connect("window-closed", self.closed_cb)
        for window in self._windows:
            self.opened_cb(screen, window)

    def opened_cb(self, screen, window):
        pid = window.get_pid()
        if pid == None:
            pid = 0

        name = window.get_name()
        w = gtk.Button("%d: %s" % (pid, name))
        w.show()
        self._wmap[window] = w
        self.pack_start(w, True, True)

        window.connect("name-changed", self.window_name_changed_cb)

    def window_name_changed_cb(self, window):
        name = window.get_name()
        if window in self._wmap:
            w = self._wmap[window]
            w.get_children()[0].set_text(name)

    def closed_cb(self, screen, window):
        if window in self._wmap:
            w = self._wmap[window]
            w.destroy()

tl = Tasklist()
tl.show()

w = gtk.Window()
w.add(tl)
w.connect("destroy", lambda x: gtk.main_quit())
w.show()

gtk.main()

現在は、ドキュメントが少ないですが(本家"Xfce Desktop Environment"にすらない?私が探せていないだけ?)、おもしろい素材なのではないかと思います。