#!/usr/bin/python import sys import xcb from xcb.xproto import * import xcb.xselinux import xcb.xfixes atom_hash = {} def get_atom_name(name): if not name in atom_hash: cookie = conn.core.GetAtomName(name) atom_hash[name] = str(cookie.reply().name.buf()) return atom_hash[name] def list_selections(): cookie = conn.xselinux.ListSelections() reply = cookie.reply() alist = [] for item in reply.selections: alist.append("%s (%d): %s" % (get_atom_name(item.name), item.name, str(item.object_context.buf()))) alist.sort() for item in alist: print item def win_to_string(window): cookie = conn.core.GetProperty(False, window, wm_name, 0, 0, 900) reply = cookie.reply() return str(reply.value.buf()) def detail_selection(name): cookie = conn.core.GetSelectionOwner(name) owner = cookie.reply().owner print "Selection %s (%d) is owned by %d (%s)" % (get_atom_name(name), name, owner, win_to_string(owner)) def usage(): print "Usage: sellssel [ --list | ... ]" print "\t--list: list all selection instances" print "\t: display ownership information for selection n" conn = xcb.connect() conn.xfixes = conn(xcb.xfixes.key) conn.xselinux = conn(xcb.xselinux.key) conn.xselinux.QueryVersionUnchecked(1, 1) conn.xfixes.QueryVersionUnchecked(4, 0) cookie = conn.core.InternAtom(False, 7, "WM_NAME") wm_name = cookie.reply().atom if len(sys.argv[1:]) == 0: usage() elif sys.argv[1] == '--list': list_selections() else: for arg in sys.argv[1:]: detail_selection(int(arg))