fix(keymap-upgrader): Filter key codes to bindings
Changed the key code upgrader to only replace codes that appear in "bindings" properties. Modifier flags such as MOD_LCTL are no longer valid as key codes, but they are still used in "mods" properties and should not be replaced there.
This commit is contained in:
parent
37fcf190e6
commit
d4be70587d
2 changed files with 28 additions and 6 deletions
|
@ -77,21 +77,24 @@ const CODES = {
|
||||||
MOD_RGUI: "RGUI",
|
MOD_RGUI: "RGUI",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Regex matching names of properties that can have keymap bindings.
|
||||||
|
const BINDINGS_PROPS = /^(bindings|sensor-bindings)$/;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Upgrades deprecated key code identifiers.
|
* Upgrades deprecated key code identifiers.
|
||||||
*/
|
*/
|
||||||
export function upgradeKeycodes(tree: Tree) {
|
export function upgradeKeycodes(tree: Tree) {
|
||||||
const edits: TextEdit[] = [];
|
const edits: TextEdit[] = [];
|
||||||
|
|
||||||
// No need to filter to the bindings array. The C preprocessor would have
|
|
||||||
// replaced identifiers anywhere, so upgrading all identifiers preserves the
|
|
||||||
// original behavior of the keymap (even if that behavior wasn't intended).
|
|
||||||
const query = Devicetree.query("(identifier) @name");
|
const query = Devicetree.query("(identifier) @name");
|
||||||
const matches = query.matches(tree.rootNode);
|
const matches = query.matches(tree.rootNode);
|
||||||
|
|
||||||
for (const { captures } of matches) {
|
for (const { captures } of matches) {
|
||||||
const node = findCapture("name", captures);
|
const node = findCapture("name", captures);
|
||||||
if (node) {
|
|
||||||
|
// Some of the codes are still valid to use in other properties such as
|
||||||
|
// "mods", so only replace those that are inside a "bindings" array.
|
||||||
|
if (node && isInBindingsArray(node)) {
|
||||||
edits.push(...getUpgradeEdits(node, CODES, keycodeReplaceHandler));
|
edits.push(...getUpgradeEdits(node, CODES, keycodeReplaceHandler));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,3 +151,19 @@ function findBehaviorNodes(paramNode: SyntaxNode) {
|
||||||
|
|
||||||
return nodes;
|
return nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given a identifier, returns whether it is inside a "bindings" property value.
|
||||||
|
*/
|
||||||
|
function isInBindingsArray(identifier: SyntaxNode) {
|
||||||
|
let node = identifier.parent;
|
||||||
|
while (node) {
|
||||||
|
if (node.type === "property") {
|
||||||
|
return !!node.childForFieldName("name")?.text.match(BINDINGS_PROPS);
|
||||||
|
}
|
||||||
|
|
||||||
|
node = node.parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
|
@ -11,10 +11,13 @@ Some behaviors, key codes, and other features have been renamed to be more consi
|
||||||
|
|
||||||
Paste the contents of a `.keymap` file below. Then, hover your mouse over the upgraded keymap and click the `Copy` button in the upper-right corner to copy it to your clipboard.
|
Paste the contents of a `.keymap` file below. Then, hover your mouse over the upgraded keymap and click the `Copy` button in the upper-right corner to copy it to your clipboard.
|
||||||
|
|
||||||
You will likely need to realign columns in the upgraded keymap. The upgrader also does not handle
|
:::warning
|
||||||
codes inside a `#define`, so you will need to update those manually using
|
|
||||||
|
The upgrader does not handle key codes inside a `#define` or a behavior creation macro such as `ZMK_MACRO()`, so you will need to update those manually using
|
||||||
[this list of deprecated codes and replacements](https://github.com/zmkfirmware/zmk/blob/main/docs/src/keymap-upgrade/keycodes.ts).
|
[this list of deprecated codes and replacements](https://github.com/zmkfirmware/zmk/blob/main/docs/src/keymap-upgrade/keycodes.ts).
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
import KeymapUpgrader from "@site/src/components/KeymapUpgrader/index";
|
import KeymapUpgrader from "@site/src/components/KeymapUpgrader/index";
|
||||||
|
|
||||||
<KeymapUpgrader />
|
<KeymapUpgrader />
|
||||||
|
|
Loading…
Add table
Reference in a new issue