summary refs log tree commit diff
path: root/data
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2023-03-27 20:01:07 +0100
committerGitHub <noreply@github.com>2023-03-27 20:01:07 +0100
commit79b0f9168eafef1642f3223500197bf630a2433f (patch)
treef73f4b61d1e635f7aac380c99bf98571e1eeb2f9 /data
parente35bb8ebfad8b8ce40de98e9607fb6dbf8d8fff4 (diff)
Custom keycodes in JSON (#19925)
Diffstat (limited to 'data')
-rw-r--r--data/schemas/definitions.jsonschema32
-rw-r--r--data/schemas/keyboard.jsonschema1
-rw-r--r--data/schemas/keycodes.jsonschema10
-rw-r--r--data/schemas/keymap.jsonschema1
4 files changed, 37 insertions, 7 deletions
diff --git a/data/schemas/definitions.jsonschema b/data/schemas/definitions.jsonschema
index 94a94157c0..b9c64a55ec 100644
--- a/data/schemas/definitions.jsonschema
+++ b/data/schemas/definitions.jsonschema
@@ -71,6 +71,38 @@
         "type": "string",
         "pattern": "^[0-9a-z][0-9a-z_/]*$"
     },
+    "keycode": {
+        "type": "string",
+        "minLength": 2,
+        "maxLength": 50,
+        "pattern": "^[A-Z][A-Zs_0-9]*$"
+    },
+    "keycode_short": {
+        "type": "string",
+        "minLength": 2,
+        "maxLength": 7,
+        "pattern": "^[A-Z][A-Zs_0-9]*$"
+    },
+    "keycode_decl": {
+        "type": "object",
+        "required": [
+            "key"
+        ],
+        "properties": {
+            "key": {"$ref": "#/keycode"},
+            "label": {"$ref": "#/text_identifier"},
+            "aliases": {
+                "type": "array",
+                "minItems": 1,
+                "items": {"$ref": "#/keycode_short"}
+            }
+        }
+    },
+    "keycode_decl_array": {
+        "type": "array",
+        "minItems": 1
+        "items": {"$ref": "#/keycode_decl"}
+    },
     "mcu_pin_array": {
         "type": "array",
         "items": {"$ref": "#/mcu_pin"}
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index aa1be6efa7..18b3514aa5 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -259,6 +259,7 @@
                 "on_state": {"$ref": "qmk.definitions.v1#/bit"}
             }
         },
+        "keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"},
         "layout_aliases": {
             "type": "object",
             "additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"}
diff --git a/data/schemas/keycodes.jsonschema b/data/schemas/keycodes.jsonschema
index 77a8347b3b..df6ce95a83 100644
--- a/data/schemas/keycodes.jsonschema
+++ b/data/schemas/keycodes.jsonschema
@@ -8,11 +8,7 @@
             "type": "string",
             "minLength": 2,
             "maxLength": 50,
-            "pattern": "^[A-Zs_0-9]*$"
-        },
-        "hex_number_4d": {
-            "type": "string",
-            "pattern": "^0x[0-9A-F]{4}$"
+            "pattern": "^[A-Z][A-Zs_0-9]*$"
         }
     },
     "properties": {
@@ -34,10 +30,10 @@
         "keycodes": {
             "type": "object",
             "propertyNames": {
-                "$ref": "#/definitions/hex_number_4d"
+                "$ref": "qmk.definitions.v1#/hex_number_4d"
             },
             "additionalProperties": {
-                "type": "object",
+                "type": "object", // use 'qmk.definitions.v1#/keycode_decl' when problem keycodes are removed
                 "required": [
                     "key"
                 ],
diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema
index 73aa7c5c22..7233e896e9 100644
--- a/data/schemas/keymap.jsonschema
+++ b/data/schemas/keymap.jsonschema
@@ -67,6 +67,7 @@
                 }
             }
         },
+        "keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"},
         "config": {"$ref": "qmk.keyboard.v1"},
         "notes": {
             "type": "string"