Skip to content

Commit 6d32a59

Browse files
committed
improv: Refactor layouts.py to be able to handle multiple includes
Was going to use `quantum_keycodes.h` for keyboard color/brightness keys, but that doesn't seem to work currently since it's using QMK's RGB Matrix rather than Backlight.
1 parent 4e558ab commit 6d32a59

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

layouts.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -79,40 +79,43 @@
7979
'SYSTEM_SLEEP': 'SUSPEND'
8080
}
8181

82-
def extract_scancodes(includedir: str, common_keymap_h: str, is_qmk: bool) -> List[Tuple[str, int]]:
82+
def extract_scancodes(ecdir: str, is_qmk: bool) -> List[Tuple[str, int]]:
8383
"Extract mapping from scancode names to numbers"
8484

8585
if is_qmk:
86-
include = "common/keycode.h"
87-
else:
88-
include = "common/keymap.h"
89-
90-
if is_qmk:
86+
includes = [f"{ecdir}/tmk_core/common/keycode.h"]
87+
common_keymap_h = open(includes[0]).read()
9188
scancode_defines = re.findall(
9289
' (KC_[^,\s]+)', common_keymap_h)
9390
else:
91+
includes = [f"{ecdir}/src/common/include/common/keymap.h"]
92+
common_keymap_h = open(includes[0]).read()
9493
scancode_defines = re.findall(
9594
'#define.*((?:K_\S+)|(?:KT_FN))', common_keymap_h)
9695

9796
tmpdir = tempfile.mkdtemp()
9897
with open(f'{tmpdir}/keysym-extract.c', 'w') as f:
9998
f.write('#include <stdio.h>\n')
100-
f.write(f'#include "{include}"\n')
10199
f.write('int main() {\n')
102100
for i in scancode_defines:
103101
f.write(f'printf("%d ", {i});\n')
104102
f.write('}\n')
105103

106-
subprocess.check_call(['gcc', f'-I{includedir}',
107-
'-o', f'{tmpdir}/keysym-extract', f'{tmpdir}/keysym-extract.c'])
104+
cmd = ['gcc']
105+
for i in includes:
106+
cmd.append('-include')
107+
cmd.append(i)
108+
cmd += ['-o', f'{tmpdir}/keysym-extract', f'{tmpdir}/keysym-extract.c']
109+
subprocess.check_call(cmd)
110+
108111
output = subprocess.check_output(
109112
f'{tmpdir}/keysym-extract', universal_newlines=True)
110113

111114
shutil.rmtree(tmpdir)
112115

113116
scancode_names = (i.split('_', 1)[1] for i in scancode_defines)
114117
if is_qmk:
115-
scancode_names = (QMK_MAPPING.get(i, i) for i in scancode_names)
118+
scancode_names = [QMK_MAPPING.get(i, i) for i in scancode_names]
116119
scancodes = (int(i) for i in output.split())
117120
scancode_list = list(zip(scancode_names, scancodes))
118121

@@ -211,24 +214,19 @@ def generate_layout_dir(ecdir: str, board: str, is_qmk: bool) -> None:
211214
print(f'Generating {layoutdir}...')
212215

213216
if is_qmk:
214-
common_keymap_h = open(f"{ecdir}/tmk_core/common/keycode.h").read()
215217
keymap_h = open(
216218
f"{ecdir}/keyboards/{board}/{board.split('/')[-1]}.h").read()
217219
default_c = open(
218220
f"{ecdir}/keyboards/{board}/keymaps/default/keymap.c").read()
219-
includedir = f'{ecdir}/tmk_core'
220221
else:
221-
common_keymap_h = open(
222-
f"{ecdir}/src/common/include/common/keymap.h").read()
223222
keymap_h = open(
224223
f"{ecdir}/src/board/{board}/include/board/keymap.h").read()
225224
default_c = open(f"{ecdir}/src/board/{board}/keymap/default.c").read()
226-
includedir = f'{ecdir}/src/common/include'
227225

228226
os.makedirs(f'{layoutdir}', exist_ok=True)
229227

230228
physical, physical2 = parse_layout_define(keymap_h, is_qmk)
231-
scancodes = extract_scancodes(includedir, common_keymap_h, is_qmk)
229+
scancodes = extract_scancodes(ecdir, is_qmk)
232230
default_keymap = parse_keymap(default_c, physical, is_qmk)
233231
gen_layout_json(f'{layoutdir}/layout.json', physical, physical2)
234232
gen_keymap_json(f'{layoutdir}/keymap.json', scancodes)

0 commit comments

Comments
 (0)