PHY: レイアウトバリアントを木のノードとして導入し、ELC/IDXの扱いを決める
交換可能なキークラスタ(ISO Enter、スペース周りのキー数など)を、 VariantGroup / Variant の2ノードでPHYの木に表す。全バリアントのキーを 同時に持ち、単一の配置を要求する出力のときだけ1つ選んで畳む。 ELCは選択に関係なくsupersetを配線する。排他キー同士は同じ接続先を共有してよい。 IDXはキー番号の空間を1つに保ち、同じ接続先に配線された排他キーは `order` の配列要素として同じ番号を共有する。 Journal: journal/2026-09-21-multi-layout.md Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JPCpuPv6hDN76RgNe2PsRR
This commit is contained in:
+27
-6
@@ -49,6 +49,24 @@ row / col 自体がELCの正本ではなく出力時の派生情報である。
|
||||
| ZMK | matrix transform の `map` の並び順 |
|
||||
| KMK | `coord_mapping` の並び順 |
|
||||
|
||||
## レイアウトバリアント
|
||||
|
||||
PHYがレイアウトバリアントを持つ場合も、キー番号の空間は1つとする。バリアントごとにIDXを分けない。
|
||||
キー番号は公開インターフェースであり、どの空間のものかを断らずに解釈できなければならない。
|
||||
特定のレイアウト向けの並びは、選んだバリアントに属さないキーを落として得られる派生情報として扱う [推測:P-1]。
|
||||
|
||||
排他なキー同士は、同じキー番号を共有できる。`order` の要素にキーIDの配列を書くと、
|
||||
その位置の番号を配列内のキーで共有する。
|
||||
|
||||
番号を共有できるのは、ELCで同じ接続先の組に配線されたキーに限る。
|
||||
3つの処理系が要求するのはいずれも「番号の位置 → マトリクス位置」の1対1の対応表であり、
|
||||
1つの番号に対応するマトリクス位置は1つしかないため。
|
||||
逆に、同じ接続先の組に配線された排他キーは番号を共有しなければならない。
|
||||
別々の番号を与えると、その対応表に同じマトリクス位置が2回現れ、1回のキー押下で両方の番号が反応する。
|
||||
|
||||
選択によって番号が詰まることはない。あるバリアントでしか実装されないキーの番号は、
|
||||
別のバリアントを選んだときには使われない番号として残る。
|
||||
|
||||
## 他レイヤーとの関係
|
||||
|
||||
IDXはPHYのキーIDだけを参照する。ELCを参照しない。
|
||||
@@ -71,7 +89,8 @@ IDXの `order` と突き合わせて検出できる。
|
||||
|
||||
```ts
|
||||
type IDX = {
|
||||
order: string[] // PHYのキーID。並びの位置がキー番号
|
||||
order: (string | string[])[] // PHYのキーID。並びの位置がキー番号。
|
||||
// 配列は、その位置の番号を共有する排他バリアントのキー
|
||||
}
|
||||
```
|
||||
|
||||
@@ -86,12 +105,14 @@ type IDX = {
|
||||
- ELCのマトリクス順からキー番号を導出する (journal/2026-09-21-idx-necessity.md)
|
||||
- `keyId` と `index` の対を並べる形 (journal/2026-09-21-idx-necessity.md)
|
||||
- MAPがキー番号を参照する (journal/2026-09-21-idx-necessity.md)
|
||||
- レイアウトごとに別のIDXを持つ (journal/2026-09-21-multi-layout.md)
|
||||
|
||||
## 未確認事項
|
||||
|
||||
### P-1 レイアウトバリアントの扱い
|
||||
### P-1 特定レイアウト向けの並びが既存の慣習と一致するか
|
||||
|
||||
- 位置づけ: 未解決の問い。本文は単一レイアウトだけを前提にしている
|
||||
- 現状の認識: QMKの `LAYOUT_60_ansi` / `LAYOUT_60_iso` のように、1つの基板が複数のキー番号空間を持つ場合がある。
|
||||
1つのPHY+ELCに複数のIDXがぶら下がる形になりそうだが、PHYが代替キーをどう持つかが今のPHY仕様にない
|
||||
- 格上げ条件: PHYの代替キーの表現とあわせて、マルチレイアウトの扱いをユーザーと決める
|
||||
- 位置づけ: 本文「レイアウトバリアント」が前提にしている
|
||||
- 現状の認識: `order` からキーを落として得た並びが、QMKのコミュニティレイアウト(`LAYOUT_60_ansi` など)が
|
||||
要求する引数順と一致するかを確認していない。一致しないなら、レイアウトごとの並びを別に持つ必要が出る
|
||||
- 格上げ条件: 実在のキーボードの `LAYOUT_all` とコミュニティレイアウトのマクロを読み、
|
||||
前者から後者がキーの取捨だけで得られるかを確認する
|
||||
|
||||
Reference in New Issue
Block a user