2020年09月26日

【薙刀式】センターシフトの訓練

センターシフトは、新JISとSKKと、カタナ式と薙刀式でしか採用されていない、
意外とレアなシフト方式だ。

僕はすっと出来たけど、
誰もがそうではないと思い、独特のつまづきがちなところをチェックしてみる。


1. 先押しの通常シフト。

同時シフトに慣れた人は戸惑うかも。
同時シフトだと、親指→文字でも、文字→親指でも成立するので、
「どちらが先」と考える必要はない。

しかし通常のシフトキーなので、
「先に押して押しっぱなしのまま文字を打ち、
押しっぱなしなら複数効き、
離してはじめてもとに戻る」
を動作として覚える必要がある。

小指キーの通常のシフトと同じ感覚を、
親指に覚えさせるところから始めないといけない。

(これは連続シフトをDvorakJで実装する制限だ。
QMK薙刀式、かえうち、やまぶきRなどなら、
同時かつ連続を実装できる。
ただしかえうち、やまぶきRでは、3キー同時押しは実装不可。
実装上の問題だ)


実はSandS(スペースキー兼シフトキー)の感覚は、
英文で覚えたほうが「楽で合理的だぞ」とわかるかも。
大文字小文字の使い分けや、数字段の記号部などを、
SandSで打ってみると、楽なことに気づく。

メリットとしては、
文字の後に最速ロールオーバーでスペースを打つことで、
変換をかけるのが楽なことだ。
実用文入力のテンポが作れる、親指同時系にはない特徴。
(実はQMK薙刀式ではこれが出来ないのだ…
これを先押しのみに改造しようとして、複雑で放置中)


2. 同手シフトと逆手シフト

人差し指、中指の中下段あたりは、同手シフトがやりやすい。
薬指、小指、人差し指伸ばし、上段は、逆手シフトがやりやすい。
(個人差があります)
僕は最初左親指のみでシフトをかけていたが、
流石に頻度が高いので(24%)、両手の親指を使い分けることにした。

しかし同手と逆手の混乱が起こるので、
逆手シフトに統一することにした。
ここで混乱が起きやすいと思う。

右手を打つときは左親指先行押し、
左手を打つときは右親指先行押し、
という感覚をつくらないと、
薙刀式はスムーズに打てないからだ。
で、それを覚えても次の混乱がある。


3. 連続シフトが左右に渡るとき

たとえば「まの」(シフトFJ)と、
左手右親指シフトから、右手に文字が渡るとき。
親指を変える?
僕は右親指押しっぱなしで打っている。
つまり、「結局同手シフトの感覚も必要」だと思う。

なので結論としては、
「シフト文字は同手逆手の両方とも感覚としてつくっておき、
デフォは逆手、連続シフトは同手ママも使う」
という感覚を練習するのが、
一番早そうだ。


なので、
合理的な練習方法としては、
まずSandS(DvorakJでSandSにチェックを入れるだけでOK)を、
英文で感覚をつかみ、
薙刀式のシフト文字を、
逆手シフト、同手シフト両方ひととおり練習、
というのが結局楽になるかもだ。

「どちらでもよい」があると、
わりと混乱することが知られているので、
「デフォは逆手、連続シフトで渡るときのみ同手許可」
の感覚を作るのがいいと思う。

このへん、マニュアルには記述されていない、
現場のコツのようなものなので、
次の版には記述することにしよ…



センターシフトは、
あのでっかいスペースキーを無駄にしない、
画期的なアイデアだと思う。
新JISがSandS、または同時かつ連続で実装されていたら
(なぜか小指シフトで実装されてしまった。
親指のロジックを組むコストを避けたのか?)、
また違った世界線になっただろうか。

もっとも、自作系では親指キーがいかようにもなるため、
親指6シフト配列とかも簡単につくれるよな。
(人差し指、中指、親指だけの配列とか)
真剣に検討した記憶があるけど、
DvorakJの実装じゃ無理かもと思ってこれも放置中。

和音漢直はそれを本当にやってしまった配列で、
これはこれで今後の展開が楽しみだ。
posted by おおおかとしひこ at 12:00| Comment(8) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
いつもお世話になっております。
センターシフトを先押しオンリーにして、ロールオーバーで変換がしたいとのことでしたが、
processe_naginata()関数にある
if(record->event.pressed){……}の中かっこ内を
以下のように書き換えれば、目的の動作ができるかもしれません。
即興なので意図しない動作があるかもしれませんが、力になれれば幸いです。

if (record->event.pressed) {
switch (keycode) {
case NG_SHFT:
case NG_SHFT2:
if(ng_chrcount >=1){
naginata_type();
tap_code(KC_SPACE);
return false;
break;
}
case NG_Q ... NG_SLSH:
ninputs[ng_chrcount] = keycode; // キー入力をバッファに貯める
ng_chrcount++;
keycomb |= ng_key[keycode - NG_Q]; // キーの重ね合わせ
// バッファが一杯になったら処理を開始
if (ng_chrcount >= NGBUFFER) {
naginata_type();
}
return false;
break;
}
}
Posted by trp3l at 2020年09月26日 16:27
>trp3lさん

あざす!助かります!
SPCの前後を非対称に組めばいいということまでは想像できてたので、
やってみます。
それがあって、DvorakJ版使ってたところでした。
編集モードの改造や足し引きをするのも楽だし。
確定したらQMKだな…
Posted by おおおかとしひこ at 2020年09月26日 17:14
他にも何かQMK上で実現したいことがありましたら、サイトにどんどん書いていってください!
例の解説記事はもうすこしかかりそうなので、私に実装できそうな内容でしたら、今回のようにその都度拾ってコメントさせていただきます。

編集モードの改定も楽しみにしております。
Posted by trp3l at 2020年09月26日 19:35
>trp3lさん

ありがとうございます。
何か思いついたら書くかもです。

編集モードは固まってきたんですが、
無意識レベルに馴染むかはしばらくかかりそう。
ただ前版よりは、思い出しやすくなってるはずです。
整理の法則がわかりやすいように作ったので。
Posted by おおおかとしひこ at 2020年09月26日 23:00
おお、すごい。前シフトはオプションで有効にしたかったのですが、いまいちいい方法が思いつきませんでした。試してみます。
Posted by eswai at 2020年09月27日 12:57
後置シフトをオプションにしました。標準ではdvorakjと同様前置シフトです。
trp3lさん、ありがとうございました。

https://github.com/eswai/qmk_firmware/commit/6c7263e35b844eead0813a0cc43fef520ca47ff1
Posted by eswai at 2020年10月01日 06:18
>eswaiさん

おお、仕事がはやい。土日に試そうと思っていたらもう…。
親指シフトに慣れた人は同時連続がいいだろうし、
選択式になるのはいいですね。
・Win/Mac
・縦書き/横書き
・親指の通常シフト/同時連続シフト
・右親指のオプション
と、オプションも充実してきたなあ…
Posted by おおおかとしひこ at 2020年10月01日 09:05
>eswaiさん
実装ありがとうございます!
SPC も tap_code(KC_SPACE)でエスケープせず、
QMK薙刀式標準のシステムに流すことで、かな確定後のシフト入力をスムーズに行えるようになっていますね。
SHFT2の動作も温存できますし、素晴らしい改善に感謝です。
“とりあえず動く”コードがこうして改善されているのを見るととても勉強になります。
Posted by trp3l at 2020年10月02日 04:57
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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