Keyboard Quantizer でぼくのかんがえたさいきょうのキーボードを現実化する

カーソルキーも Home も End も必要なので長年 RealForce を使っていた自分が Keyboard Quantizer を手に入れたので『ぼくのかんがえたさいきょうのキーボード』を現実化した (現在進行形でまだ課題もある)。

生来的には物理 JIS 論理 ANSI 化まで進めたいが計画途中なのと、具体的な問題点も多少ある。

# Keyboard Quantizer とは
https://github.com/sekigon-gonnoc/keyboard-quantizer-doc
> Keyboard Quantizerは一般的なUSBキーボードを自作キーボード用のファームウェアの定番であるQMKに対応させるためのボードです。

ここら辺ではんだ付けしなくてもいい完成品が買えます (自分にとってはとても重要だった部分)
https://booth.pm/ja/items/2256612
https://shop.yushakobo.jp/en/products/2806?_pos=1&_sid=11a802405&_ss=r

# 変態的設定の構想
以前から『あらゆるソフトで HJKL カーソル移動ができるキーボードがあればいいんじゃね?』という妄想をしていた。
妄想だけじゃなく何度も実現に向けてチャレンジしたが、自分は手に微妙な震えがあったりするのもありはんだ付けは大きな障害であった。

Keyboard Quantizer (完成品版) は<del>私の母親になってくれたかもしれない女性だ</del>私の妄想を実現化してくれたアイテムになった。

