1 |
#!/usr/bin/python |
2 |
|
3 |
import os |
4 |
import string |
5 |
import re |
6 |
|
7 |
class keymap: |
8 |
mapfind = re.compile("([a-zA-Z0-9])*? 0x([0-9a-z]{1,2})(.*)") |
9 |
|
10 |
def read_keymap(self, path, name): |
11 |
keys = {} |
12 |
km = open(os.path.join(path, name), 'r') |
13 |
for line in km.xreadlines(): |
14 |
if '#' == line[0] or '\n' == line[0]: |
15 |
continue |
16 |
|
17 |
line = line.strip() |
18 |
|
19 |
if "include " == line[:8]: |
20 |
keys.update(self.read_keymap(path, line[8:].strip())) |
21 |
continue |
22 |
elif "map " == line[:4]: |
23 |
self.map = string.atol(line[4:], 16) |
24 |
continue |
25 |
|
26 |
elif "enable_compose" == line[:15]: |
27 |
self.enable_compose = 1 |
28 |
continue |
29 |
else: |
30 |
mo = self.mapfind.search(line) |
31 |
(key, code, rest) = mo.groups() |
32 |
|
33 |
keys[string.atoi(code, 16)] = "%s / %s" % (key, rest) |
34 |
|
35 |
return keys |
36 |
|
37 |
|
38 |
def __init__(self, path, name="common"): |
39 |
self.path = path |
40 |
self.name = name |
41 |
self.map = 0x407 |
42 |
self.enable_compose = 0 |
43 |
self.keys = self.read_keymap(path, name) |
44 |
|
45 |
def __getitem__(self, key): |
46 |
return self.keys.get(key, "Unknown") |