2023年の振り返り
キーボード #2 Advent Calender 2023 9日目担当のせきごんです。BLE Micro Proなどキーボード関連のモジュールを色々作っています。
今年作ったものを振り返っていきます。
今年作ったもの
Keyboard Quantizer Mini
Keyboard Quantizerの小型版を作りました。Keyboard Quantizerは、USBキーボード・マウスとPCの間に挟むことでQMKを使って設定を変更できるようにするアダプタです。 2021年末に作ったPico-PIO-USBを利用することでRP2040単体でUSBホスト・デバイスが実現できたため、基板を小型化できました。
Keyboard Quantizer Mini - のぎけす屋 - BOOTH
GitHub - sekigon-gonnoc/keyboard-quantizer-doc
ファームウェアの構成も合わせて変更しました。RemapやVialからキーマップを変更できるバージョンと、YAML形式の設定ファイルを使用するバージョンの2種類を作成しました。 後者のバージョンを作成した理由はいくつかあります。
- Remap, Vialよりもさらに細かく色々な設定を変更したい
- テキストで設定を管理したい
- 後から設定を見返したときに、どのキーに置き換えを設定しているのか一目でわかるようにしたい
- コメントを付けたい
- 差分管理できるようにしたい
- GUIをポチポチするのが面倒くさい
PCでコンパニオンアプリを実行することで、フォーカスが当たっているウィンドウ合わせてキーマップや設定を変えられるようにもしてみました。
設定サンプル1
# マウス用設定
- application:
# 常時有効なキーマップを定義する
keymaps:
- layer:
# レイヤ0ではボタン6,7,8の動作を変更する
id: 0
keys:
# ボタン6,7でコピペ
KC_BTN6: LCTL(KC_C)
KC_BTN7: LCTL(KC_V)
# ボタン8をタップしたときは中クリック、長押ししたときはレイヤ1に移動
KC_BTN8: LT(1, KC_BTN3)
mouse:
# xyの移動速度を1.5にする
scale_x: 1.5
scale_y: 1.5
- layer:
# レイヤ1では各ボタン、ホイール、ジェスチャに機能を割り当てる
id: 1
keys:
KC_BTN1: KC_ENT
KC_BTN2: KC_BSPC
# 中クリックで再生・停止
KC_BTN3: KC_MEDIA_STOP
# レイヤ1でのホイールの動作を割り当てる
# 左右で曲送り、曲戻し
KC_MS_WH_RIGHT: KC_MEDIA_PREV_TRACK
KC_MS_WH_LEFT: KC_MEDIA_NEXT_TRACK
# 上下でウィンドウ切り替え
KC_MS_WH_UP: LALT(KC_TAB)
KC_MS_WH_DOWN: LSA(KC_TAB)
# レイヤ1の状態でカーソルを動かし、レイヤ0に戻るタイミングでマウスジェスチャが実行される
# 左下に移動したらEndを送信
MS_GESTURE_DL: KC_END
# 左上に移動したらHomeを送信
MS_GESTURE_UL: KC_HOME
設定サンプル2
- application:
# 常時有効な設定
keymaps:
- layer:
id: 0
keys:
# CAPSを単押しTAB, 長押しCTRL
KC_CAPS: LCTL_T(KC_TAB)
# RSHIFTを単押しでLEADER, 長押しでSHIFT
KC_RSFT:
{ tap_dance: { single_tap: QK_LEAD, single_hold: KC_RSFT } }
combos:
- combo:
# D,L同時押しで一行削除
keys: [KC_D, KC_L]
keycode:
{
macro:
[
{ action: down, keycodes: [KC_LCTL] }, { action: tap, keycodes: [KC_LEFT] }, { action: down, keycodes: [KC_LSFT] },
{ action: tap, keycodes: [KC_RGHT] }, { action: up, keycodes: [KC_LCTL, KC_LSFT] }, { action: tap, keycodes: [KC_BSPC] },
],
}
# 100ms以上長押ししたときだけ発動
term: 100
only: hold
leaders:
# LEADERのあとに入れたキーの順番で分岐
- leader:
# twitterを開く
keys: [KC_T, KC_W, KC_T]
keycode: { command: start firefox -ArgumentList "-url https://twitter.com" }
- leader:
# コンパニオンアプリを送り込む
keys: [KC_C, KC_M, KC_P]
keycode: LAUNCH_COMPANION
- application:
# フォーカス中の画面がchatGPTのときだけ有効なキーマップ
url: https://chat.openai.com/.*
overrides:
# Shift+Enter押したらEnter, Enter押したらShift+Enterが押されるようにする
- basic:
trigger_mods:
- Shift
trigger_key: KC_ENT
replacement_key: KC_ENT
- w_layer_neg:
trigger_mods: []
trigger_key: KC_ENT
replacement_key: S(KC_ENT)
layers: 0xffff
negative_mask:
- Shift
- application:
# Libreoffice Impressのときだけ有効
title: ".*Impress$"
leaders:
- leader:
# 上ぞろえ
keys: [KC_A, KC_T]
keycode: { macro: [{ action: tap, keycodes: [KC_LALT] }, ont] }
Vial対応BLE Micro Pro
RemapがQMK0.18準拠のプロトコルのサポートをやめるかもしれないということで、BLE Micro Proのファームウェアを更新する必要がありました。 今後も設定ツールの変更にあわせてオンタイムにファームウェアを更新し続けるのは大変なので、Vialに移行することにしました。
VialもWebブラウザからQMKのキーマップを設定できるツールで、コンボやタップダンスやその他各種設定も変更できます。 ブラウザ上だけでなくローカル環境での実行ファイルも用意されています。 また、キーレイアウトなどの情報をキーボード側に保持しているほか、ファームウェアのバージョンに応じてキーコード定義を切り替えるようにもなっています。
これらの特徴のおかげで、一度セットアップを整えれば各種サービスの運営状況によらず長く使い続けられるようになると考えています。
BLE Micro Proは共通のファームウェアに対してキーボードごとの設定ファイルを書き込む構成です。 この設定ファイルをQMKのinfo.jsonから生成するツールも更新し、Vial用の設定ファイルも生成できるようにしました。
なお、現時点では最新版のRemapにも対応しています。 オリジナルのVialは古いVIAプロトコルにしか対応していないのですが、ちょっとだけ変更を加えて最新のVIAプロトコルにも対応しました。
https://sekigon-gonnoc.github.io/BLE-Micro-Pro
今年はあんまり捗りませんでした。トラックボール付きで無線対応のキーボードとか、そのために更に消費電力を削減したBLE Micro Proのファームウェアなども開発中です。
この記事はCorne ECで書きました。