Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
af6ce99364 | ||
|
|
1a443c562d | ||
|
|
73e913e776 | ||
|
|
1c99f60719 |
@@ -1,7 +1,7 @@
|
||||
# Beyond KLE
|
||||
|
||||
キーボード設計のデータモデルとワークフローを再設計するプロジェクト。
|
||||
PHY(物理配置) / ELC(電気配線) / IDX(キー識別) / MAP(キーマップ) / IME(入力変換) の5層に分離する。
|
||||
PHY(物理配置) / ELC(電気配線) / IDX(キー識別) / MAP(キーマップ) / HST(ホスト) の5層に分離する。
|
||||
|
||||
- 応答・ドキュメントは日本語。
|
||||
- 現状はコード未着手、設計ドキュメントのみ。
|
||||
@@ -15,10 +15,12 @@ PHY(物理配置) / ELC(電気配線) / IDX(キー識別) / MAP(キーマップ)
|
||||
| `ELCレイヤー.md` | ELC層の仕様 |
|
||||
| `IDXレイヤー.md` | IDX層の仕様 |
|
||||
| `MAPレイヤー.md` | MAP層とエディタの責務・実機との読み書き方針 |
|
||||
| `HSTレイヤー.md` | HST層(ホストによるキーコードの解釈)の仕様 |
|
||||
| `phase1-json-schema.md` | 各層のJSON Schema |
|
||||
| `keyboard-making-workflow.md` | 既存の自作キーボード制作フローとの対応 |
|
||||
| `implementation-plan.md` | 実装方針の決定事項・検証用サンプル |
|
||||
| [`backlog/README.md`](backlog/README.md) | 後回しにできる問い・検証・改善候補 |
|
||||
| `samples/` | 検証用サンプル(KLE JSON、VIA定義)。出典とテストケースは `implementation-plan.md` |
|
||||
|
||||
既存ドキュメントには下記ルールを段階的に適用する。PHY・ELC・IDXの保留課題はbacklogへ分離済み。
|
||||
全体の再編は別タスクとして行い、指示なく他の内容を移動・分割・書き直ししない。
|
||||
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
# HSTレイヤー
|
||||
|
||||
## 概要
|
||||
|
||||
HST(ホスト)レイヤーは、接続先のホストがキーボードから受け取ったキーコードをどう解釈するかを記述する。
|
||||
MAPが出力するのはHIDのキーコードであり、画面上の文字や動作は、ホストのOSとキーボード配列の設定で決まる。
|
||||
HSTはこの対応を持ち、MAPエディタとFirmware Generatorが参照する。入力がHSTを通過するわけではない。
|
||||
|
||||
名前は、HIDでキーボード(device)の接続相手をhostと呼ぶことに合わせる。
|
||||
IMEのかな漢字変換はOSの仕事であり、HSTの対象外とする。
|
||||
|
||||
## プロファイル
|
||||
|
||||
HSTのデータは、ホスト環境ごとのプロファイルの集まりとする。
|
||||
プロファイルはキーボードに依存しないため、プロジェクトの外にある共有カタログとして版を管理する。
|
||||
プロジェクトは、参照するプロファイルのIDと、利用者ごとの差分(XKBのオプションなど)だけを持つ。
|
||||
|
||||
### 識別
|
||||
|
||||
プロファイルは、OSとホスト配列の組で識別する。必要な場合だけ、入力方式やその設定を加える。
|
||||
|
||||
- ホスト配列は、OSがキーコードを解釈するための配列の設定である。キーキャップの刻印やOSの表示言語とは独立に決まる
|
||||
(日本語のWindowsで英語配列を設定する、など)。
|
||||
- Linux(XKB)では、配列(layout)・変種(variant)・オプション(options)の組になる。
|
||||
- `win-jp` のような短い名前は、人が選ぶためのプリセット名として付ける。
|
||||
- 各OSの識別子(WindowsのKLID、XKBの名前、macOSの入力ソースID)と対応付けられるようにする。
|
||||
|
||||
```json
|
||||
{ "os": "windows", "layout": "jp106" }
|
||||
{ "os": "macos", "layout": "us" }
|
||||
{ "os": "linux", "layout": "jp", "options": ["ctrl:nocaps"] }
|
||||
```
|
||||
|
||||
「日本語入力を使う環境」のような設定は、プロファイルの識別に含める。
|
||||
IMEが今ONか、のような実行時の状態は識別に含めない(次節の引数として扱う)。
|
||||
|
||||
### 記述する内容
|
||||
|
||||
プロファイルは、順方向の対応だけを記述する。
|
||||
|
||||
```txt
|
||||
(キーコード, 修飾キー, ホスト状態) → 文字 / 動作 / 未定義 / 不明
|
||||
```
|
||||
|
||||
- ホスト状態: CapsLock、かなロック、IMEのON/OFFなど、同じキーコードの結果を変える状態。
|
||||
HSTは状態の種類を引数として記述するだけで、実行時の状態を観測しない。
|
||||
- OS固有のキーの意味: `LANG1`/`LANG2`(Macのかな/英数)、変換/無変換、Cmd/Ctrlの役割など。
|
||||
- 成立の前提: 動作に必要なOS側の設定(Unicode入力の方式など)。HSTは設定を変更する機能を持たない。
|
||||
- 対応可否: 対応済み・未対応・不明の3値とする。カタログに載っていない動作を「使えない」と扱わない。
|
||||
|
||||
## 使う側の責務
|
||||
|
||||
HSTは逆引き(文字から、それを入力するキー操作を求めること)を持たない。
|
||||
逆引きは、使う側が順方向の表から求める[推測:P-1]。
|
||||
|
||||
- 順方向の表から導けるので、両方を持つと二重管理になる。
|
||||
- 逆引きの候補には、ファームウェアの機能に依存するものがある。
|
||||
例えば、US刻印のキーキャップをJIS配列のホストで使う場合、Shiftの有無で文字の組が合わないキーには、
|
||||
Shift時に別のキーコードを送る機能(QMKのKey Override)が必要になる。
|
||||
これはホストの知識ではないため、HSTに持たせない。
|
||||
|
||||
使う側の担当は次のとおり。
|
||||
|
||||
- MAPエディタ: キーコードの表示、逆引きによる入力補助、対象ホストで意味を持たないキーコードの警告
|
||||
- Firmware Generator: `send_string` が前提にする配列、Unicode入力の方式など、ホストに依存する生成設定
|
||||
|
||||
## MAPとの境界
|
||||
|
||||
- MAPは具体的なキーコードを保存する。逆引きは編集時の入力補助であり、選んだ候補のキーコードをMAPへ書く一方向の変換とする。
|
||||
実機に残るのはキーコードだけなので、この形なら実機との往復を単純に保てる。
|
||||
- HSTは割り当てを所有・変更しない。PHYのキーIDも参照しない。
|
||||
|
||||
## 対象外
|
||||
|
||||
- 実行時の状態の観測・同期(今どのOSに接続しているか、IMEがONか)
|
||||
- OS設定の変更、IMEの変換処理
|
||||
- ホスト側での再割り当て(AutoHotkey、Karabiner、IMEのローマ字テーブルなど)
|
||||
- アプリごとのショートカット(「コピー」のような操作の汎用的な辞書)
|
||||
|
||||
## 検討済み・非採用
|
||||
|
||||
- 名前をSYSとする (journal/2026-09-24-hst-layer-scope.md)
|
||||
- 逆引きの候補をプロファイルが持つ (journal/2026-09-24-hst-layer-scope.md)
|
||||
|
||||
## 未確認事項
|
||||
|
||||
### P-1 使う側が逆引きの候補と実現可否を判断できる
|
||||
|
||||
- 位置づけ: 本文「使う側の責務」が前提にしている。HSTにファームウェアの知識を持たせない線引きは、これが成り立つことに依存する。
|
||||
- 格上げ条件: US刻印のキーキャップをJIS配列のホストで使う構成で、Shiftの有無で文字の組が合わないキーについて、
|
||||
HSTの順方向の表と、Generatorのビルド設定(有効な機能)だけから、MAPエディタがKey Overrideを含む候補を作れることを試作で確認する。
|
||||
|
||||
### P-2 対象ホストを複数持つか
|
||||
|
||||
- 位置づけ: 未解決の問い。Win/Mac両用のキーボードでは、表示と検証を複数のホストに対して行う必要がある。
|
||||
OSの切り替えをMAPのレイヤーで表す既存の慣習と、どう対応付けるかも関わる。
|
||||
- 完了条件: プロジェクトが参照するプロファイルの数と、MAPのレイヤーとの対応付けの有無をユーザーが決める。
|
||||
+1
-1
@@ -120,7 +120,7 @@ VIAプロトコル0x000Dのコマンドのうち、MAPエディタが扱うも
|
||||
## 持たないもの
|
||||
|
||||
物理配置、配線、キーの出力番号は、それぞれPHY・ELC・IDXで扱う。
|
||||
OS配列やIMEの入力変換はIME側の責務とし、外部ツールで編集できる照明等の設定も、
|
||||
ホストによるキーコードの解釈は[HSTレイヤー](HSTレイヤー.md)、IMEの入力変換はOSの責務とし、外部ツールで編集できる照明等の設定も、
|
||||
VIAで通信できるという理由だけでMAPの所有データには含めない。
|
||||
MAPエディタは、キーコードを当面US配列の文字で表示する。
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
## 概要
|
||||
|
||||
PHYレイヤーは、キースイッチやキーキャップ、その他周辺部品の物理的な配置に関する情報を提供する。
|
||||
付加的な情報として、matrix情報(ELCレイヤー)や入力キー情報(MAP/IMEレイヤー)を含ませることができるが、必須ではない。
|
||||
付加的な情報として、matrix情報(ELCレイヤー)や入力キー情報(MAP/HSTレイヤー)を含ませることができるが、必須ではない。
|
||||
|
||||
## 構造
|
||||
|
||||
|
||||
+4
-4
@@ -114,12 +114,12 @@
|
||||
|
||||
### MAP-P-5 キーコードを表示するOS配列
|
||||
|
||||
- 関連仕様: [MAPレイヤー](../MAPレイヤー.md)「持たないもの」、[全体方針のIMEレイヤー](../keyboard-design-layers.md#5-imeレイヤー-入力変換)
|
||||
- 未決事項: MAPエディタがキーコードをどのOS配列の文字で表示するか。IMEレイヤーの情報を使うか。
|
||||
- 関連仕様: [MAPレイヤー](../MAPレイヤー.md)「持たないもの」、[HSTレイヤー](../HSTレイヤー.md)
|
||||
- 未決事項: MAPエディタがキーコードをどのOS配列の文字で表示するか。HSTのどのプロファイルを使うか。
|
||||
少なくともUS/JISの切り替えは欲しい。利用者が増えれば他言語への対応も求められる。
|
||||
- 保留できる理由: キーコードの割り当てと実機との読み書きは、表示に使うOS配列と独立して実装できる。
|
||||
- 再開条件: MAPエディタの表示を実装するとき、またはIMEレイヤーの仕様を検討するとき。
|
||||
- 完了条件: 表示に使うOS配列の指定方法と置き場所、IMEレイヤーとの関係をユーザーが決める。
|
||||
- 再開条件: MAPエディタの表示を実装するとき、またはHSTの[P-2](../HSTレイヤー.md#p-2-対象ホストを複数持つか)を決めるとき。
|
||||
- 完了条件: 表示に使うHSTプロファイルの指定方法と置き場所をユーザーが決める。
|
||||
|
||||
### MAP-P-6 QMKのdevelopブランチ・Community Modulesへの対応
|
||||
|
||||
|
||||
+45
-18
@@ -13,16 +13,41 @@ PHYの正本は相対座標の木だが、既存エディタ(KLE, kle-ng)の移
|
||||
|
||||
### テストケース
|
||||
|
||||
1. **60% ANSI** - 標準的なレイアウト
|
||||
2. **Split keyboard** - 左右分離型
|
||||
3. **Ergonomic layout** - カラムスタッガード + 回転
|
||||
4. **Macro pad** - シンプルな4x4
|
||||
入力はKLE JSONとし、取り込みを通してPHYへ変換する。
|
||||
|
||||
| ケース | サンプル | 主に確かめること |
|
||||
|---|---|---|
|
||||
| 60% | Cr0wn60 | 行スタッガード、幅の違うキー、左右対称配列の中央の隙間 |
|
||||
| 分割 | crkbd、jisplit89 | 左右の分離、カラムスタッガードと回転した親指キー(crkbd)、キー数の多いJIS配列の分割(jisplit89) |
|
||||
| 分割 + バリアント | Kyria、Iris Rev.7 | 回転したクラスター内のバリアント(Kyria)、部品(エンコーダ)を含む3択のバリアント(Iris Rev.7) |
|
||||
| マクロパッド | 4x4 | 最小構成 |
|
||||
| charlieplexing | Cr0wn60(VIA定義) | 行と列が同じピンを共有する配線を、ELCの接続先で表せるか |
|
||||
|
||||
リポジトリに置くサンプルは `samples/` にある。
|
||||
|
||||
- `kle/cr0wn60.json`: [EwdErna/Cr0wn60](https://github.com/EwdErna/Cr0wn60) の `keyboard-layout.json`(919cc9e、MIT)
|
||||
- `via/cr0wn60.json`: 同リポジトリの `cr0wn60-via.json`。ラベルにマトリクス位置を持つ
|
||||
- `kle/macropad-4x4.json`: このリポジトリで作成
|
||||
|
||||
Cr0wn60はcharlieplexingで、行と列に同じ9本のピンを割り当て、使わない位置をマスクしている。
|
||||
ピンの割り当ては、ファームウェア [EwdErna/qmk_firmware](https://github.com/EwdErna/qmk_firmware) の
|
||||
`dev/ewderna_22` ブランチ(68d9249)の `keyboards/ewderna/cr0wn/cr0wn60/` にある
|
||||
(`info.json` の `matrix_pins`、`cr0wn60.c` の `matrix_mask`)。
|
||||
|
||||
その他はコピーせず、[the-via/keyboards](https://github.com/the-via/keyboards)(GPL-3.0)から、コミット 9e3e9f4 の次のファイルの `layouts.keymap` を取得して使う。
|
||||
|
||||
- crkbd: `src/crkbd/crkbd.json`
|
||||
- jisplit89: `src/jisplit89/jisplit89.json`
|
||||
- Kyria: `src/splitkb/kyria.json`
|
||||
- Iris Rev.7: `src/keebio/iris/iris-rev7.json`
|
||||
|
||||
VIAの定義に含まれるKLE JSONは、ラベルにキー名ではなくマトリクス位置(`行,列`)を持つ。
|
||||
バリアントは、ラベルの別の欄に `選択肢の番号,候補の番号` の形で示す。
|
||||
キー名のラベルによる照合の検証には使えない。ELCの接続先とバリアントの検証に使う。
|
||||
|
||||
### データ例
|
||||
|
||||
以下は旧形式(`keys` 配列、`position` / `size.width`)で書かれており、現行のPHYスキーマ(`phase1-json-schema.md`)に合わせた変換が必要。
|
||||
|
||||
#### 60% ANSI PHY Layer
|
||||
#### 60% ANSI PHY Layer (抜粋)
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -38,20 +63,22 @@ PHYの正本は相対座標の木だが、既存エディタ(KLE, kle-ng)の移
|
||||
"unitSize": { "x": 19.05, "y": 19.05 }
|
||||
}
|
||||
],
|
||||
"keys": [
|
||||
// Escape key
|
||||
"root": [
|
||||
{
|
||||
"id": "k00", "profile": "standard",
|
||||
"position": { "x": 0, "y": 0 },
|
||||
"size": { "width": 1, "height": 1 },
|
||||
"metadata": { "label": "Esc" }
|
||||
"type": "key",
|
||||
"id": "k00",
|
||||
"profile": "standard",
|
||||
"transform": { "x": 0, "y": 0, "rotation": 0 },
|
||||
"size": { "w": 1, "h": 1 },
|
||||
"labels": ["Esc"]
|
||||
},
|
||||
// Space bar
|
||||
{
|
||||
"id": "k60", "profile": "standard",
|
||||
"position": { "x": 5, "y": 4 },
|
||||
"size": { "width": 6.25, "height": 1 },
|
||||
"metadata": { "label": "Space" }
|
||||
"type": "key",
|
||||
"id": "k60",
|
||||
"profile": "standard",
|
||||
"transform": { "x": 5, "y": 4, "rotation": 0 },
|
||||
"size": { "w": 6.25, "h": 1 },
|
||||
"labels": ["Space"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# IMEレイヤーの再定義(HST)と線引き
|
||||
|
||||
## 結論
|
||||
|
||||
- IMEレイヤーをHST(ホスト)レイヤーに改める。役割は、ホストがキーコードをどう解釈するかの記述。IMEの変換はOSの仕事で対象外。
|
||||
- データは、ホスト環境ごとのプロファイルを集めた共有カタログ。キーボードに依存しない。プロジェクトはプロファイルのIDと差分だけを持つ。
|
||||
- 識別はOS×ホスト配列(+必要なら入力方式)。`win-jp` などはプリセット名。
|
||||
- プロファイルは順方向の表 f(キーコード, 修飾キー, ホスト状態) → 文字/動作/未定義/不明、成立の前提、対応可否(3値)だけを持つ。
|
||||
- 逆引き・候補の生成・ファームウェアでの実現はMAPエディタとGeneratorが行う。ユーザーは、これが実現できるかに不安がある → HSTのP-1。
|
||||
- MAPはキーコードを保存する。逆引きは入力補助で、一方向の変換。
|
||||
- 複数ホストの扱いは未決 → HSTのP-2。
|
||||
|
||||
## 案の比較
|
||||
|
||||
| 論点 | 当初の提案(人との議論) | Claude | Codex | 採用 |
|
||||
|---|---|---|---|---|
|
||||
| 名前 | SYS | HOST/HST | SYS → 最終的にHOST/HSTに同意 | HST |
|
||||
| 識別子 | WIN-JAP (OS×言語) | OS×配列の構造 | OS×配列×入力方式+プロファイル名 | OS×配列(+入力方式) |
|
||||
| 範囲 | OS・言語ごとのキーの振る舞い・表示 | ホストの解釈の記述 | 意図を環境ごとの出力に変換、まで候補 → 最終的に「対応関係を提供、変更はしない」 | 記述のみ |
|
||||
| 逆引き | - | 使う側で順方向の表から求める | 候補と成立条件をプロファイルが持つ | 使う側 |
|
||||
| ホスト状態 | - | 関数の引数として記述 | 設定と実行時の状態を分ける | 両方(矛盾しない) |
|
||||
|
||||
## 根拠・経緯
|
||||
|
||||
- SYSは、HIDのSystem Control用途ページ(電源・スリープ)や「システム設定全般」と紛らわしい。hostはHIDでキーボードの接続相手を指す用語で、QMKも「host keyboard layout」と呼ぶ。
|
||||
- 言語は軸として誤り: 日本語Windowsで英語配列を使える。MacではUS/JISが入力ソースとキーボード種別で決まる。XKBはlayout/variant/optionsの3要素。
|
||||
「英語」にもUS・UKがある。`JAP` はISOコードでもない(ja/jpn)。
|
||||
- 逆引きをプロファイルに持たせない理由: (1) 順方向の表から導けるので二重管理になる。
|
||||
(2) 候補がファームウェアの機能に依存する。例: US刻印+JISホストでShiftの組が合わないキーにはKey Overrideが要る。HSTにQMKの知識が混ざる。
|
||||
- Codexの指摘で採用したもの: 表示の切り替えと送信内容の変更を混ぜない。知らない動作を「使えない」と扱わない(対応可否を3値にする)。OS設定への依存は記述する。
|
||||
- MAPの正本をキーコードにする理由の修正: Claudeは当初「VIAでは実機にキーコードしか残らず、意図を復元できないので、キーコードでなければならない」とした。
|
||||
Codexが、意図をプロジェクト側に残す設計も可能で、難しくなるのは実機で変更された値の取り込みだけだと反論し、これが正しい。
|
||||
採用する理由は「実機との往復を単純に保てるから」とする。
|
||||
- 「コピー」のような操作の辞書は、アプリやユーザー設定まで相手が広がるので対象外。
|
||||
- 未採用のアイデア: キートップの刻印生成にHSTを使う(PHYのラベルへ流す)。検討していないので仕様には書かない。
|
||||
@@ -57,11 +57,14 @@ ELCはIDXを参照せず、IDXもELCを参照しない。MAPもIDXを参照し
|
||||
- **備考**: キーの参照にPHYのキーIDを使う。配列としての並べ替えは、出力時にバリアント選択後のIDXの並び順で行う
|
||||
- **詳細**: [MAPレイヤー](MAPレイヤー.md)。動作定義とキーごとの設定の保存形式は、[MAPのP-1](MAPレイヤー.md#p-1-動作定義とキーごとの設定の保存形式)で扱う
|
||||
|
||||
### 5. IMEレイヤー (入力変換)
|
||||
### 5. HSTレイヤー (ホスト)
|
||||
|
||||
- **役割**: キーコードと実際の入力文字の対応
|
||||
- **対応ツール**: OS
|
||||
- **備考**: MAPレイヤー設計時に考慮が必要
|
||||
- **役割**: 接続先のホスト(OSとキーボード配列の設定)が、キーコードをどう解釈するかの記述
|
||||
- **入力**: なし。どの層も参照せず、MAPエディタとFirmware Generatorから参照される
|
||||
- **対応ツール**: OSのキーボード配列、QMKの言語別キーコード(`keymap_japanese.h` など)
|
||||
- **出力**: ホスト環境ごとのプロファイル。キーボードに依存しない共有カタログとする
|
||||
- **備考**: IMEのかな漢字変換はOSの責務で、HSTの対象外
|
||||
- **詳細**: [HSTレイヤー](HSTレイヤー.md)
|
||||
|
||||
## ツール設計方針
|
||||
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
[
|
||||
[
|
||||
{
|
||||
"p": "DCS R1"
|
||||
},
|
||||
"Esc",
|
||||
{
|
||||
"x": 0.25
|
||||
},
|
||||
"!\n1",
|
||||
"@\n2",
|
||||
"#\n3",
|
||||
"$\n4",
|
||||
"%\n5",
|
||||
{
|
||||
"x": 1
|
||||
},
|
||||
"^\n6",
|
||||
"&\n7",
|
||||
"*\n8",
|
||||
"(\n9",
|
||||
")\n0",
|
||||
"_\n-",
|
||||
{
|
||||
"x": 0.75
|
||||
},
|
||||
"+\n="
|
||||
],
|
||||
[
|
||||
{
|
||||
"p": "DCS R2",
|
||||
"a": 0,
|
||||
"w": 1.5
|
||||
},
|
||||
"Tab\n\n\n\n\n1.5",
|
||||
{
|
||||
"a": 4
|
||||
},
|
||||
"Q",
|
||||
"W",
|
||||
"E",
|
||||
"R",
|
||||
"T",
|
||||
{
|
||||
"x": 0.5
|
||||
},
|
||||
"Y",
|
||||
"U",
|
||||
"I",
|
||||
"O",
|
||||
"P",
|
||||
"{\n[",
|
||||
{
|
||||
"x": 0.5,
|
||||
"a": 0,
|
||||
"w": 1.5
|
||||
},
|
||||
"Backspace\n\n\n\n\n1.5"
|
||||
],
|
||||
[
|
||||
{
|
||||
"p": "DCS R3",
|
||||
"w": 1.75
|
||||
},
|
||||
"Ctrl\n\n\n\n\n1.75",
|
||||
{
|
||||
"a": 4
|
||||
},
|
||||
"A",
|
||||
"S",
|
||||
"D",
|
||||
"F",
|
||||
"G",
|
||||
"H",
|
||||
"J",
|
||||
"K",
|
||||
"L",
|
||||
":\n;",
|
||||
"\"\n'",
|
||||
{
|
||||
"a": 0,
|
||||
"w": 2.25
|
||||
},
|
||||
"Enter\n\n\n\n\n2.25"
|
||||
],
|
||||
[
|
||||
{
|
||||
"p": "DCS R4",
|
||||
"w": 1.25
|
||||
},
|
||||
"Shift\n\n\n\n\n1.25",
|
||||
{
|
||||
"x": 0.25,
|
||||
"a": 4
|
||||
},
|
||||
"Z",
|
||||
"X",
|
||||
"C",
|
||||
"V",
|
||||
"B",
|
||||
{
|
||||
"x": 0.5
|
||||
},
|
||||
"N",
|
||||
"M",
|
||||
"<\n,",
|
||||
">\n.",
|
||||
"?\n/",
|
||||
"|\n\\",
|
||||
{
|
||||
"x": 0.25,
|
||||
"a": 0,
|
||||
"w": 1.75
|
||||
},
|
||||
"Shift\n\n\n\n\n1.75"
|
||||
],
|
||||
[
|
||||
{
|
||||
"x": 1.25,
|
||||
"w": 1.25
|
||||
},
|
||||
"Win\n\n\n\n\n1.25",
|
||||
{
|
||||
"w": 1.25
|
||||
},
|
||||
"Alt\n\n\n\n\n1.25",
|
||||
{
|
||||
"x": 6.5,
|
||||
"w": 1.25
|
||||
},
|
||||
"Alt\n\n\n\n\n1.25",
|
||||
{
|
||||
"w": 1.25
|
||||
},
|
||||
"Ctrl\n\n\n\n\n1.25"
|
||||
],
|
||||
[
|
||||
{
|
||||
"r": 180,
|
||||
"rx": 4.5,
|
||||
"ry": 4.5,
|
||||
"y": -0.5,
|
||||
"x": -0.25,
|
||||
"a": 4
|
||||
},
|
||||
"\n\n\nFn"
|
||||
],
|
||||
[
|
||||
{
|
||||
"rx": 6.75,
|
||||
"y": -0.5,
|
||||
"x": -2.5,
|
||||
"p": "DCS SPACE",
|
||||
"a": 3,
|
||||
"w": 2.25
|
||||
},
|
||||
"\n\n\n\n\n2.25",
|
||||
{
|
||||
"w": 2.25
|
||||
},
|
||||
"\n\n\n\n\n2.25"
|
||||
],
|
||||
[
|
||||
{
|
||||
"rx": 9.5,
|
||||
"y": -0.5,
|
||||
"x": -0.75,
|
||||
"p": "DCS R4",
|
||||
"a": 4
|
||||
},
|
||||
"\n\n\nCode"
|
||||
]
|
||||
]
|
||||
@@ -0,0 +1,6 @@
|
||||
[
|
||||
["7", "8", "9", "/"],
|
||||
["4", "5", "6", "*"],
|
||||
["1", "2", "3", "-"],
|
||||
["0", ".", "Enter", "+"]
|
||||
]
|
||||
@@ -0,0 +1,183 @@
|
||||
{
|
||||
"name": "cr0wn60",
|
||||
"vendorId": "0xADE1",
|
||||
"productId": "0x0001",
|
||||
"lighting": "qmk_rgblight",
|
||||
"keycodes": [],
|
||||
"matrix": { "rows": 9, "cols": 9 },
|
||||
"layouts": {
|
||||
"keymap": [
|
||||
[
|
||||
{
|
||||
"p": "DCS R1"
|
||||
},
|
||||
"1,0",
|
||||
{
|
||||
"x": 0.25
|
||||
},
|
||||
"2,0",
|
||||
"3,0",
|
||||
"4,0",
|
||||
"5,0",
|
||||
"6,0",
|
||||
{
|
||||
"x": 1
|
||||
},
|
||||
"0,1",
|
||||
"2,1",
|
||||
"3,1",
|
||||
"4,1",
|
||||
"5,1",
|
||||
"6,1",
|
||||
{
|
||||
"x": 0.75
|
||||
},
|
||||
"7,1"
|
||||
],
|
||||
[
|
||||
{
|
||||
"p": "DCS R2",
|
||||
"a": 0,
|
||||
"w": 1.5
|
||||
},
|
||||
"0,2",
|
||||
{
|
||||
"a": 4
|
||||
},
|
||||
"1,2",
|
||||
"3,2",
|
||||
"4,2",
|
||||
"5,2",
|
||||
"6,2",
|
||||
{
|
||||
"x": 0.5
|
||||
},
|
||||
"0,3",
|
||||
"1,3",
|
||||
"2,3",
|
||||
"4,3",
|
||||
"5,3",
|
||||
"6,3",
|
||||
{
|
||||
"x": 0.5,
|
||||
"a": 0,
|
||||
"w": 1.5
|
||||
},
|
||||
"7,3"
|
||||
],
|
||||
[
|
||||
{
|
||||
"p": "DCS R3",
|
||||
"w": 1.75
|
||||
},
|
||||
"0,4",
|
||||
{
|
||||
"a": 4
|
||||
},
|
||||
"1,4",
|
||||
"2,4",
|
||||
"3,4",
|
||||
"5,4",
|
||||
"6,4",
|
||||
"0,5",
|
||||
"1,5",
|
||||
"2,5",
|
||||
"3,5",
|
||||
"4,5",
|
||||
"6,5",
|
||||
{
|
||||
"a": 0,
|
||||
"w": 2.25
|
||||
},
|
||||
"7,5"
|
||||
],
|
||||
[
|
||||
{
|
||||
"p": "DCS R4",
|
||||
"w": 1.25
|
||||
},
|
||||
"0,6",
|
||||
{
|
||||
"x": 0.25,
|
||||
"a": 4
|
||||
},
|
||||
"1,6",
|
||||
"2,6",
|
||||
"3,6",
|
||||
"4,6",
|
||||
"5,6",
|
||||
{
|
||||
"x": 0.5
|
||||
},
|
||||
"0,7",
|
||||
"1,7",
|
||||
"2,7",
|
||||
"3,7",
|
||||
"4,7",
|
||||
"5,7",
|
||||
{
|
||||
"x": 0.25,
|
||||
"a": 0,
|
||||
"w": 1.75
|
||||
},
|
||||
"6,7"
|
||||
],
|
||||
[
|
||||
{
|
||||
"x": 1.25,
|
||||
"w": 1.25
|
||||
},
|
||||
"0,8",
|
||||
{
|
||||
"w": 1.25
|
||||
},
|
||||
"1,8",
|
||||
{
|
||||
"x": 6.5,
|
||||
"w": 1.25
|
||||
},
|
||||
"6,8",
|
||||
{
|
||||
"w": 1.25
|
||||
},
|
||||
"7,8"
|
||||
],
|
||||
[
|
||||
{
|
||||
"r": 180,
|
||||
"rx": 4.5,
|
||||
"ry": 4.5,
|
||||
"y": -0.5,
|
||||
"x": -0.25,
|
||||
"a": 4
|
||||
},
|
||||
"2,8"
|
||||
],
|
||||
[
|
||||
{
|
||||
"rx": 6.75,
|
||||
"y": -0.5,
|
||||
"x": -2.5,
|
||||
"p": "DCS SPACE",
|
||||
"a": 3,
|
||||
"w": 2.25
|
||||
},
|
||||
"4,8",
|
||||
{
|
||||
"w": 2.25
|
||||
},
|
||||
"3,8"
|
||||
],
|
||||
[
|
||||
{
|
||||
"rx": 9.5,
|
||||
"y": -0.5,
|
||||
"x": -0.75,
|
||||
"p": "DCS R4",
|
||||
"a": 4
|
||||
},
|
||||
"5,8"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user