summaryrefslogtreecommitdiff
path: root/genmap.py
diff options
context:
space:
mode:
Diffstat (limited to 'genmap.py')
-rwxr-xr-xgenmap.py37
1 files changed, 29 insertions, 8 deletions
diff --git a/genmap.py b/genmap.py
index 4502ce7d..0de7b503 100755
--- a/genmap.py
+++ b/genmap.py
@@ -36,14 +36,26 @@ import mako.template
# =====
@dataclasses.dataclass(frozen=True)
+class _OtgKey:
+ code: int
+ is_modifier: bool
+
+
[email protected](frozen=True)
+class _X11Key:
+ name: str
+ code: int
+ shift: bool
+
+
[email protected](frozen=True)
class _KeyMapping:
web_name: str
serial_code: int
arduino_name: str
- otg_code: int
- otg_is_modifier: bool
+ otg_key: _OtgKey
at1_code: int
- x11_codes: Set[int]
+ x11_keys: Set[_X11Key]
def _resolve_keysym(name: str) -> int:
@@ -61,15 +73,24 @@ def _read_keymap_in(path: str) -> List[_KeyMapping]:
line = line.strip()
if len(line) > 0 and not line.startswith("#"):
parts = list(map(str.strip, line.split()))
- if len(parts) >= 7:
+ if len(parts) >= 6:
+ otg_is_modifier = parts[3].startswith("^")
+ otg_code = int((parts[3][1:] if otg_is_modifier else parts[3]), 16)
+
+ x11_keys: Set[_X11Key] = set()
+ for x11_name in parts[5].split(","):
+ x11_shift = x11_name.startswith("^")
+ x11_name = (x11_name[1:] if x11_shift else x11_name)
+ x11_code = _resolve_keysym(x11_name)
+ x11_keys.add(_X11Key(x11_name, x11_code, x11_shift))
+
keymap.append(_KeyMapping(
web_name=parts[0],
serial_code=int(parts[1]),
arduino_name=parts[2],
- otg_code=int(parts[3], 16),
- otg_is_modifier=(parts[4].lower() == "m"),
- at1_code=int(parts[5], 16),
- x11_codes=set(map(_resolve_keysym, parts[6].split(","))),
+ otg_key=_OtgKey(otg_code, otg_is_modifier),
+ at1_code=int(parts[4], 16),
+ x11_keys=x11_keys,
))
return keymap