From 9bc7e9afbd32e3ed34580f1be9a79e6040158de5 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 9 Dec 2022 00:54:52 +0000 Subject: Initial uk+us DD keymap_extras migration (#19031) --- lib/python/qmk/cli/generate/keycodes.py | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'lib/python/qmk/cli/generate/keycodes.py') diff --git a/lib/python/qmk/cli/generate/keycodes.py b/lib/python/qmk/cli/generate/keycodes.py index 29b7db3c80..cf80689708 100644 --- a/lib/python/qmk/cli/generate/keycodes.py +++ b/lib/python/qmk/cli/generate/keycodes.py @@ -8,6 +8,24 @@ from qmk.path import normpath from qmk.keycodes import load_spec +def _render_key(key): + width = 7 + if 'S(' in key: + width += len('S()') + if 'A(' in key: + width += len('A()') + if 'RCTL(' in key: + width += len('RCTL()') + if 'ALGR(' in key: + width += len('ALGR()') + return key.ljust(width) + + +def _render_label(label): + label = label.replace("\\", "(backslash)") + return label + + def _generate_ranges(lines, keycodes): lines.append('') lines.append('enum qk_keycode_ranges {') @@ -67,6 +85,22 @@ def _generate_helpers(lines, keycodes): lines.append(f'#define IS_{ group.upper() }_KEYCODE(code) ((code) >= {lo} && (code) <= {hi})') +def _generate_aliases(lines, keycodes): + lines.append('') + lines.append('// Aliases') + for key, value in keycodes["aliases"].items(): + define = _render_key(value.get("key")) + val = _render_key(key) + label = _render_label(value.get("label")) + + lines.append(f'#define {define} {val} // {label}') + + lines.append('') + for key, value in keycodes["aliases"].items(): + for alias in value.get("aliases", []): + lines.append(f'#define {alias} {value.get("key")}') + + @cli.argument('-v', '--version', arg_only=True, required=True, help='Version of keycodes to generate.') @cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') @cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") @@ -86,3 +120,23 @@ def generate_keycodes(cli): # Show the results dump_lines(cli.args.output, keycodes_h_lines, cli.args.quiet) + + +@cli.argument('-v', '--version', arg_only=True, required=True, help='Version of keycodes to generate.') +@cli.argument('-l', '--lang', arg_only=True, required=True, help='Language of keycodes to generate.') +@cli.argument('-o', '--output', arg_only=True, type=normpath, help='File to write to') +@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages") +@cli.subcommand('Used by the make system to generate keymap_{lang}.h from keycodes_{lang}_{version}.json', hidden=True) +def generate_keycode_extras(cli): + """Generates the header file. + """ + + # Build the header file. + keycodes_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once', '#include "keymap.h"', '// clang-format off'] + + keycodes = load_spec(cli.args.version, cli.args.lang) + + _generate_aliases(keycodes_h_lines, keycodes) + + # Show the results + dump_lines(cli.args.output, keycodes_h_lines, cli.args.quiet) -- cgit v1.2.3 From e5721bbd37fcb0372fd007caae5a3f2aed060479 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Wed, 21 Dec 2022 23:35:23 +0000 Subject: Remaining DD keymap_extras migration (#19110) * Parse headers to data * Regen headers from data --- lib/python/qmk/cli/generate/keycodes.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'lib/python/qmk/cli/generate/keycodes.py') diff --git a/lib/python/qmk/cli/generate/keycodes.py b/lib/python/qmk/cli/generate/keycodes.py index cf80689708..2ed84cd589 100644 --- a/lib/python/qmk/cli/generate/keycodes.py +++ b/lib/python/qmk/cli/generate/keycodes.py @@ -91,9 +91,10 @@ def _generate_aliases(lines, keycodes): for key, value in keycodes["aliases"].items(): define = _render_key(value.get("key")) val = _render_key(key) - label = _render_label(value.get("label")) - - lines.append(f'#define {define} {val} // {label}') + if 'label' in value: + lines.append(f'#define {define} {val} // {_render_label(value.get("label"))}') + else: + lines.append(f'#define {define} {val}') lines.append('') for key, value in keycodes["aliases"].items(): -- cgit v1.2.3 From 1d0b4c8d38794dc019ecb224f2992b4ddfa70839 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 10 Feb 2023 21:10:14 +0000 Subject: Tidy up use of keycode range helpers (#19756) --- lib/python/qmk/cli/generate/keycodes.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'lib/python/qmk/cli/generate/keycodes.py') diff --git a/lib/python/qmk/cli/generate/keycodes.py b/lib/python/qmk/cli/generate/keycodes.py index 2ed84cd589..f5c646e0ea 100644 --- a/lib/python/qmk/cli/generate/keycodes.py +++ b/lib/python/qmk/cli/generate/keycodes.py @@ -8,6 +8,14 @@ from qmk.path import normpath from qmk.keycodes import load_spec +def _translate_group(group): + """Fix up any issues with badly chosen values + """ + if group == 'modifiers': + return 'modifier' + return group + + def _render_key(key): width = 7 if 'S(' in key: @@ -82,7 +90,7 @@ def _generate_helpers(lines, keycodes): for group, codes in temp.items(): lo = keycodes["keycodes"][f'0x{codes[0]:04X}']['key'] hi = keycodes["keycodes"][f'0x{codes[1]:04X}']['key'] - lines.append(f'#define IS_{ group.upper() }_KEYCODE(code) ((code) >= {lo} && (code) <= {hi})') + lines.append(f'#define IS_{ _translate_group(group).upper() }_KEYCODE(code) ((code) >= {lo} && (code) <= {hi})') def _generate_aliases(lines, keycodes): -- cgit v1.2.3 From 6ceff1367d1d3c6fbf6f903ea9ef7aff9099eec5 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 12 Feb 2023 17:09:34 +0000 Subject: Tidy up use of keycode range helpers (#19813) --- lib/python/qmk/cli/generate/keycodes.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lib/python/qmk/cli/generate/keycodes.py') diff --git a/lib/python/qmk/cli/generate/keycodes.py b/lib/python/qmk/cli/generate/keycodes.py index f5c646e0ea..17503bac63 100644 --- a/lib/python/qmk/cli/generate/keycodes.py +++ b/lib/python/qmk/cli/generate/keycodes.py @@ -13,6 +13,8 @@ def _translate_group(group): """ if group == 'modifiers': return 'modifier' + if group == 'media': + return 'consumer' return group -- cgit v1.2.3