Spaces:
Runtime error
Runtime error
# Xlib.XK -- X keysym defs | |
# | |
# Copyright (C) 2000 Peter Liljenberg <petli@ctrl-c.liu.se> | |
# | |
# This library is free software; you can redistribute it and/or | |
# modify it under the terms of the GNU Lesser General Public License | |
# as published by the Free Software Foundation; either version 2.1 | |
# of the License, or (at your option) any later version. | |
# | |
# This library is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
# See the GNU Lesser General Public License for more details. | |
# | |
# You should have received a copy of the GNU Lesser General Public | |
# License along with this library; if not, write to the | |
# Free Software Foundation, Inc., | |
# 59 Temple Place, | |
# Suite 330, | |
# Boston, MA 02111-1307 USA | |
# | |
# This module defines some functions for working with X keysyms as well | |
# as a modular keysym definition and loading mechanism. See the keysym | |
# definition modules in the Xlib/keysymdef directory. | |
from Xlib.X import NoSymbol | |
def string_to_keysym(keysym): | |
'''Return the (16 bit) numeric code of keysym. | |
Given the name of a keysym as a string, return its numeric code. | |
Don't include the 'XK_' prefix, just use the base, i.e. 'Delete' | |
instead of 'XK_Delete'.''' | |
return globals().get('XK_' + keysym, NoSymbol) | |
def load_keysym_group(group): | |
'''Load all the keysyms in group. | |
Given a group name such as 'latin1' or 'katakana' load the keysyms | |
defined in module 'Xlib.keysymdef.group-name' into this XK module.''' | |
if '.' in group: | |
raise ValueError('invalid keysym group name: %s' % group) | |
G = globals() #Get a reference to XK.__dict__ a.k.a. globals | |
#Import just the keysyms module. | |
mod = __import__('Xlib.keysymdef.%s' % group, G, locals(), [group]) | |
#Extract names of just the keysyms. | |
keysyms = [n for n in dir(mod) if n.startswith('XK_')] | |
#Copy the named keysyms into XK.__dict__ | |
for keysym in keysyms: | |
## k = mod.__dict__[keysym]; assert k == int(k) #probably too much. | |
G[keysym] = mod.__dict__[keysym] | |
#And get rid of the keysym module. | |
del mod | |
def _load_keysyms_into_XK(mod): | |
'''keysym definition modules need no longer call Xlib.XK._load_keysyms_into_XK(). | |
You should remove any calls to that function from your keysym modules.''' | |
pass | |
# Always import miscellany and latin1 keysyms | |
load_keysym_group('miscellany') | |
load_keysym_group('latin1') | |
def keysym_to_string(keysym): | |
'''Translate a keysym (16 bit number) into a python string. | |
This will pass 0 to 0xff as well as XK_BackSpace, XK_Tab, XK_Clear, | |
XK_Return, XK_Pause, XK_Scroll_Lock, XK_Escape, XK_Delete. For other | |
values it returns None.''' | |
# ISO latin 1, LSB is the code | |
if keysym & 0xff00 == 0: | |
return chr(keysym & 0xff) | |
if keysym in [XK_BackSpace, XK_Tab, XK_Clear, XK_Return, | |
XK_Pause, XK_Scroll_Lock, XK_Escape, XK_Delete]: | |
return chr(keysym & 0xff) | |
# We should be able to do these things quite automatically | |
# for latin2, latin3, etc, in Python 2.0 using the Unicode, | |
# but that will have to wait. | |
return None | |