loads mappings with modified variations correctly

xkb
sezanzeb 4 years ago committed by sezanzeb
parent 53bc0ee23d
commit 098d6fa395

@ -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

@ -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

@ -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(

Loading…
Cancel
Save