障害者向けのShiftキー自動押下

ErgoDoxEZを使っていて、面白そうではあるが、個人的には不便な設定を見つけたので、紹介する。

#Shiftキー自動押下
正確には、ErgoDoxに関係なく、QMKのFirmwareに関する設定の一つ。
結論を言えば、`A`キーを一定時間押下し、キーを離したときに、大文字の"A"が入力できる。
通常は、`A`キー単体押下では、小文字の"a"のみしか扱えない。
それが今回の対応で、自動でShiftキーを押下してくれるというもの。

#Auto Shift
使い方が合っているのか不明だが、一応設定できたことで、合っていると判断する。
それは、
`インストールディレクトリ\qmk_firmware\keyboards\ergodox_ez\keymaps\個人のキーマップディレクトリ`
に、`rules.mk`ファイルを配置する。

![dir.jpg](https://qiita-image-store.s3.amazonaws.com/0/82414/d3a384d7-ea34-e218-b0b7-ff742a963a10.jpeg)

そして、そのファイルを

```ErgoDox:rules.mk
AUTO_SHIFT_ENABLE = yes
```

とする。
その後、コンパイルを行い、"〜〜〜.hex"を作成後、キーボードにファームウェアを流し込めば、Shift自動押下が適応される。
個人的には迷惑この上ない設定だと思う。
解除の方法が分からないのだから・・・(rules.mkを除いた状態でコンパイルを行い、キーボードにhexファイルを流し込めば良いのだが、そういうことではない)。
当然指をくわえて眺めていたわけではない。眺めただけで出来るようになれば努力なんて要らない。

#AutoShift解除
`A`キーの設定と同じように、On/Offの設定をキーに割り当てておけば、無効化できる。
`KC_ASOFF`をどこかのキーに設定しておけば、そのキー押下で、今回設定したShift自動押下機能が無効化される。

#AutoShift実行
無効化後、再度有効にする場合は、`KC_ASON`をどこかのキーに設定しておけば、そのキー押下で、再度有効になる。

#AutoShift実行切り替え
上記は、2つのキー設定が必要になる。
トグルの場合、ワンタップで有効・無効が切り替えられれば、キーの有効活用が出来るだろう。
`KC_ASTG`をどこかのキーに設定しておけば、ワンタップで有効・再度ワンタップで無効化できる。
Windowsキーに[ワンタップ](https://qiita.com/chesscommands/items/e81b966e4ca791d81987 "自前")でこのキーを設定しておけば、便利・・・ではないか。
私は、[昨日投稿](https://qiita.com/chesscommands/items/4589a9453c59ef26a4bc "自前")したキーをWindowsキーと組み合わせている。

#AutoShift有効時間
押下時間の長さで、Shiftキー押下が有効になっているかどうかが決まる。
短い時間の押下では、そのままのキーになり、長い時間の押下では、Shiftキー押下とそのキーの組合せになる。
その時間を長くしたい場合は、`KC_ASUP`をどこかのキーに設定しておけば、このキーによって、キーの押下時間を長くしなければならない(待機時間が上がる)。
例えば、今まで1秒押下したら"a"が"A"になっていたのに、今回の設定で、5秒押下しなければ"a"が"A"にならないといった感じだ。
手の動きが遅い人には良いかもしれない。

また、逆にせっかちな人は、今まで1秒押下したら"a"が"A"になったのすら長いと感じる人だ。
そんな人は、`KC_ASDN`をどこかのキーに設定して、何回か押下しよう。
そうすれば、"a"押下を0.1秒で"A"にできる(待機時間が下がる意味のDown?)。

※今回の待機時間は例なので、信じないように。
標準の待機時間は175ミリ秒だと思う。

#KC_ASRP
これ何？
指をくわえて眺めることしか出来ない人間なので、これが何か分からない。
もしかしたら現在の待機時間を出力する？
このキーコードをキーに設定後、テキストエディタがアクティブになっているときに、キー押下によって、"\n175\n"が出力された。
\n：改行

#キーの種類によりAutoShift有効を制限する。
これまたC言語のファイルを触ることになるのだが、これこそどうすれば良いのか分からない。
きっとヘッダファイルに、制限したい文字種類を記載すれば良いと思う。
ヘッダファイルが重要なので、別の場所で定義しても仕方ない。
`インストールディレクトリ\qmk_firmware\keyboards\ergodox_ez`
`config.h`ファイルに記載する必要がある。
このファイルであれば、どこに記載しても良いと思う。

無効化により、キーを押下し続けた場合、押下時間に比例して、その文字(キー)が打ち込まれることになる。
他のキーは、押下によって一時停止するため、肩すかしを食らうほどタイミングが合わなくなる。

##NO_AUTO_SHIFT_NUMERIC
他は有効にしたいが、数字だけはShift押下を無効にしたい場合に宣言する。
宣言方法は、以下になる。

```ErgoDoxEZ:config.h
#define NO_AUTO_SHIFT_NUMERIC
```

##NO_AUTO_SHIFT_SPECIAL
他は有効にしたいが、特殊な記号だけはShift押下を無効にしたい場合に宣言する。
宣言方法は、以下になる。

```ErgoDoxEZ:config.h
#define NO_AUTO_SHIFT_SPECIAL
```

特殊な記号：` -_=+[{]};:'",<.>/?`
スペース・ハイフン・アンダーバー・イコール・プラス・鍵括弧開(閉)・波括弧開(閉)・コロン・セミコロン・シングルクォーテーション・ダブルクォーテーション・カンマ・小なり不等号・ピリオド・ピリオド・大なり不等号・スラッシュ・ハテナ(クエッション)

対象外なのは、!や@など数字キーをShift押下で変化する記号が対象外のようだ。
ならば、円記号はどうなるのか・・・。

##NO_AUTO_SHIFT_ALPHA
他は有効にしたいが、文字だけはShift押下を無効にしたい場合に宣言する。
宣言方法は、以下になる。

```ErgoDoxEZ:config.h
#define NO_AUTO_SHIFT_ALPHA
```

要は、a〜zを普通に使えると言うこと。
大文字にするには、わざわざ人間様の手でShiftキーを押下した上で、文字キーを押さなければならない。

#メリット
時間調整が可能で、有効有無を切り替えられるのはありだと思う。
やはり、身体障害者向けだと思うが・・・。
最低でもVim使いには邪魔な存在でしかない。
今回有効にしたため、カーソルを移動させるため、`k`キー押下でヘルプが起動するようになった。
大文字の"K"が押下したことになり、カーソル配下の文字をヘルプで探す動きになった。
最初その挙動が理解できず、かなり焦った。
`j`キーもそうだ。大文字の"J"になり、2行が1行にまとめられる様は、混乱の元になる。
自分で大文字にする設定をしているはずなのに、意図せずに大文字になるため、体が固まる。
しかし、慣れれば便利かも知れない。

#デメリット
わざわざキーボードで制御する意味がよく分からない。
考えられるのは、どうしても体が不自由で、ペン一本でしかキーボードを打てない状態になった場合であり、かつOS側の設定を変更出来ないときに限りそうだ。
そんな場合に、キーボードを使えるのか疑問だが。
OS側の設定というのは、WindowsOSであれば、標準でその機能が備わっているからだ。

##アクセシビリティ
![障害者.png](https://qiita-image-store.s3.amazonaws.com/0/82414/59df1917-e6a8-0cb4-943c-2f3c8b41b3f1.png)
※画像真ん中の「固定キー機能を使用する」を"オン"にすれば、今回の機能と似たようなことが出来る。
あくまで"似た"動作が出来る。

以上。

1週間もせずに、ErgoDoxEZに関する投稿をしてきた。しかし、HHKBを使って執筆しているのは内緒だ。