From 70500165ca3a051e74cfebf2a501c0558a62d830 Mon Sep 17 00:00:00 2001 From: sezanzeb Date: Mon, 16 Nov 2020 16:52:43 +0100 Subject: [PATCH] loads mappings with modified variations correctly --- keymapper/X.py | 10 +++++++--- keymapper/gtk/window.py | 1 - tests/testcases/config.py | 14 +++++++++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/keymapper/X.py b/keymapper/X.py index bfef5050..1ee4acf0 100644 --- a/keymapper/X.py +++ b/keymapper/X.py @@ -330,11 +330,15 @@ def parse_symbols_file(device, preset): with open(path, 'r') as f: # from "key <12> { [ 1 ] };" extract 12 and 1, + # from "key <12> { [ a, A ] };" extract 12 and [a, A] # avoid lines that start with special characters - # (might be comments) - result = re.findall(r'\n\s+?key <(.+?)>.+?\[\s+(\w+)', f.read()) - logger.debug('Found %d mappings in this preset', len(result)) + # (might be comments)ś + content = f.read() + result = re.findall(r'\n\s+?key <(.+?)>.+?\[\s+(.+?)\s+\]', content) + logger.debug('Found %d mappings in preset "%s"', len(result), preset) for keycode, character in result: + if ', ' in character: + character = [char.strip() for char in character.split(',')] custom_mapping.change(None, int(keycode), character) custom_mapping.changed = False diff --git a/keymapper/gtk/window.py b/keymapper/gtk/window.py index 4074a2db..ffc18fcb 100755 --- a/keymapper/gtk/window.py +++ b/keymapper/gtk/window.py @@ -36,7 +36,6 @@ from keymapper.presets import get_presets, find_newest_preset, \ from keymapper.logger import logger from keymapper.linux import get_devices from keymapper.gtk.row import Row -from keymapper.gtk.loading import LoadingDialog from keymapper.gtk.unsaved import unsaved_changes_dialog, GO_BACK diff --git a/tests/testcases/config.py b/tests/testcases/config.py index 6e5e21a8..677408dd 100644 --- a/tests/testcases/config.py +++ b/tests/testcases/config.py @@ -25,7 +25,7 @@ import shutil from keymapper.X import custom_mapping, generate_symbols, \ create_identity_mapping, create_setxkbmap_config, \ - get_preset_name, create_default_symbols + get_preset_name, create_default_symbols, parse_symbols_file from keymapper.paths import get_usr_path, KEYCODES_PATH, USERS_SYMBOLS from test import tmp @@ -38,6 +38,8 @@ class TestConfig(unittest.TestCase): custom_mapping.change(None, 11, 'KP_1') custom_mapping.change(None, 12, 3) custom_mapping.change(None, 13, ['a', 'A', 'NoSymbol', 3]) + self.assertEqual(custom_mapping.get(12), '3') + self.assertEqual(custom_mapping.get(13), 'a, A, NoSymbol, 3') if os.path.exists(tmp): shutil.rmtree(tmp) @@ -57,10 +59,20 @@ class TestConfig(unittest.TestCase): self.assertIn('key <10> { [ a ] };', content) self.assertIn('key <11> { [ KP_1 ] };', content) self.assertIn('key <12> { [ 3 ] };', content) + self.assertIn('key <13> { [ a, A, NoSymbol, 3 ] };', content) self.assertIn('include "key-mapper/user/default"', content) self.assertIn(get_preset_name('device_a', 'preset_b'), content) + # it should be loaded correctly after saving + parse_symbols_file('device_a', 'preset_b') + self.assertIsNone(custom_mapping.get(9)) + self.assertEqual(custom_mapping.get(10), 'a') + self.assertEqual(custom_mapping.get(11), 'KP_1') + self.assertEqual(custom_mapping.get(12), '3') + self.assertEqual(custom_mapping.get(13), 'a, A, NoSymbol, 3') + self.assertIsNone(custom_mapping.get(14)) + def test_default_symbols(self): # keycodes are missing self.assertRaises(