creates dummy but working configs

xkb
sezanzeb 4 years ago committed by sezanzeb
parent 9ac1fefeb1
commit 15fec08332

@ -71,31 +71,48 @@ def generate_setxkbmap_config(device, preset, mappings):
with open(config_path, 'w') as f: with open(config_path, 'w') as f:
f.write(generate_symbols_file_content(device, preset, mappings)) f.write(generate_symbols_file_content(device, preset, mappings))
logger.debug('Wrote key mappings')
def apply_preset(device, preset):
# setxkbmap key-mapper/Razer_Razer_Naga_Trinity/new_preset -v 10 -device 12
# TODO device 12 is from `xinput list` but currently there is no function
# to obtain that. And that cli tool outputs all those extra devices.
# 1. get all names in the group (similar to parse_libinput_list)
# 2. get all ids from xinput list for each name
# 3. apply preset to all of them
def generate_symbols_file_content(device, preset, mappings): def generate_symbols_file_content(device, preset, mappings):
"""Create config contents to be placed in /usr/share/X11/xkb/symbols.""" """Create config contents to be placed in /usr/share/X11/xkb/symbols."""
system_default = 'us' # TODO get the system default system_default = 'us' # TODO get the system default
# TODO I think I also have to create a file in /usr/share/X11/xkb/keycodes
result = '\n'.join([ # 10 is what the mouse reports
'default xkb_symbols "basic" {', result = """
' minimum = 8;', default xkb_symbols "basic" {{
' maximum = 255;', include "us"
f' include "{system_default}"', name[Group1]="{name}";
f' name[Group1]="{device}/{preset}";', key <AE01> { [ 3 ] };
' key <AE01> { [ 2, 2, 2, 2 ] };', }};
'};',
]) + '\n' default xkb_keycodes "basic" {{
minimum= 8;
maximum= 255;
<AE01> = 10;
}};
"""
result = result.format(name=f'{device}/{preset}')
for mapping in mappings: for mapping in mappings:
key = mapping.key key = mapping.key
keycode = get_keycode(device, key) keycode = get_keycode(device, key)
target = mapping.target target = mapping.target
# TODO support NUM block keys and modifiers somehow
return result return result
def parse_libinput_list(): def parse_libinput_list():
# TODO return something meaningful. {name: {paths:, related:}}
"""Get a mapping of {name: [paths]} for `libinput list-devices` devices. """Get a mapping of {name: [paths]} for `libinput list-devices` devices.
This is grouped by group, so the "Logitech USB Keyboard" and This is grouped by group, so the "Logitech USB Keyboard" and

@ -24,10 +24,8 @@
import os import os
import glob import glob
import subprocess
from pathlib import Path
from keymapper.paths import CONFIG_PATH, SYMBOLS_PATH from keymapper.paths import CONFIG_PATH
from keymapper.logger import logger from keymapper.logger import logger
from keymapper.X import find_devices, generate_setxkbmap_config from keymapper.X import find_devices, generate_setxkbmap_config

Loading…
Cancel
Save