QMK Firmwareのkeymap.cからアスキーアートを出力するスクリプトを作った

Keymapviz

Keymapviz: https://github.com/yskoht/keymapviz

導入

Python3で動きます。

$ pip install -r requirements.txt

使い方

レイヤーごとにアスキーアートを出力します。ファイルパスにキーボードの文字列があればそこからキーボードを特定します。 現状はergodox(ergodox_ez)lets_splitにしか対応していませんが…

以下のキーボードレイアウトに対応しました。(2018/08/01)


$ 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にアップロードします。

f:id:yskoht:20180225204057p:plain
Keyboard Layout Editorにjsonをアップロード

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

f:id:yskoht:20180225204222p:plain


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を作れるようにすべきだったのかもしれない
  • 結局アスキーアートだすのもjson出すのもテンプレートを作っておかないといけないのがめんどくさい
    • MATRIX_ROWS, MATRIX_COLSがあるんだから自動でいい感じのレイアウトを作れるのかもしれない
  • keymapviz.py自体がpngやらjpegやらを作るわけでもないのにvizと名付けたのは大仰だったかもしれない