QMK Firmwareのkeymap.cからアスキーアートを出力するスクリプトを作った
Keymapviz
Keymapviz: https://github.com/yskoht/keymapviz
導入
Python3で動きます。
$ pip3 install keymapviz
使い方
レイヤーごとにアスキーアートを出力します。ファイルパスにキーボードの文字列があればそこからキーボードを特定します。
現状はergodox(ergodox_ez)とlets_splitにしか対応していませんが…
以下のキーボードレイアウトに対応しました。(2018/08/01)
- crkbd
- ergo42
- ergodash
- ergodox_ez(ergodox)
- fortitude60
- helix
- lets_split
$ keymapviz.py qmk_firmware/keyboards/ergodox_ez/keymaps/default/keymap.c /* * * .---------------------------------------------. .---------------------------------------------. * | EQL | 1 | 2 | 3 | 4 | 5 | LEFT | ! RGHT | 6 | 7 | 8 | 9 | 0 | MINS | * !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! * | DELT | Q | W | E | R | T |TG(SYMB| !TG(SYMB| Y | U | I | O | P | BSLS | * !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! * | BSPC | A | S | D | F | G |-------! !-------! H | J | K | L |LT(MD|GUI_T(K| * !-------+-----+-----+-----x-----x-----!ALL_T(K! !MEH_T(K!-----x-----x-----+-----+-----+-------! * | LSFT |CTL_T| X | C | V | B | | ! | N | M |COMM | DOT |CTL_T| RSFT | * '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' * |LT(SYM|QUOT |LALT(|LEFT |RGHT | ! UP |DOWN |LBRC |RBRC | FN1 | * '------------------------------' '------------------------------' * .---------------. .---------------. * |ALT_T(K| LGUI | ! LALT |CTL_T(K| * .-------+-------+-------! !-------+-------+-------. * ! SPC ! BSPC | HOME | ! PGUP | TAB ! ENT ! * ! ! !-------! !-------! ! ! * | | | END | ! PGDN | | | * '-----------------------' '-----------------------' */ (以下略)
Keyboard Layout Editorで使えるjsonファイルも出力できます。
-oで指定されたファイル名に含まれる{}が添え字に置換されてレイヤーごとにファイルになります。
$ keymapviz.py qmk_firmware/keyboards/lets_split/keymaps/default/keymap.c -t json -o 'lets_split{}.json' $ ls lets_split*.json lets_split0.json lets_split1.json lets_split2.json lets_split3.json lets_split4.json lets_split5.json
このjsonをKeyboard Layout Editorにアップロードします。

すると以下のような感じで画像にしてくれます。

QMK FirmwareのKeycodesと凡例の関係はlegends.pyで変更できます。
この辞書に書いていないものは接頭辞のKC_を取り除いたものになります。
legends = {
'XXXXXXX': '',
'_______': '',
'KC_TRNS': '',
'KC_NO': '',
'LCTL(KC_Z)': 'UNDO',
'LCTL(KC_Y)': 'REDO',
'LCTL(KC_C)': 'COPY',
'LCTL(KC_V)': 'PASTE',
'LCTL(KC_X)': 'CUT',
'KC_PSCREEN': 'PSc',
# (以下略)
}
感想
keymap.cを絵にするんじゃなくてKeyboard Layout Editorからkeymap.cを作れるようにすべきだったのかもしれない- ergodoxだとそういうツールあったりするけど
- 結局アスキーアートだすのもjson出すのもテンプレートを作っておかないといけないのがめんどくさい
MATRIX_ROWS,MATRIX_COLSがあるんだから自動でいい感じのレイアウトを作れるのかもしれない
keymapviz.py自体がpngやらjpegやらを作るわけでもないのにvizと名付けたのは大仰だったかもしれない