2024年11月18日

【親指シフト】qmkによる実装

comboだと定義数が多すぎてメモリが足りなくなるかもしれない。
https://x.com/catfist/status/1858358157988507854


仕様としては、


IMEオフ…通常の英字配列(qwertyとする)
IMEオン…親指シフト配列に

親指シフト配列:

親指左キー、親指右キーを新設
単打では何も起こらない、同時押し専用キー

単打…文字部分33キー+数字キー10
親指右キーと同時押し…31+10
親指左キーと同時押し…31+10
ただし数字段は左右同時押しで同じものが出る

ふつうのシフトキーを押しながら…大文字qwerty、数字段は記号


なので、
数字段とシフトキー部を省略しても、
コンボの数としては62必要。
これがメモリとして足りるかどうかはやったことないのでわからんです。


また、エミュレータなどでは簡易的にコンボ系同時押し
(n秒以内に二つが押されたら同時とみなす)で実装するけど、
オリジナル親指シフトの判定ロジックはもう少し複雑で
(ミスを取りこぼしにくくなっている。詳しくは紅皿の開発記録に)、
そこまでやるなら、益々コンボの実装ではむりかなー。

eswaiさんの実装はコンボでもオリジナル方式でもないけど、
実用上結構よいので、これを真似するのがいいかなー。

昔コンボと同じアルゴリズムの同時押しで薙刀式を使ってたけど、
早々に誤打するようになって、
タイマーの調整がなかなか難しかった
(朝の調子と夜の調子で変わるんよね)
ので、判定ロジック自体を変えたのであった。

日本語に定義がないので、
だいたい似たようなものをぜんぶ「同時押し」と表現するのが良くない。
コンボ系はタイマー同時押し、
薙刀式のは相互シフト同時押し、
オリジナルのはなんていうんだろ、
「キーの重なりを用いた同時押し判定法」とでもいうべきか。


以上大体わかってる人からの助言でした。
あとは完璧にわかってるeswaiさんに相談?



(追記)コメント欄に別ロジック実装がリンクされてます。
参考にして下さい。
posted by おおおかとしひこ at 13:48| Comment(6) | TrackBack(0) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
QMKによる親指シフトキーボードは、eswaiさんのコードを改良した@sadaoikebe(Sadao Ikebe)さんのものがよく使われているようです。
https://qiita.com/sadaoikebe/items/c856c563a286c7f5b471

ロジックも直されているようです。
Posted by とる at 2024年11月18日 19:30
>とるさん

へえ、ありがとうございます。
薙刀式つながりの部分しか把握してなかったです。
Ikebeさんといえば自作勢の古参ですね。
Posted by おおおかとしひこ at 2024年11月18日 20:16
もう一つ、ついでですが。

昔のキーボードを改造してUSB化したり、変換器を作っている人がいますね。
https://okiraku-camera.tokyo/blog/?page_id=8211

読んで同じものを作れるかは、やってみなければわからないのですが。
Posted by とる at 2024年11月18日 21:55
>とるさん

随分昔に見ててさっぱり意味が分からず、
自作キーボードのことが多少わかるようになった今なら分かるかなーと読んでも、
さっぱり全貌がつかめませんでしたw

配列のことと自作のことの、
二つの解説が必要なんでしょうね…
Posted by おおおかとしひこ at 2024年11月18日 22:20
sadaoikebe氏が新しいQMKに対応したソースコードを出されているのを見つけ、私の方でもコンパイルできました。
薙刀式から乗り換える気はまったくありませんが。


QMKをコンパイルできるようにしている場合の作業手順です。
qmk_userspaceを使えるようにしていれば適宜読み替えます。

(1)
https://github.com/sadaoikebe/qmk_firmware/tree/capacitive/users/nicola
上記のアドレスから7個のファイルをダウンロードし、各自の
qmk_firmware/users/nicola/
フォルダに格納します。

(2)
各自のキーマップは
qmk_firmware/keyboards/%キーボード名%/keymaps/nicola/
フォルダに作ります。
そこにdefaultフォルダの中身をコピーし、keymap.cを編集します。
親指シフト関連のコードは
https://github.com/sadaoikebe/qmk_firmware/blob/capacitive/keyboards/tc69/keymaps/nicola/keymap.c
を参考にします。

〈ヒント〉
// NICOLA親指シフト
などと書かれたところと、69行目あたりの
void matrix_init_user(void) {
から後の内容はすべて必要です。
_NICOLAレイヤーにNG_から始まる親指シフトのキーを割り当てます。
またIMEオフとIMEオン用に、KC_EISUとKC_KANA2のキーコードもどこかのキーに割り当てます。


「物理的なキー配置はANSI配列ですが、JISキーボードのキーコードを送信します。」とreadme.mdに書いてありました。
物理的なキー配置もJIS配列にする場合は、nicola.c内の書き換えがいると思われます。
Posted by とる at 2024年11月20日 20:56
>とるさん

情報ありがとうございます。

QMK、破壊的変更あってから触ってないので、
最近のだと機能しない可能性もありますねー。
Posted by おおおかとしひこ at 2024年11月21日 12:09
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック