def test_keymap_new_from_buffer(self): ctx = xkb.Context() test_data = array.array('b', sample_keymap_bytes) km = ctx.keymap_new_from_buffer(test_data) self.assertIsNotNone(km) self.assertEqual(km.load_method, "buffer") test_data.extend([0] * 10) length = len(sample_keymap_bytes) km = ctx.keymap_new_from_buffer(test_data, length=length) self.assertIsNotNone(km)
def test_keymap_new_from_names_with_args(self): # NB this test requires that suitable keymaps are installed # wherever xkbcommon expects to find them ctx = xkb.Context(no_environment_names=True) km = ctx.keymap_new_from_names(rules="evdev", model="pc105", layout="gb", variant="dvorak", options="terminate:ctrl_alt_bksp") self.assertIsNotNone(km)
def test_set_log_handler(self): messages = [] def handler(context, level, message): messages.append(message) ctx = xkb.Context() ctx.set_log_level(xkb.lib.XKB_LOG_LEVEL_DEBUG) ctx.set_log_verbosity(10) ctx.set_log_fn(handler) km = ctx.keymap_new_from_string(sample_keymap_string) self.assertNotEqual(len(messages), 0)
def _server_new_keyboard(self, input_device: InputDevice) -> None: keyboard = input_device.keyboard xkb_context = xkb.Context() keymap = xkb_context.keymap_new_from_names() keyboard.set_keymap(keymap) keyboard.set_repeat_info(25, 600) keyboard_handler = KeyboardHandler(keyboard, input_device, self) self.keyboards.append(keyboard_handler) self._seat.set_keyboard(input_device)
def __init__(self, core: Core, device: InputDevice): self.core = core self.device = device self.qtile = core.qtile self.seat = core.seat self.keyboard = device.keyboard self.grabbed_keys = core.grabbed_keys xkb_context = xkb.Context() self.keyboard.set_keymap(xkb_context.keymap_new_from_names()) self.keyboard.set_repeat_info(25, 600) self.add_listener(self.keyboard.modifiers_event, self._on_modifier) self.add_listener(self.keyboard.key_event, self._on_key) self.add_listener(self.keyboard.destroy_event, self._on_destroy)
def __init__(self, core: Core, device: InputDevice): self.core = core self.device = device self.qtile = core.qtile self.seat = core.seat self.keyboard = device.keyboard self.grabbed_keys = core.grabbed_keys self.keyboard.set_repeat_info(25, 600) self.xkb_context = xkb.Context() self._keymaps: Dict[Tuple[Optional[str], ...], xkb.Keymap] = {} self.set_keymap(None, None, None) self.add_listener(self.keyboard.modifiers_event, self._on_modifier) self.add_listener(self.keyboard.key_event, self._on_key) self.add_listener(self.keyboard.destroy_event, self._on_destroy)
def test_keymap_new_from_file_mmap(self): ctx = xkb.Context() self._sample_keymap_file.seek(0) km = ctx.keymap_new_from_file(self._sample_keymap_file) self.assertIsNotNone(km, None) self.assertEqual(km.load_method, "mmap_file")
def test_keymap_new_from_names(self): ctx = xkb.Context() km = ctx.keymap_new_from_names() self.assertIsNotNone(km)
def test_set_log_verbosity(self): ctx = xkb.Context() self.assertEqual(ctx.get_log_verbosity(), 0) ctx.set_log_verbosity(10) self.assertEqual(ctx.get_log_verbosity(), 10)
def test_set_log_level(self): ctx = xkb.Context() self.assertEqual(ctx.get_log_level(), xkb.lib.XKB_LOG_LEVEL_ERROR) ctx.set_log_level(xkb.lib.XKB_LOG_LEVEL_DEBUG) self.assertEqual(ctx.get_log_level(), xkb.lib.XKB_LOG_LEVEL_DEBUG)
def test_num_include_paths(self): ctx = xkb.Context() default_num_include_paths = ctx.num_include_paths() ctx.include_path_append(testdir) self.assertEqual(ctx.num_include_paths(), default_num_include_paths + 1)
def test_keymap_new_from_file_no_mmap(self): ctx = xkb.Context() memfile = BytesIO(sample_keymap_bytes) km = ctx.keymap_new_from_file(memfile) self.assertIsNotNone(km) self.assertEqual(km.load_method, "read_file")
def test_include_path_append_file(self): ctx = xkb.Context() with self.assertRaises(xkb.XKBPathError): ctx.include_path_append(testfile) self.assertNotIn(testfile, ctx.include_path())
def ldml_escape_if_necessary(char: str) -> str: if len(char) != 1: return char if unicodedata.category(char) == "Cc": return ldml_escape(char) return char def ldml_escape(char: str) -> str: return '\\u{' + str(hex(ord(char)))[2:].zfill(4) + '}' from xkbcommon import xkb if os.environ.get("XKB_CONFIG_ROOT"): xkb_context = xkb.Context(no_default_includes=True) xkb_context.include_path_append(os.environ.get("XKB_CONFIG_ROOT")) else: xkb_context = xkb.Context() def ldml(layout: LayoutDetails, rules=None, model=None, options=None) -> etree._ElementTree: # https://unicode.org/reports/tr35/tr35-keyboards.html xkb_keymap = xkb_context.keymap_new_from_names(rules, model, layout.layout, layout.variant, options) keyboard = etree.Element("keyboard") # https://unicode.org/reports/tr35/tr35-keyboards.html#Keyboard_IDs # https://unicode.org/reports/tr35/tr35.html#Identifiers
def test_default_includes(self): ctx = xkb.Context(no_default_includes=True) self.assertEqual(len(list(ctx.include_path())), 0)
def test_create(self): ctx = xkb.Context()
def setUpClass(cls): cls._ctx = xkb.Context() cls.km = cls._ctx.keymap_new_from_string(sample_keymap_string) cls.lock = cls.km.mod_get_index("Lock") cls.numlock = cls.km.mod_get_index("NumLock") cls.badmod = cls.km.num_mods()
def setUpClass(cls): cls._ctx = xkb.Context() cls.km = cls._ctx.keymap_new_from_string(sample_keymap_string)
def test_include_path_append_does_not_exist(self): ctx = xkb.Context() with self.assertRaises(xkb.XKBPathError): ctx.include_path_append(nonexistent) self.assertNotIn(nonexistent, ctx.include_path())
def test_include_path_append_exists(self): ctx = xkb.Context() ctx.include_path_append(testdir) self.assertIn(testdir, ctx.include_path())
def test_keymap_new_from_string(self): ctx = xkb.Context() km = ctx.keymap_new_from_string(sample_keymap_string) self.assertIsNotNone(km, None) self.assertEqual(km.load_method, "string")