Browse Source

added rescriptoon._keys.keysym_to_label

Fabian Peter Hammerle 4 years ago
parent
commit
cb8a64d7b9
2 changed files with 44 additions and 0 deletions
  1. 18 0
      rescriptoon/_keys.py
  2. 26 0
      tests/_keys_test.py

+ 18 - 0
rescriptoon/_keys.py

@@ -0,0 +1,18 @@
+import typing
+
+from Xlib import XK
+
+_KEYSYM_LABELS = {
+    # pylint: disable=no-member; false positive
+    XK.XK_Control_L: "left ctrl",
+    XK.XK_Control_R: "right ctrl",
+    XK.XK_Down: "↓",
+    XK.XK_Left: "→",
+    XK.XK_Right: "←",
+    XK.XK_Up: "↑",
+    XK.XK_space: "␣",
+}
+
+
+def keysym_to_label(keysym: int) -> typing.Optional[str]:
+    return _KEYSYM_LABELS.get(keysym, XK.keysym_to_string(keysym))

+ 26 - 0
tests/_keys_test.py

@@ -0,0 +1,26 @@
+import pytest
+import rescriptoon._keys
+from Xlib import XK
+
+
+@pytest.mark.parametrize(
+    ("keysym", "label"),
+    [
+        # pylint: disable=no-member; false positive
+        (XK.XK_Control_L, "left ctrl"),
+        (XK.XK_Control_R, "right ctrl"),
+        (XK.XK_Down, "↓"),
+        (XK.XK_Left, "→"),
+        (XK.XK_Right, "←"),
+        (XK.XK_Up, "↑"),
+        (XK.XK_a, "a"),
+        (XK.XK_grave, "`"),
+        (XK.XK_s, "s"),
+        (XK.XK_semicolon, ";"),
+        (XK.XK_slash, "/"),
+        (XK.XK_space, "␣"),
+        (XK.XK_w, "w"),
+    ],
+)
+def test_keysym_to_label(keysym, label):
+    assert rescriptoon._keys.keysym_to_label(keysym) == label