From de52a87ae262f974627b81fe6039a92a59461c83 Mon Sep 17 00:00:00 2001 From: sezanzeb Date: Sun, 21 Mar 2021 02:22:41 +0100 Subject: [PATCH] #66 limiting injected names to 80 chars --- keymapper/injection/injector.py | 13 +++++++++++-- tests/testcases/test_injector.py | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/keymapper/injection/injector.py b/keymapper/injection/injector.py index f421170a..843cbb5a 100644 --- a/keymapper/injection/injector.py +++ b/keymapper/injection/injector.py @@ -295,6 +295,15 @@ class Injector(multiprocessing.Process): loop.stop() return + def get_udef_name(self, name, prefix): + """Make sure the generated name is not longer than 80 chars.""" + max_len = 80 # based on error messages + suffix = 'key-mapper' + remaining_len = max_len - len(suffix) - len(prefix) - 2 + middle = name[:remaining_len] + name = f'{suffix} {middle} {prefix}' + return name + def run(self): """The injection worker that keeps injecting until terminated. @@ -331,7 +340,7 @@ class Injector(multiprocessing.Process): # where mapped events go to. # See the Context docstring on why this is needed. self.context.uinput = evdev.UInput( - name=f'{DEV_NAME} {self.device} mapped', + name=self.get_udef_name(self.device, 'mapped'), phys=DEV_NAME, events=self._construct_capabilities(group['gamepad']) ) @@ -349,7 +358,7 @@ class Injector(multiprocessing.Process): # so don't merge all InputDevices into one UInput device. gamepad = is_gamepad(source) forward_to = evdev.UInput( - name=f'{DEV_NAME} {source.name} forwarded', + name=self.get_udef_name(source.name, 'forwarded'), phys=DEV_NAME, events=self._copy_capabilities(source) ) diff --git a/tests/testcases/test_injector.py b/tests/testcases/test_injector.py index 286ac61e..e383838e 100644 --- a/tests/testcases/test_injector.py +++ b/tests/testcases/test_injector.py @@ -449,6 +449,23 @@ class TestInjector(unittest.TestCase): # it can still debounce stuff though self.assertIsNone(self.injector._event_producer.max_abs) + def test_get_udef_name(self): + self.injector = Injector('device 1', custom_mapping) + suffix = 'mapped' + prefix = 'key-mapper' + expected = f'{prefix} {"a" * (80 - len(suffix) - len(prefix) - 2)} {suffix}' + self.assertEqual(len(expected), 80) + self.assertEqual( + self.injector.get_udef_name('a' * 100, suffix), + expected + ) + + self.injector.device = 'abcd' + self.assertEqual( + self.injector.get_udef_name('abcd', 'forwarded'), + 'key-mapper abcd forwarded' + ) + def test_capabilities_and_uinput_presence(self): custom_mapping.change(Key(EV_KEY, KEY_A, 1), 'c') custom_mapping.change(Key(EV_REL, REL_HWHEEL, 1), 'k(b)')