aboutsummaryrefslogtreecommitdiff
path: root/lib/python/qmk/keymap.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python/qmk/keymap.py')
-rw-r--r--lib/python/qmk/keymap.py22
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py
index 31c61ae6a..266532f50 100644
--- a/lib/python/qmk/keymap.py
+++ b/lib/python/qmk/keymap.py
@@ -3,6 +3,7 @@
3from pathlib import Path 3from pathlib import Path
4import json 4import json
5import subprocess 5import subprocess
6import sys
6 7
7from pygments.lexers.c_cpp import CLexer 8from pygments.lexers.c_cpp import CLexer
8from pygments.token import Token 9from pygments.token import Token
@@ -312,16 +313,17 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa
312 return sorted(names) 313 return sorted(names)
313 314
314 315
315def _c_preprocess(path): 316def _c_preprocess(path, stdin=None):
316 """ Run a file through the C pre-processor 317 """ Run a file through the C pre-processor
317 318
318 Args: 319 Args:
319 path: path of the keymap.c file 320 path: path of the keymap.c file (set None to use stdin)
321 stdin: stdin pipe (e.g. sys.stdin)
320 322
321 Returns: 323 Returns:
322 the stdout of the pre-processor 324 the stdout of the pre-processor
323 """ 325 """
324 pre_processed_keymap = qmk.commands.run(['cpp', path], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) 326 pre_processed_keymap = qmk.commands.run(['cpp', path] if path else ['cpp'], stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
325 return pre_processed_keymap.stdout 327 return pre_processed_keymap.stdout
326 328
327 329
@@ -451,17 +453,23 @@ def parse_keymap_c(keymap_file, use_cpp=True):
451 Currently only cares about the keymaps array. 453 Currently only cares about the keymaps array.
452 454
453 Args: 455 Args:
454 keymap_file: path of the keymap.c file 456 keymap_file: path of the keymap.c file (or '-' to use stdin)
455 457
456 use_cpp: if True, pre-process the file with the C pre-processor 458 use_cpp: if True, pre-process the file with the C pre-processor
457 459
458 Returns: 460 Returns:
459 a dictionary containing the parsed keymap 461 a dictionary containing the parsed keymap
460 """ 462 """
461 if use_cpp: 463 if keymap_file == '-':
462 keymap_file = _c_preprocess(keymap_file) 464 if use_cpp:
465 keymap_file = _c_preprocess(None, sys.stdin)
466 else:
467 keymap_file = sys.stdin.read()
463 else: 468 else:
464 keymap_file = keymap_file.read_text() 469 if use_cpp:
470 keymap_file = _c_preprocess(keymap_file)
471 else:
472 keymap_file = keymap_file.read_text()
465 473
466 keymap = dict() 474 keymap = dict()
467 keymap['layers'] = _get_layers(keymap_file) 475 keymap['layers'] = _get_layers(keymap_file)