summary refs log tree commit diff
path: root/data
diff options
context:
space:
mode:
authorZach White <skullydazed@gmail.com>2021-11-22 11:11:35 -0800
committerGitHub <noreply@github.com>2021-11-22 11:11:35 -0800
commit08ce0142bad40f22d05d33fdef8a7c8907154e96 (patch)
tree5b5da4650a76ec902a550e2719b79ffc2a73d74d /data
parent8181b155dbfd07561200b30b52a4046f2da92248 (diff)
Macros in JSON keymaps (#14374)
* macros in json keymaps

* add advanced macro support to json

* add a note about escaping macro strings

* add simple examples

* format json

* add support for language specific keymap extras

* switch to dictionaries instead of inline text for macros

* use SS_TAP on the innermost tap keycode

* add the new macro format to the schema

* document the macro limit

* add the json keyword for syntax highlighting

* fix format that vscode screwed up

* Update feature_macros.md

* add tests for macros

* change ding to beep

* add json support for SENDSTRING_BELL

* update doc based on feedback from sigprof

* document host_layout

* remove unused var

* improve carriage return handling

* support tab characters as well

* Update docs/feature_macros.md

Co-authored-by: Nick Brassel <nick@tzarc.org>

* escape backslash characters

* format

* flake8

* Update quantum/quantum_keycodes.h

Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'data')
-rw-r--r--data/mappings/info_config.json1
-rw-r--r--data/schemas/keyboard.jsonschema1
-rw-r--r--data/schemas/keymap.jsonschema35
3 files changed, 36 insertions, 1 deletions
diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json
index 50694e3863..3cb64dd3a2 100644
--- a/data/mappings/info_config.json
+++ b/data/mappings/info_config.json
@@ -76,6 +76,7 @@
     "QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int"},
     "QMK_LED": {"info_key": "qmk_lufa_bootloader.led"},
     "QMK_SPEAKER": {"info_key": "qmk_lufa_bootloader.speaker"},
+    "SENDSTRING_BELL": {"info_key": "audio.macro_beep", "value_type": "bool"},
     "SPLIT_MODS_ENABLE": {"info_key": "split.transport.sync_modifiers", "value_type": "bool"},
     "SPLIT_TRANSPORT_MIRROR": {"info_key": "split.transport.sync_matrix_state", "value_type": "bool"},
     "SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "bool"},
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 65d44c94d2..37a0643ab2 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -19,6 +19,7 @@
             "type": "object",
             "additionalProperties": false,
             "properties": {
+                "macro_beep": {"type": "boolean"},
                 "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
                 "voices": {"type": "boolean"}
             }
diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema
index a4bdab966b..faa250a942 100644
--- a/data/schemas/keymap.jsonschema
+++ b/data/schemas/keymap.jsonschema
@@ -5,6 +5,7 @@
     "type": "object",
     "properties": {
         "author": {"type": "string"},
+        "host_language": {"$ref": "qmk.definitions.v1#/text_identifier"},
         "keyboard": {"$ref": "qmk.definitions.v1#/text_identifier"},
         "keymap": {"$ref": "qmk.definitions.v1#/text_identifier"},
         "layout": {"$ref": "qmk.definitions.v1#/layout_macro"},
@@ -15,10 +16,42 @@
                 "items": {"type": "string"}
             }
         },
+        "macros": {
+            "type": "array",
+            "items": {
+                "type": "array",
+                "items": {
+                    "oneOf": [
+                        {
+                            "type": "string"
+                        },
+                        {
+                            "type": "object",
+                            "additionalProperties": false,
+                            "properties": {
+                                "action": {
+                                    "type": "string",
+                                    "enum": ['beep', 'delay', 'down', 'tap', 'up']
+                                },
+                                "keycodes": {
+                                    "type": "array",
+                                    "items": {
+                                        "$ref": "qmk.definitions.v1#/text_identifier"
+                                    }
+                                },
+                                "duration": {
+                                    "$ref": "qmk.definitions.v1#/unsigned_int"
+                                }
+                            }
+                        }
+                    ]
+                }
+            }
+        },
         "config": {"$ref": "qmk.keyboard.v1"},
         "notes": {
             "type": "string",
             "description": "asdf"
         }
     }
-}
\ No newline at end of file
+}