diff options
Diffstat (limited to 'lib/python/qmk/keymap.py')
| -rw-r--r-- | lib/python/qmk/keymap.py | 22 | 
1 files changed, 15 insertions, 7 deletions
| diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py index 31c61ae6a8..266532f503 100644 --- a/lib/python/qmk/keymap.py +++ b/lib/python/qmk/keymap.py @@ -3,6 +3,7 @@  from pathlib import Path  import json  import subprocess +import sys  from pygments.lexers.c_cpp import CLexer  from pygments.token import Token @@ -312,16 +313,17 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa      return sorted(names) -def _c_preprocess(path): +def _c_preprocess(path, stdin=None):      """ Run a file through the C pre-processor      Args: -        path: path of the keymap.c file +        path: path of the keymap.c file (set None to use stdin) +        stdin: stdin pipe (e.g. sys.stdin)      Returns:          the stdout of the pre-processor      """ -    pre_processed_keymap = qmk.commands.run(['cpp', path], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) +    pre_processed_keymap = qmk.commands.run(['cpp', path] if path else ['cpp'], stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)      return pre_processed_keymap.stdout @@ -451,17 +453,23 @@ def parse_keymap_c(keymap_file, use_cpp=True):      Currently only cares about the keymaps array.      Args: -        keymap_file: path of the keymap.c file +        keymap_file: path of the keymap.c file (or '-' to use stdin)          use_cpp: if True, pre-process the file with the C pre-processor      Returns:          a dictionary containing the parsed keymap      """ -    if use_cpp: -        keymap_file = _c_preprocess(keymap_file) +    if keymap_file == '-': +        if use_cpp: +            keymap_file = _c_preprocess(None, sys.stdin) +        else: +            keymap_file = sys.stdin.read()      else: -        keymap_file = keymap_file.read_text() +        if use_cpp: +            keymap_file = _c_preprocess(keymap_file) +        else: +            keymap_file = keymap_file.read_text()      keymap = dict()      keymap['layers'] = _get_layers(keymap_file) | 
