Пример #1
0
 def __init__(self, conn, keys=None):
     if keys is None:
         keys = {}
     self.numlockmask = get_numlock_mask(conn)
     self.syms = Keysyms(conn)
     for keystr in keys:
         self.bind(keystr, keys[keystr])
Пример #2
0
def get_numlock_mask(conn):
    syms = Keysyms(conn)
    numlock = syms.get_keycode(keysyms['Num_Lock'])
    modmap = conn.core.GetModifierMapping().reply()
    for i in range(8):
        for j in range(modmap.keycodes_per_modifier):
            keycode = modmap.keycodes[i * modmap.keycodes_per_modifier + j]
            if keycode == numlock:
                return MASKS[i]
    return 0
Пример #3
0
def get_numlock_mask(conn):
    syms = Keysyms(conn)
    numlock = syms.get_keycode(keysyms['Num_Lock'])
    modmap = conn.core.GetModifierMapping().reply()
    for i in range(8):
        for j in range(modmap.keycodes_per_modifier):
            keycode = modmap.keycodes[i * modmap.keycodes_per_modifier + j]
            if keycode == numlock:
                return MASKS[i]
    return 0
Пример #4
0
 def __init__(self, conn, keys=None):
     if keys is None:
         keys = {}
     self.numlockmask = get_numlock_mask(conn)
     self.syms = Keysyms(conn)
     for keystr in keys:
         self.bind(keystr, keys[keystr])
Пример #5
0
class Keymap(object):
    bindings = {}

    def __init__(self, conn, keys=None):
        if keys is None:
            keys = {}
        self.numlockmask = get_numlock_mask(conn)
        self.syms = Keysyms(conn)
        for keystr in keys:
            self.bind(keystr, keys[keystr])

    def bind(self, keystr, action):
        key = parse(keystr)
        self.bindings[key] = action
        print "bound %s" % keystr

    def grab(self, conn, root):
        modifiers = [
            0, ModMask.Lock, self.numlockmask, self.numlockmask | ModMask.Lock
        ]
        for key in self.bindings:
            for mod in modifiers:
                keycode = self.syms.get_keycode(key[1])
                conn.core.GrabKey(True, root, key[0] | mod, keycode,
                                  GrabMode.Async, GrabMode.Async)

    def ungrab(self, conn, root):
        modifiers = [
            0, ModMask.Lock, self.numlockmask, self.numlockmask | ModMask.Lock
        ]
        for key in self.bindings:
            for mod in modifiers:
                conn.core.UngrabKey(key[1], root, key[0] | mod)

    def handle(self, **kw):
        keypress = kw['event']
        keysym = self.syms.get_keysym(keypress.detail, 0)
        mask = self.cleanmask(keypress.state)
        for key in self.bindings:
            if mask == self.cleanmask(key[0]) and keysym == key[1]:
                self.bindings[key]()

    def cleanmask(self, mask):
        return mask & ~(self.numlockmask | ModMask.Lock)
Пример #6
0
class Keymap(object):
    bindings = {}

    def __init__(self, conn, keys=None):
        if keys is None:
            keys = {}
        self.numlockmask = get_numlock_mask(conn)
        self.syms = Keysyms(conn)
        for keystr in keys:
            self.bind(keystr, keys[keystr])

    def bind(self, keystr, action):
        key = parse(keystr)
        self.bindings[key] = action
        print "bound %s" % keystr

    def grab(self, conn, root):
        modifiers = [0, ModMask.Lock, self.numlockmask, 
                     self.numlockmask | ModMask.Lock]
        for key in self.bindings:
            for mod in modifiers:
                keycode = self.syms.get_keycode(key[1])
                conn.core.GrabKey(True, root, key[0] | mod, keycode,
                                  GrabMode.Async, GrabMode.Async)

    def ungrab(self, conn, root):
        modifiers = [0, ModMask.Lock, self.numlockmask, 
                     self.numlockmask | ModMask.Lock]
        for key in self.bindings:
            for mod in modifiers:
                conn.core.UngrabKey(key[1], root, key[0] | mod)

    def handle(self, **kw):
        keypress = kw['event']
        keysym = self.syms.get_keysym(keypress.detail, 0)
        mask = self.cleanmask(keypress.state)
        for key in self.bindings:
            if mask == self.cleanmask(key[0]) and keysym == key[1]:
                self.bindings[key]()

    def cleanmask(self, mask):
        return mask & ~(self.numlockmask | ModMask.Lock)