追加で更に変態的な『ずり下げモード』も思いついたので入れた (まだ慣れてなくてあまり使えてないが layer としては必要なので設定はしてある。

## モード
QMK のレイヤーに自分なりの名前を付けておく事は大事だと思う。
最初脳内だけで完結させようとしたが簡単に破綻したので紙とペンで一生懸命考えた。

- layer 0 - 基本通常モード
- layer 1 - 基本 shift モード
- layer 2 - 基本 ctrl モード
- layer 3 - 左ずり下げ通常モード
- layer 4 - 右ずり下げ通常モード
- layer 5 - 左ずり下げ shift モード
- layer 6 - 右ずり下げ shift モード
- layer 7 - HJKL 通常モード
- layer 8 - HJKL 戻り中 モード
- layer 9 - HJKL ctrl モード

Keyboard Quantizer を Remap で設定する場合に使える全レイヤーを使ってしまった。
ギリギリだが足りて良かった。
以下、実際には接続するキーボードによって微妙な物理配置の差があると思うのでそこは個別によしなにするとして大枠の設定を書いておく (自分用の備忘録ともいう)

ここで nfer と書いてあるのは無変換キー、xfer と書いてあるのは変換キーです。

### layer 0 - 基本通常モード
caps lock mo(2)
*shift mo(1)
*ctrl -> F21
nfer mo(3)
xfer mo(4)

### layer 1 - 基本 shift モード
backspace -> delete
nfer mo(5)
xfer mo(6)
その他のキーは左シフトを modifier にする。

### layer 2 - 基本 ctrl モード
nfer -> F14
xfer -> F15
その他のキーは左コントロールを modifier にする。

### layer 3 - 左ずり下げ通常モード
xfer to(7)
A -> 1
S -> 2
D -> 3
(中略)
K -> 8
L -> 9
:; -> 0
"' -> -_
non US #~ (む) -> +=

### layer 4 - 右ずり下げ通常モード
A -> 1 (左シフトを modifier にする)
S -> 2 (左シフトを modifier にする)
D -> 3 (左シフトを modifier にする)
(後略)

### layer 5 - 左ずり下げ shift モード
xfer to(7)
A -> 1 (左シフトを modifier にする)
S -> 2 (左シフトを modifier にする)
D -> 3 (左シフトを modifier にする)
(後略)

### layer 6 - 右ずり下げ shift モード
A -> 1 (左シフトを modifier にする)
S -> 2 (左シフトを modifier にする)
D -> 3 (左シフトを modifier にする)
(後略)

### layer 7 - HJKL 通常モード
ESC to(0)
xfer mo(8)
caps lock mo(9)
X -> delete
I -> to(0)
*Shift -> *Shift
Shift* -> Shift*
H -> 左
J -> 下
K -> 上
L -> 右
(押し間違えに早く気付く為にそれ以外は無効にしておくのがよい)

### layer 8 - HJKL 戻り中 モード
nfer to(0)
(押し間違えに早く気付く為にそれ以外は無効にしておくのがよい)

### layer 9 - HJKL ctrl モード
H -> Home
L -> End
*Shift -> *Shift
Shift* -> Shift*
nfer to(0)
z -> z (左コントロールを modifier にする)
x -> x (左コントロールを modifier にする)
c -> c (左コントロールを modifier にする)
v -> v (左コントロールを modifier にする)

## 操作の仕方
### 英数字と日本語の切り替え
まずニュートラルな状態では普通のキーボードのように使える。
英数を入力する為に日本語入力を off にする場合は caps lock を押しながら nfer を押す。
日本語入力を on にする場合は caps lock を押しながら xfer を押す。

(と書いたが上記の設定を適用するとこの操作ではそれぞれ F14 と F15 が押されることになる。これを実際に IME の off と on にするのは IME の設定側でやる)

### HJKL でのカーソル移動モード
nfer を押しながら xfer を押すと HJKL カーソル移動モードに入る。
HJKL カーソル移動モードで xfer を押しながら nfer を押すとニュートラルモードに戻る。

ついでだがこの遷移の途中の nfer か xfer かしか押していない状態で最上段が押しやすい位置にずり落ちてくる。

## 課題
この設定にすると shift 単体と ctrl 単体は設定に吸われてしまい判別できなくなる。
具体的に困るのは GUI 操作で複数の項目を選択する時、shift の単体押しをしていた。
一旦、右 shift については設定で吸われていないので右 shift でしのいでいる。
Keyboard Quantizer の前段に、普通は絶対押さないようなキーが常に押されている状態にする何かを入れて、それを普段は無視、modifier 押され状態ではモディファイアキーにできないかな、と構想中。

## ヒント
caps lock を ctrl のようにしている為、Windows のレジストリで caps lock と ctrl を入れ替えている場合は上手く行かないだろう。
これはいくつか解決方法がある。
caps lock も ctrl にする (ctrl は caps lock にしない) 設定なら問題ない。
そもそもデスクトップで他のキーボードが存在しない状況ならば caps lock と ctrl 関連の設定をいじらないでそのままにしておくのもよい。

どうしても caps lock と ctrl を swap する設定にしたい場合は、Keyboard Quantizer を多段にして、キーボードに近い方でこの設定を、本体に近い方で左 ctrl を caps lock に入れ替えればいいと思う。

## これからの構想
まずは現在 JIS で押している記号類を ANSI 風にしようと思っている (Enter を |\ にして、「む」を enter に、「ろ」を ~` に、¥| を BS にすれば半角/全角は ESC に、元々の BS に delete が割り当て可能な予定だ。

現在 F21 を割り当てた元々の左下の ctrl はターミナルソフトの時だけ ctrl の役割を担ってもらえるようなターミナルソフトをいつかそのうち作りたいと夢想している。
現状の Windows だと GUI で使う Ctrl とターミナルでの Ctrl が区別できていない状態なのを区別したい。この辺りは ⌘ と Ctrl がちゃんと分けられている Mac のようにしたい。

現在、複数のデバイスをハブを介して接続した場合の Keyboard Quantizer の挙動は to() 系はデバイス共通だが mo() 系はデバイス毎になるように見える。
この挙動は良さそうにも思えるが、前述の shift 単体押せない問題はマウスも一緒にかませばいいのかと思ったが、別デバイスになる為か想定通りにならなかった。

# オチ
自分で妄想しておきながら、この変態設定は慣れるのかなり難しい。
とはいえ、二日目程度でかなり Home や End や元々のカーソルキーを押さない状態になってきた。
これなら半年後くらいには慣れているだろうと思う。

問題点はラップトップの内蔵キーボードが今より更に打ちづらく感じるようになるだろうという事 (今でも尊師スタイルしてるくらいなのに)

ちなみに置物と化していた HHKB JIS がこの設定のおかげで戦線に加わったので元は取れている (とかいいながら Keyboard Quantizer を追加で 6 個くらい注文したのでお金は出ていく一方である)

あとマウスもこれでボタン押しながらのホイール操作を水平ホイール操作にした。

# 備考
この記事は記事にみせかけた自分専用の備忘録なので、後で加筆修正します。