idx: 全バリアントを1つのorderに並べ、出力時に取捨して番号を詰める

排他キーも別々の要素として並べる。出力はバリアントを選択した構成を単位とし、
対象外のキーを除いた並びの位置をそのままキー番号にする。同じ配線の排他キーは
選択後に同時には残らないため、番号を共有させる必要がない。
保存したorderは選択で書き換えず、番号の互換性は出力レイアウトごとに扱う。

6d0eba9 で「IDXは番号を共有できる」と書いたが、共有をやめる形に変える。
コミュニティレイアウトの並びを取捨で得られるかは、この方式では未検証のため
IDXのP-1として残す。

Journal: journal/2026-09-22-idx-variant-output.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DKW58HEg8zAQoLrkWByPfD
This commit is contained in:
2026-09-22 18:36:09 +09:00
co-authored by Claude Opus 5
parent c31360a772
commit 76c349fa0c
7 changed files with 128 additions and 70 deletions
+9 -7
View File
@@ -38,14 +38,14 @@ ELCはIDXを参照せず、IDXもELCを参照しない。MAPもIDXを参照し
### 3. IDXレイヤー (キー識別)
- **役割**: PHYのキーに"キー番号"を与える
- **役割**: 全バリアントにわたるPHYのキーの並び順を保存し、選択した構成の出力用キー番号を決める
- **入力**: PHYのキーID
- **対応ツール**: QMKの `LAYOUT` マクロ、ZMKの matrix transform、KMKの `coord_mapping`
- **出力**: 番号を振るキーの並び。並びの位置がキー番号
- **出力**: 全バリアントの対象キーIDを重複なく並べた `order`。出力時に対象外のキーを除き、0から連続する番号を与える
- **備考**: キー番号はPHYの幾何からもELCの配線からも導出しない(導出すると、幾何の編集や再配線でキーマップがずれる)
- **備考**: キー番号は公開インターフェースであり、出力のたびに生成し直さず固定する
- **備考**: 並び順を正本として保存する。出力番号は公開インターフェースであり、互換性は出力レイアウトごとに扱う
- **備考**: マトリックス座標とLEDの識別番号はIDXが持たない(どちらも配線で決まるためELCが持つ)
- **備考**: レイアウトバリアントがあってもキー番号の空間は1つ。同じマトリクス位置に配線された排他キーは同じ番号を共有する
- **備考**: 全バリアントで1つのIDXを持つ。同じ接続先に配線された排他キーも別々の要素とし、選択後の出力で番号を詰める。保存した `order` は変えない
- **備考**: 既存のエコシステムでは、この並びが `LAYOUT` マクロの引数順などとして手書きされている。欠けている層ではなく、形式化されていない層
### 4. MAPレイヤー (キーマップ)
@@ -54,7 +54,7 @@ ELCはIDXを参照せず、IDXもELCを参照しない。MAPもIDXを参照し
- **入力**: PHYのキーID
- **対応ツール**: ファームウェア、VIA、Remap
- **出力**: レイヤー別キーコード
- **備考**: キーの参照にキー番号を使わない。配列としての並べ替えは、出力時にIDXの並び順で行う
- **備考**: キーの参照にPHYのキーIDを使う。配列としての並べ替えは、出力時にバリアント選択後のIDXの並び順で行う
### 5. IMEレイヤー (入力変換)
@@ -75,7 +75,7 @@ ELCはIDXを参照せず、IDXもELCを参照しない。MAPもIDXを参照し
#### Key Indexer
- PHY JSONを入力
- キーにキー番号を割り当て
- 全バリアントの対象キーを1つの並びに配置
- 出力: IDX JSON
#### Wiring Editor
@@ -95,6 +95,7 @@ ELCはIDXを参照せず、IDXもELCを参照しない。MAPもIDXを参照し
#### Firmware Generator
- 全レイヤーの情報を統合
- バリアントを選択し、IDXから対象外のキーを除いた並びで、キー番号の対応表とMAPの配列を生成
- row / col など、ターゲットが要求する派生情報をここで割り当てる
- QMK/VIA/KMK等へ変換
- 出力: ターゲット固有の設定ファイル
@@ -117,13 +118,14 @@ PHY → ELC
PHY → IDX
Input: キーID + 配置
Output: 番号を振るキーIDの並び
Output: 全バリアントの対象キーIDの並び
PHY → MAP
Input: キーID
Output: レイヤー別キーコード
All → Firmware
Input: 各レイヤーのデータ + バリアント選択
Output: QMK keyboard.json / VIA JSON / KMK .py
```