Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
    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)
Ejemplo n.º 7
0
 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")
Ejemplo n.º 8
0
 def test_keymap_new_from_names(self):
     ctx = xkb.Context()
     km = ctx.keymap_new_from_names()
     self.assertIsNotNone(km)
Ejemplo n.º 9
0
 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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
 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)
Ejemplo n.º 12
0
 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")
Ejemplo n.º 13
0
 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())
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
 def test_default_includes(self):
     ctx = xkb.Context(no_default_includes=True)
     self.assertEqual(len(list(ctx.include_path())), 0)
Ejemplo n.º 16
0
 def test_create(self):
     ctx = xkb.Context()
Ejemplo n.º 17
0
 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()
Ejemplo n.º 18
0
 def setUpClass(cls):
     cls._ctx = xkb.Context()
     cls.km = cls._ctx.keymap_new_from_string(sample_keymap_string)
Ejemplo n.º 19
0
 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())
Ejemplo n.º 20
0
 def test_include_path_append_exists(self):
     ctx = xkb.Context()
     ctx.include_path_append(testdir)
     self.assertIn(testdir, ctx.include_path())
Ejemplo n.º 21
0
 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")