Previous Post | Top | Next Post |
TOC
キーマップ改善の方針 (タップとホールドの有効利用)
QMKを使うcgc56やcgg56というQMKを利用したキーボード等を使って、色々試して気づいたり考えたことを以下に記します。
- メンタルストレス無く、フィジカルストレスの小さい指の動きが少ないキーマップが欲しい。
- 親指がカバーするのは、横に並ぶキーが少ないのが望ましい
- 人差し指は縦の動きで2列カバーする。
- 他の指は縦1列の動き以外はしない。
- 「QWERTY」は当分メインのキーマップのベース。
- 「QWFRTY」はローマ字入力用オプションの検討中キーマップ (→ 結局やめた)。
- 高速打鍵性自体は私の目指す所では無い。
- キーのピッチをきっちり確保するにはNC工具での工作が不可欠。
- NCとしてはPCBが安いし、PCBを注文する際に10cm角に収めると更に安い。
- 統計結果から、記号では「
_
」へのアクセスには要配慮。 - 14" のノートパソコン(Thinkpad T14 Gen1)に無いキーの優先度は低いと割り切る。
- CURSORキーは重要なので、アクセス性は重要で、片手での操作性も重要。
- TENキーはそれほど使用上重要では無いが、組み込むなら片手での操作性に配慮重要。
- QMKのMOUSEキーはそれほど便利では無いので、組み込む際のアクセス性は重要で無い。
QMKではタップとホールドで出力キーが違う設定できますが、タップの入力文字の連続入力がカチカチ連打だと大変な気がしていました。
実際には、一度タップ直後の再タップ時にホールドするとタップに対応する文字の長押しになるようで、OS側が連打処理してくれ使い勝手良好です。
あまり複雑なキー動作の多重化は混乱を招き使い勝手が悪くなるのですべきでは無いですが、タップとホールドを上手に使えば悪くない感じです。
キーマップ
最初にトライしたレイヤー移動とモード変更機能のすべてを親指のキーに任せるアプローチには無理がありました。
キーマップ osamu
そこで30%キーボード系のferrisのキーマップをヒントにし、「基本的に使う部分」を、左5x3_2
キーと右5x3_2
キーと限定し、親指はレイヤー移動のみにしたキーマップを組むのがフィジカルストレス低減によさそうです。
│***│ Q │ W │ E │ R │ T │***│***│ Y │ U │ I │ O │ P │***│
│***│lsA│lcS│laD│lgF│raG│***│***│raH│lgJ│laK│lcL│ls;│***│
│***│ Z │ X │ C │ V │ B │***│***│ N │ M │ , │ . │ / │***│
│***│***│***│***│Es3│Sp1│***│***│Sp2│En4│***│***│***│***│
ここのポイントは、人差し指〜小指のホームポジションのA行のキーに関して、通常の文字キー入力とモードキー(LSFT, LCTL, LALT, LGUI, RALT)入力を、MT()
機能をタップとホールドで使い分け、両方ができるようにしています。このおかげで、アクセスのよい自然なポジションでタイプできます。
- 人差し指内側1つ隣: RALT (AltGr)
- 人差し指: LGUI
- 中指: LALT
- 薬指: LCTL
- 小指: LSFT
これで端のキー(特に下の角のキー)を基本使わ無くてもよくなるので、Alice配列にしなくとも、手首へのストレスが下げられています。
一番下の4つの親指キーは、LT()
機能を使って、4つあるTEMPORARY LAYER選択操作に加え、12までのよくアクセスする非アルファベットキーの入力ができるようにしています。
Retro ShiftやAuto Shiftを有効にしていません。
Retro Tappingも有効にしていません。これは副作用がきつい。
あとで気づいたのですが、A guide to home row modsはこの手の設定が上手く説明されていました。
Thumb(親指)キーで押している際に1時的に有効化する一時レイヤーは実質2つで、横3列の30物理キーで90のキーがカバーできます。MT()
機能を上手につかえばThumbキーは2つでもレイヤー実現に充分です。ただ、押しやすさと、LT()
に加えMT()
まで使うのを避けるために、各レイヤーを左右別にして4レイヤーとして打ちやすくレスポンスよくしています。
- Thumbキーを押している側か最初に長押ししたホームポジションのA行のキーはモードキーとなります。
- Thumbキーのホームポジションを押すと、ファンクションキー・数字・キーボード端の記号のレイヤー(FL1, FL2)です。
- Thumbキーの隣のポジションを押すと、カソールキー・固定レイヤー移動キーのレイヤー(FL3, FL4)です。
上記で触れた1時レイヤー以外に、レイヤー移動後固定される固定レイヤーが4つあり、カーソル・テンキー・マウスキー・キーボード自体の設定レイヤーとなります。
上記では分かり易い様に、cgc56上の「基本的に使う部分」以外のキーの説明を省略しました。もちろんこれらも使えるようになっています。
- 従来のキーボード両端の小指で操作するキー類や最下行のキー類には、旧来のキーボードと同様の機能を与え、学習障壁を下げるようにします。(小指の操作は嫌ですので、慣れたらなるべく使いません。)
- 中心部のキー類には、狭いので一時レイヤーに押し込んだキーボード端の記号とか
F11
やF12
、ダイナミックマクロ関連キー、カーソール関連キーのアクセスを改善するために重複配置します。
こうしてできたキーマップの詳細の最新の状況は、私の以下のQMKソースを参照:
これらは通常キーボードからの移行によく配慮されていてなかなか良い感じです。ただほとんど使わないキーがある一方で、特に片手マウスでのカーソール関連への少々アクセスが面倒でした。
キーマップ wide
そこで、上記のデーターはそのままで、別に左右のアルファベットの間隔を更に広げ、カーソールキーに真ん中で直接アクセスできるようにし簡素化を考えました。
キーマップwideを用意しました。
キーマップ中の左上文字がFn1~F4の何れも押さない場合、右下文字がFn1かF2のいずれかが押された場合に入力されます。
キーマップ mini
その後wideを使ってみて、ちょっと真ん中のキーにアクセスしにくいのが気になりました。
レイヤー数を減らしたかったので、更に簡素化したキーマップminiを用意しました。
30%系のキーマップはとにかくホームからほとんど手が動かないので悪くないです。ただ、タップをする際にはキーを意識的に離す必要があります。
(FnレイヤーでのMODEキーが交差打鍵必須の時には、片手打ち不可の問題がありましたが、FnレイヤーもMOD-TAP化したので、その問題はほぼ解消しました。)
キーマップ micro
その後miniを使ってみて、普通のキーボードに戻った際にリターン等で違和感がありました。
全ての指のポジション移動量を1U以下に押さえて、普通のキーボードに近いキーマップmicroを用意しました。
小指は使いますが、普通のキーボードとの親和性も良い感じのキーマップになりました。
CORNEタイプやHELIXタイプの分割キーボードとの親和性も良い感じのキーマップです。
「QWFRTY」配列は、普通のキーボードに戻った際の違和感がありメリットを感じなかったので、「QWFRTY」配列レイヤーは削除しました。
これで、メンタルストレスは総合的に一番なく、また指への物理負担もないレイアウトができたかなと思いました。
キーマップ pico
後述の方法で普通のノートパソコンでほぼ一緒のキー配置を考えるのにはスペース付近のキー使用がいまいちです。
そこで全ての指のポジション移動量を1U以下に押さえて、親指は左右にも動かさないスペースのみのキーマップpicoを用意しました。
ポイントは、「V」キーをLTに使って、カーソールレイヤーにアクセスするようにしたことです。
- 左右どちらのスペースHOLDで、FL1レイヤー(2レイヤー化は敢えてしないことにしました)
- 「V」HOLDで、FL2レイヤー
- 日本語キーボード対応するなら、もう少しキーがいります。これもFL1を2つにするなどすれば38キーで対応できるが、当面使ってないキーを仮に使えるようにして40キーとする手もありそうです。まあ、英語キーボードメインでいきます。
かなりすっきりしました。
気づいたこと
キーキャップ
ortholinear系はシンプルなDSAのキーキャップの方がISOのキーキャップより似合う気がします。
親指のホームポジションはキーキャップの角を丸めるといい感じになっています。
「Shift」「Ctrl」「Alt」「Gui」キーのホームポジションキー等による兼用化
Mod-Tapを使うことで、「Shift」「Ctrl」「Alt」「Gui」キーのホームポジションによる兼用化がされ、無理に指を開ける指の動きがなくなりとても快適です。
さらに、右手にマウスだと「Ctrl-X」「Ctrl-C」「Ctrl-V」「ZZ」は左手操作だけでは難しかったので、Mod-Tapによる「SHIFT」「CONTROL」へのアクセスをホームポジション以外にキーボードの両端にも追加しています。(右端は、追加のレイヤー切り替えに使うのも考えられますが…)
設定されるキーに専用のMODEキーがなくなるので、その余裕をカーソールなどに使えるメリットもあります。LapTop PCのキーボードで使えるキー(TKLキーボード上のキーから、PauseとScrlLockを除く)だと、2レイヤー構成の42キーだけでアクセスを構成できます。
ちなみに、「Ctrl-X」「Ctrl-C」「Ctrl-V」を「x」「c」「v」の長押しで入力する手もあるようですが、これは導入しませんでした。
キー入力とTAPPING_TERM
普通にキー入力する際には、キー入力を意識的に短くタップするように慣れる必要があります。最初は一生懸命押しているキーが入力されていないのか悩ましかったです。力を入れるとキーを離すのが遅くなり、結果的にホールドと判定されてました。
TAPPING_TERM_PER_KEY
を有効にし、親指によるLAYER切り替えキーは基本TAPPING_TERM
の75%の早めに、小指などの動きが悪い一部キーは基本TAPPING_TERM
の200%の遅めになるように設定しました。
全体のタイミング調整はconfig.h
のTAPPING_TERM
だけでできます。config.h
中のTAPPING_TERM
は標準と同じ200と設定しています。
ホームポジションMOD用のパラメーター
デフォルトのMOD-TAP設定ではHOLD優先が有り、「as」等の隣のキーを早く舐めるように連続して打つと「S」となったりして違和感があります。
config.h
を以下の設定にして解決しました。
/* Select MOD TAP to behave like default LAYER TAP (non-default) */
/* This is needed for home position mod keymaps */
#define IGNORE_MOD_TAP_INTERRUPT
/* Both LAYER TAP and MOD TAP can be rolling-pressed within TAPPING_TERM */
/* This is optional to accommodate the fast typer */
/* This is enabled by default if TAPPING_TERM >= 500 */
#define PERMISSIVE_HOLD
タッピング関係は、Tap-Hold Configuration Optionsの時間図をよく読む必要があります。
縦スタガート
確かに指は長さが違うので、縦スタガート設計に興味がありました。
胸の前に自然に手を持ってきて手首に一番ストレスが無いようにキーボード上に置くと、実際にキーボードを押す際の自然なホームポジションは一直線でした。
実際小指を置くキーの位置を1つ下げて試すと、すべての手の指はまっすぐ前に向くのですが手首が内側になり無理がかかり不快でした。
左右の手の間隔が30cm以下となる一体型キーボードだと手首が外側にくるので、一体型のortholinear系では縦スタガートは使いにくそうです。(「ハ」の字にすれば良いのかもしれませんが)
スプリットキーボードではキーボードの置く位置や角度が自由なので、縦スタガートでも良いのでしょうが、その導入は必須要件では無い気がします。
実際、ポピュラーな縦スタガートデザインの縦ズレ量を隣の列との差で見ると意外と少なく、最近のCorne等が隣との差がキーボードピッチの19mm単位(?)で1/8U-1/8U-CTR-1/8U-1/4U-0
、少し古いErgodoxは1.27ピッチ(?)で0-1-1-CTR-1-2-0
なので更に少ない感じでした。どうも1/4U-1/2U
等という大きな縦ズレ量は少数派のようです。
直接入力キー
Thinkpad T14は、MENU-key(KC_APP)を無くして、PrtScrを押しやすいところにFnキー併用無しで入力できるように置きました。
この発想の延長上で考えて、PrtScrとMUTEのキーを押しやすい直接入力キーのところに置きます。
ソケットとLED配置
LEDの光が通る穴は、基本的にスイッチの端子ピンと反対側にある。
普通のCherryタイプ用とLPタイプ用の両方のソケットを装着可能にする共用PCBは、スイッチの端子ピンのソケットを反転して配置することで設計可能です。
ただしPCBの穴に埋め込まれたSK6812MINI-EのRGB光を使うPCBだと、いすれかのタイプを選ぶ必要があります。
ダイオード
black pill等だと片側6x3_3
キー構成のスプリットキーボードまではNKROのPCB設計がダイオード無しで可能ですが、ダイオード無しだとOLEDや他の拡張しようと思っても対応できなくなります。
でもnanoの片側6x3_1
キー構成とするとかなり現実味が出ます。
choc v1
Kailhの正規店以外では見かけなくなってきている。遊舎工房が、意外とリーゾナブル。
LowProfileのキースイッチは、1350 タイプが標準で、使うならこれが好ましそう。
最近のより薄いという1232 タイプは、PCBに角型の大きい穴が必要で既存のPCBと互換性が無いので要注意。
メモリー使用量
私のキーボードは、128KBのメモリー量のAT90USB1286で余裕があるので、メモリー使用量に配慮せず各種機能を有効にしても、使用量40%程度なので特に問題ありません。
ただ、32KBしかメモリー量のないATmega32u4を使う普通のPromicroだと、メモリー使用量の制約に配慮が必要ですね。
今後のMCUプラットフォーム候補
今後遊ぶには、メモリー量に余裕があるARM系のボードがよさそうです。
- Proton-C – オフィシャルQMKが対応(STM32F303CCT6) – ピンコンパチが可能(?) – 一部カットした場合
- Blackpill – オフィシャルQMKが対応(STM32F411CEU6) – ボードサイズが大きい (既存PCBに載せるのに無理がある)
- SparkFun Pro Micro - RP2040 – オフィシャルQMKが未対応 (RP2040) – ピンコンパチが可能(?)
- RP2040対応のQMK(非公式)
- RP2040対応のQMK(非公式)を動かす – blog
- Keyball46組み立て日記 〜間違えてRP2040を買ったそこのあなたに〜 – RP2040 の PRO MICRO
Proton-C以外のARM系ボードでは、USB経由のDFUでファームウエアーを書き換えるには、「BOOT0-push」「RESET-push」「RESET-release」「BOOT0-releas」と操作するので、ボード上の2つのPUSHボタンへのアクセスが必要。 代替策は、SWD経由アクセス。
Previous Post | Top | Next Post |