supports modifier-key combinations

xkb
sezanzeb 4 years ago committed by sezanzeb
parent b96997630c
commit d5d86960bf

@ -51,10 +51,6 @@ if __name__ == '__main__':
window = Window() window = Window()
if getpass.getuser() != 'root' and 'unittest' not in sys.modules.keys(): if getpass.getuser() != 'root' and 'unittest' not in sys.modules.keys():
# TODO add a polkit thing like
# https://gitlab.manjaro.org/applications/pamac/-/tree/master/data/polkit
# https://gitlab.manjaro.org/applications/pamac/-/blob/master/src/daemon.vala#L260
# does this require a dependency?
logger.error('Needs to run with sudo') logger.error('Needs to run with sudo')
ErrorDialog( ErrorDialog(
'Error', 'Error',

@ -354,7 +354,7 @@ def create_default_symbols():
defaults = Mapping() defaults = Mapping()
for keycode, characters in mappings: for keycode, characters in mappings:
# TODO support an array of values in mapping and test it # TODO support an array of values in mapping and test it
defaults.change(None, int(keycode), characters.split()[0]) defaults.change(None, int(keycode), characters.split())
contents = generate_symbols(DEFAULT_SYMBOLS_NAME, None, defaults) contents = generate_symbols(DEFAULT_SYMBOLS_NAME, None, defaults)

@ -52,7 +52,9 @@ class Mapping:
previous_keycode : int or None previous_keycode : int or None
If None, will not remove any previous mapping. If None, will not remove any previous mapping.
new_keycode : int new_keycode : int
character : string character : string or string[]
If an array of strings, will put something like { [ a, A ] };
into the symbols file.
""" """
try: try:
new_keycode = int(new_keycode) new_keycode = int(new_keycode)
@ -67,6 +69,9 @@ class Mapping:
logger.error('Cannot use %s as keycode', previous_keycode) logger.error('Cannot use %s as keycode', previous_keycode)
return False return False
if isinstance(character, list):
character = ', '.join([str(c) for c in character])
if new_keycode and character: if new_keycode and character:
self._mapping[new_keycode] = str(character) self._mapping[new_keycode] = str(character)
if new_keycode != previous_keycode: if new_keycode != previous_keycode:

@ -37,6 +37,7 @@ class TestConfig(unittest.TestCase):
custom_mapping.change(None, 10, 'a') custom_mapping.change(None, 10, 'a')
custom_mapping.change(None, 11, 'KP_1') custom_mapping.change(None, 11, 'KP_1')
custom_mapping.change(None, 12, 3) custom_mapping.change(None, 12, 3)
custom_mapping.change(None, 13, ['a', 'A', 'NoSymbol', 3])
if os.path.exists(tmp): if os.path.exists(tmp):
shutil.rmtree(tmp) shutil.rmtree(tmp)
@ -74,11 +75,15 @@ class TestConfig(unittest.TestCase):
with open(get_usr_path('default'), 'r') as f: with open(get_usr_path('default'), 'r') as f:
content = f.read() content = f.read()
self.assertNotIn('include', content) self.assertNotIn('include', content)
# this is pretty much the same on every keyboard # this is pretty much the same on every keyboard.
self.assertIn('key <10> { [ 1', content) # The default config should also contain the modified keys, but
self.assertIn('key <11> { [ 2', content) # since they are different in every country just check for the
self.assertIn('key <12> { [ 3', content) # comma.
self.assertIn('key <65> { [ space ] };', content) self.assertIn('key <10> { [ 1, ', content)
self.assertIn('key <11> { [ 2, ', content)
self.assertIn('key <12> { [ 3, ', content)
self.assertIn('key <13> { [ 4, ', content)
self.assertIn('key <65> { [ space, ', content)
def test_get_preset_name(self): def test_get_preset_name(self):
self.assertEqual(get_preset_name('a', 'b'), 'key-mapper/user/a/b') self.assertEqual(get_preset_name('a', 'b'), 'key-mapper/user/a/b')
@ -99,6 +104,7 @@ class TestConfig(unittest.TestCase):
self.assertIn('key <10> { [ a ] };', content) self.assertIn('key <10> { [ a ] };', content)
self.assertIn('key <11> { [ KP_1 ] };', content) self.assertIn('key <11> { [ KP_1 ] };', content)
self.assertIn('key <12> { [ 3 ] };', content) self.assertIn('key <12> { [ 3 ] };', content)
self.assertIn('key <13> { [ a, A, NoSymbol, 3 ] };', content)
def test_identity_mapping(self): def test_identity_mapping(self):
create_identity_mapping() create_identity_mapping()

@ -64,10 +64,18 @@ class TestMapping(unittest.TestCase):
self.assertEqual(self.mapping.get(4), 'f') self.assertEqual(self.mapping.get(4), 'f')
self.assertEqual(len(self.mapping), 2) self.assertEqual(len(self.mapping), 2)
# non-ints are ignored # non-int keycodes are ignored
self.mapping.change('a', 'b', 'c') self.mapping.change('a', 'b', 'c')
self.assertEqual(len(self.mapping), 2) self.assertEqual(len(self.mapping), 2)
def test_change_multiple(self):
self.mapping.change(None, 1, ['a', 'A'])
self.assertEqual(self.mapping.get(1), 'a, A')
self.mapping.change(1, 2, ['b', 'B'])
self.assertEqual(self.mapping.get(2), 'b, B')
self.assertIsNone(self.mapping.get(1))
def test_clear(self): def test_clear(self):
# does nothing # does nothing
self.mapping.clear(40) self.mapping.clear(40)

Loading…
Cancel
Save