ErgoDoxEZを何もせずに使う場合、明らかにキーが足りず、入力できない文字が出てくる。
そのため、レイヤーを駆使し、ワンタップだけの段差を付けた階層利用や上位層に留まり、長く居続けて利用することもできる。
全く知らない人から見れば、階層を意識せずに使おうとするだろう。
ゆえに、ErgoDoxEZは、個人利用に特化するキーボードだと言える。
・前のレイヤーキーを引き継ぐ場合
KC_TRANSPARENT
⇒KC_TRNS
もしくは_______
簡易的な説明
レイヤー移動の1つの機能として、キーを押し続ける必要がある。
もう一つは、キーを1回の押下だけで、継続してレイヤーが変更したままにできる機能がある。
などなど。
One Shot Keys
- OSL(layer):レイヤー移動後のワンタップでレイヤーが戻る。
-
OSM(mod):押下にて、
mod
が1回有効化される。
Switching and Toggling Layers
- TO(layer):レイヤー移動(戻さない限り戻らない)
- TG(layer):レイヤー移動(戻さない限り戻らない)
- MO(layer):押下時のみレイヤー移動(キーを離せば戻る)
- TT(layer):押下時のみレイヤー移動(キーを離せば戻る)タップでレイヤー移行。
- LT(layer, kc):押下時のみレイヤー移動(キーを離せば戻る)タップのみは通常キー。
-
LM(layer, mod):押下時のみレイヤー移動(キーを離せば戻る)そのとき、
mod
が有効化されている。 - DF(layer):デフォルトレイヤーの切り替え
※公式ページとは順番が異なる。
OneShotKeys
今回のOSLとタップダンスの組合せができるそうだ。
奥が深いのがQMKと言うことか。
##OSL(layer)
ワンタップのみで上位階層を利用できる利用方法が、レイヤーカット技法と呼ばれているか分からないが、便利ではあるだろう。
しかしながら、なぜかOSLは公式から消えている。
と言うことは、下記ではTO
の引数問題が出てきたように、引数2つは古い情報なのかも知れない。
もちろん、古い関数で、公式ページから削除されているとは言え、後方互換(上位互換?前方互換?)を無視する必要は無いため、今でも使える。
⇒見る場所を間違えていたようで・・・。
Switch to layer for one keypress
レイヤーを変更後に、何かのキーを1回押しただけで、元のレイヤーに戻る。
- レイヤー2
- OSL(レイヤー3)押下
- レイヤー3にて、Aキー押下
- 自動でレイヤー2に戻る
便利か?
しかし、こんな設定が可能なのは確か。
矢印キーをレイヤー3に使うわけにはいかないな。
マウスの左クリックや右クリックなどのキーボード以外の役割には有効かも知れない。
音量調整もこのキーボードでは可能なので、ミュートキーなど...
##OSM(mod)
mod
設定キー1タップで、他のキーを1回押下にて、レイヤーが戻る。
それをワン切り技法と呼ばれているか分からないが、かなり便利だと判明した。
Hold mod for one keypress
今まで、mod
が何か分からなかった。
しかし、ここに来て突きつけられたため、重い体を持ち上げて、調べることにした。
ニートで家にこもっているため、腰どころか、体全体が重くなっている。不本意な調査は、肥満体にはきつい。
たまに、数百メートル歩いただけで、翌日足が痛い。何故なのか・・・。
で、mod
は、コントロールキー・Shiftキー・Altキー・GUIキーのこと。
他にもハイパーキー(Hyper)やメフ?(Meh)キーなども含む。
要は、もしmod
に、コントロールキー(KC_LCTRL
・KC_RCTRL
)を設定しておけば、このキー押下後にAキーを押すことで、テキストエディタがアクティブになっているときに、全選択すると言うことなのかな。
コントロールキーではなく、シフトキー(KC_LSHIFT
・KC_RSHIFT
)を設定しておけば、このキー押下後にAキーを押すことで、大文字のAがテキストエディタか何かに入力されると言うことかな。
しかし、私の環境では再現できなかった。
そして、Aキーを設定してみた。
OSM(KC_A)
だ。
そうしたら、なぜかAltキーに早変わりした。
なぜに!?
しかし、コントロールキーの動きもした。
さらに検証した。
OSM(KC_NO)
を設定した場合、全く反応がなかった。
もしかして、mod
と言っているのは、上記のキーがすべて詰まっているとか!?
いままで、ずっと勘違いしていた。
そのため、OSM(KC_LCTRL)
ではなく、OSM(MOD_LCTL)
を設定しなければならない。
それを設定した上で、1回キーを押し、その後Aキーを押せば、全選択が出来ることが確認できた。
シフトキー(MOD_LSFT
)も確認できた。
使い道はよく分かっていないが、Modキーを組み合わせることも可能なようだ。
例えば、コントロールキーとシフトキーを組み合わせるとか・・・。
OSM(MOD_LCTL | MOD_LSFT)
ワンショットと言いながら押し続ける使い方も出来る。
###身体障害者・不髄者・四肢障害者
結構驚いたのは、組合せが可能なこと。
OSM(MOD_LCTL | MOD_LSFT)
を設定したキー+LT(レイヤー変更)
キー+矢印
キー
が使えると言うこと。
これはどういうことかと言えば、ワンタップだけでコントロールキーとシフトキーを組み合わせた押し方が出来ると言うことであり、その後矢印キーを押すことにより、範囲選択の移動が出来ると言うこと。
もちろん、矢印キーに限らず、ページダウン・ページアップ・ホーム・エンドなどのボタンも使える。
これは、完全にバリアフリー化促進の機能だと思う。
ちょっと使いこなせていないため、まだ便利さは享受できていないが、片手のしかも指1本で操作ができることを考えれば、使わない手はないだろう・・・。
ErgoDoxEZでは不利だが、手の小さい人や片手だけしか動かせない人などは、フルサイズキーボードにこの機能を割り当てておけば、作業効率が上がるはず。
コンパクトキーボードでも上記通り組合せが可能なので、異なるレイヤーに矢印キーがあったとしてもある程度はこの機能の恩恵を受けるはず。
きっとね。
###動画作成方法を誰か教えて
この機能を設定したキーボード周りの動画とそれが動くテキストエディタ周りの画面を組みあわせて動画にしたい。
それぐらい便利な機能だと思う。
何より、文字にしただけではこの便利さは伝わりにくいだろう。
もう少し世に広まるべき機能だろう。
コントロールキー・シフトキー・矢印キー
の3つのキーを2回の押下(タップ)で操作できるのはかなり便利(本来は押し続ける必要がある)。
現在の日本では、段差のない道路や手すりの付いた階段や車いすが通れる幅の通路などは、あって当たり前になりつつある。
しかし、パソコンを使う業界では、バリアフリーなどを耳にしたことがない。
過去の派遣先では、健常者と同じように障害者も同じ周辺機器を使って作業をしていた。
ゲーミングキーボードやゲーミングマウスなどは、ショートカット割り当て可能になって便利なのだが・・・。
それにもまして、今回の機能は、それを躍進するほど便利だと思うのだが・・・。
USB機器は、勝手に繋げない現場が多かったため、パソコン周辺機器までバリアフリーするよりも障害者には障害を与えておく必要があるルールなのだろうけど...
私には関係ないのでどうでも良いけど・・・。
作業効率化とは、今までのやり方を根本から覆すことこそが効率化に繋がると思う。
Modifier Keys
さらに読み飛ばしていた箇所があった。
上記の説明では、Ctrlキーを押した状態でのレイヤー変更だった。
しかし、それでは全体に影響するため、望まないことが多いだろう。
そのため、モディファイヤキーとKC_*
キーの組み合わせを個別に設定すれば問題は解決する。
例えば、**LCTL(kc)**の場合、kcをKC_A
として設定し、キーマッピングする。
そのキーのみタップで、例えばテキストファイルを操作していたのであれば、全文選択が行われる(WindowsOSに限るはず)。
**LCTL(KC_HOME)**の場合であれば、テキストファイルの先頭(1行目の1文字目)に移動する(WindowsOSに限るはず)。
また、**LSFT(KC_LEFT)**を1回のタップだけで、一文字が選択される。その1キーのみでShiftキーと左矢印キーを押したことになるのだから有効活用しようと思うのは当たり前ではないだろうか。
他にもLALT
・LGUI
・HYPR
・MEH
・LCAG
・ALTG
・SGUI
・LCA
がそろっている。AltやGuiは、左側だけでなく、右側も用意されているので、調べてくれ。
残念ながらCtrlキーとShiftキーとの組み合わせがない。
しかし、案ずることなかれ。
LSFT(LCTL(KC_LEFT))
の組み合わせで、例えば、文字列の中間か行末でその組み合わせを使った場合、カーソル位置から行頭(その行の1文字目)までを範囲選択することになる。
便利この上ないだろう(WindowsOSに限るはず)。
しかし、どこにそのキーを配置するかが問題だ(うれしい悲鳴とはこのことよ)。
余談(ANSI記号のお膳立て)
KC_TILDE
などのキーコードは、結局は、LSFT(kc)
の組み合わせで実現しているだけだったのだろう。
##Mod-Tap
Modとは、Modifierのことらしく、キーコードの先頭にMOD_
が付くコードのことを指す。
そのため、KC_
がキーコードの先頭に付いているのは、Modではない 。
Modifier | Description | キー |
---|---|---|
MOD_LCTL |
Left Control | 左側のコントロールキー |
MOD_LSFT |
Left Shift | 左側のシフトキー |
MOD_LALT |
Left Alt | 左側のアルトキー |
MOD_LGUI |
Left GUI1 | 左側のGUIルキー |
MOD_RCTL |
Right Control | 右側のコントロールキー |
MOD_RSFT |
Right Shift | 右側のシフトキー |
MOD_RALT |
Right Alt | 右側のアルトキー |
MOD_RGUI |
Right GUI1 | 右側のGUIキー |
MOD_HYPR |
Hyper2 | 複数のキー |
MOD_MEH |
Meh3 | 複数のキー |
左右に振り分けられたキーになっているが、左右されない無左右キーはないのかな・・・。
The Mod-Tap key MT(mod, kc) acts like a modifier when held, and a regular keycode when tapped. In other words, you can have a key that sends Escape when you tap it, but functions as a Control or Shift key when you hold it down.
The modifiers this keycode and OSM() accept are prefixed with MOD_, not KC_:
先日投稿したTAP THE FIRST SHOWに紐付いている訳か・・・。
難しそうなので、読み飛ばしたことが原因になり、理解せずに今に至る訳ね。
と言うことで、その記事にも少し反映した。
##ONESHOT_TAP_TOGGLE 押下数に応じて有効数も増加 設定数分の押下にて押し続けが有効化
上記のままでは、1回の押下で、他のキーを押す必要があった。
2回押下の場合は、無効化される。
それを今回の設定で、押下した回数分、他のキー押下に反映させることができるようになる。
正確に言えば、上限を決めることが出来る。
OSM(MOD_LCTL)
キーを2回押下することで、Xキーで切り取り、その直後にVキーを押すことで、磔が可能になると言うこと。
想定と違い、設定をするが、全く変わらない。
#define ONESHOT_TAP_TOGGLE 5
サンプルに問題があった。
5ではなく2に変更したところ取りあえず動いた(想定と違う動きをしたが)。
要は、5回押すまでに時間が来てしまい、有効化し損ねたと言うことか(知らないとは無駄なことをするもんだ。いかに知識が重要で、経験が無駄なことかが分かる)。
設定したキーを2回押下することで、常時有効化すると言うこと。
OSM(MOD_LCTL)
キーを2回押下することで、押し続けたことになる。
そのため、ずっとコントロールキーを押し続けた状態での作業になる。
そして、もう一度キーを押すことで、解除される。
バリアフリー化宣言する会社がこれを使わないのはモグリである。
##ONESHOT_TIMEOUT 有効時間
OSM(MOD_LCTL)
キーを設定し、一度押しただけでは、次に他のキーを押すか、もう一度押すまで、コントロールキーが押されたままになってしまう。
それを自動的に解放するのが今回の設定になる。
#define ONESHOT_TIMEOUT 5000
設定値はミリ秒なので、今回で言えば5秒になる。
1回キーを押したことで、5秒間何もしなければ、解放される。
しかし、上記のONESHOT_TAP_TOGGLE
では、今回の時間は無視されるようだ。
もう1回押せば解除されるのだから当たり前か。
##set_oneshot_layer(LAYER, ONESHOT_START)(ONESHOT_PRESSED)
レイヤーを変更した状態で、ワンショットを有効化したい場合に、今回の設定をするようだ。
set_oneshot_layer(LAYER, ONESHOT_START)にて有効化し、
set_oneshot_layer(ONESHOT_PRESSED)にて解除する。
詳しい使い方までは知らない。
##スティッキーキー・デッドキー
ワンショットキーは、次のキーが押されるまで有効化され、押下されたことで解放する機能になる。
一度に複数のキーを押さずに入力可能なことをSticky keys(スティッキーキー)もしくはDead keys(デッドキー)と呼ぶ。
##リモートデスクトップでの有効化
OSMが使えない場合があるようだ。
設定をすれば使えるらしい。
Switching & TogglingLayers
最近気づいたことなのだが、ErgoDoxEZキーボードだからこそ、押し続けることでレイヤーが有効化されていたようだ。
本来であれば、キーを離してもレイヤーは戻らない。
戻すには、移動先のレイヤーにKC_TRNS
を設定しておく必要がある。
そして、ErgoDoxEZキーボードのように、キー押上と同時にレイヤーを戻す場合は、以下の設定が必要だった。
#define PREVENT_STUCK_MODIFIERS
しかし、現在の最新ソースコードからは、この定義が削除されている。
今後、機能も削除されるかも知れない。
削除した代わりにSTRICT_LAYER_RELEASEが定義されている。しかし、同じ動きはしない・・・どうせぇと・・・。
削除後の換えは、何もするなと言うことかと・・・。
長々説明したつもりだったが、愚痴になった。
キーを離してレイヤーが戻るキーコードであれば、意識せずにレイヤーは戻る。
TO(layer)
上位層に居座るハイレイヤーだが、何に使うのか分からない。
Activates layer and deactivates all other layers
他の解説ページでは、引数が2つあるのだが、なぜかコンパイルエラーになって、よく調べたら1つのみと言う・・・。
やはり、公式ページに頼るのがエンジニアとしての常識なのだろう。
・以下、TOに引数2つを渡してコンパイルをした。
当たり前のように、コンパイルエラーが発生した。
で、以下本題。
activates layer and de-activates all other layers (except your default layer). This function is special, because instead of just adding/removing one layer to your active layer stack, it will completely replace your current active layers, uniquely allowing you to replace higher layers with a lower one. This is activated on keydown (as soon as the key is pressed).
キー押下にて、すぐさま有効化され、設定したレイヤーに切り替わる。
そして、戻せない。
もとのレイヤーに戻るには、遷移先のレイヤーに、戻り先のレイヤーを設定しておく必要があるようだ。
レイヤー1に、TO(2)のキーがある場合、レイヤー2にレイヤー1に戻るキーを設定しておくこと。
- レイヤー1からTO(2)キー押下
- レイヤー2にて作業
- レイヤー2に設定したTO(0)キー押下
- レイヤー0に遷移
レイヤー1に戻るキーがなければ、手の打ちようがないとも言える。
KC_TRNS
を同じ場所に設定しても無駄になる。
レイヤーの階層を変更して、変更したレイヤーを基準に操作することになるのだが、デフォルトレイヤーになっているわけではない(多分)。
TG(layer)
タップでレイヤーを移動し、戻るには同じキーをタップする必要があることからシャギーカットというか分からないが、混乱は少ないだろう。
Toggles the layer (enables it if no active, and vise versa)
KC_TRNS
を同じ場所にした場合、元のレイヤーに戻る(設定していなければ戻らない)。
・同じ位置のキーにKC_TRNS
設定済み。
- レイヤー1からTG(2)キー押下
- レイヤー2にて作業
- レイヤー2にて、上記1で押下したキーを再度押す。
- レイヤー1に戻る。
- 無事帰還^^
以下、設定ミス。
・同じ位置のキーにKC_TRNS
設定忘れ。
- レイヤー1からTG(2)キー押下
- レイヤー2にて作業
- レイヤー2にて、上記1で押下したキーを再度押す。
- レイヤー2のまま変わらず。
- レイヤー2でゾンビ化。
注意しなければならないのは、(私の操作ミスの可能性は高いが)レイヤーを変更する場合、今回の変更後のレイヤーで押下したキーが残ったままになった。
こちらも上記のコマンドと同じように、デフォルトレイヤーになっていない(多分)。
キー配列問題への利用
世の中にはQWERTY配列が主流になっていると思う。
しかし、世の中には、Dvorak配列・フランス語AZERTY配列・ドイツ語QWERTZ配列・ステノタイプなどがあり、選択肢が多数有り、自分好みの配列を選ぶ人もいる。
その場合、そのキーボードを他の人に貸し出せない問題が発生し、物理的なキーボードを用意する必要が出てくる。
それを回避するのが、自作キーボードで有名なQMKだ。
レイヤー切り替えに必要なレイヤーカット技法は、今回のTG
になる。
Colemak and QWERTY Layer Help
Maltron配列は、XD75キーボードが適切って事?
MO(layer)
押し続けさえすれば移動先のレイヤーを使えるため、ローグラデーションレイヤー技法と呼ばれているか分からないが、普段指が届かないキーに割り当てている。
Momentarily activates layer, switches off when you let go
当たり前だが、デフォルトレイヤーにはなり得ない。
移行後のレイヤーの同じ場所のキーに、全く関係の無いキー設定をしても影響しない(レイヤー移行のみに特化している)。そのため、レイヤー移行のそのキーを使いたい場合は、そのレイヤーに移動するためのキーを別に設けておく必要がある。
・MO(3)設定済み。その1
レイヤー3の通常のAキーの場所に、Zキーを設定する。
- レイヤー2からMO(3)キーを押し続ける。
- Aキーの場所を押下(Zキーが入力される)
- MO(3)を離す。
- Aキーの場所を押下(Aキーが入力される)
・MO(3)設定済み。その2
レイヤー3の通常のAキーの場所に、Zキーを設定する。
- レイヤー2からMO(3)キーを押下(ワンタップ)。
- Aキーの場所を押下(Aキーが入力される)
- 当たり前の結果が得られる。
TT(layer)
押し続ける限り、任意のレイヤーに変わる。離せば戻る。そして、押して直ぐに離せば、そのレイヤーに居続けることが出来る。
Momentarily activates layer if held, toggles it if tapped repeatedly
上記のMO機能のようだが、全く異なる。
・押し続けての操作
- レイヤー4からTT(5)キーを押し続ける。
- 押し続けた状態で、レイヤー5にて作業
- TT(5)キーを離す。
- レイヤー4に戻る。
- 無事帰還^^
・同じ位置のキーにKC_TRNS
設定済み。
- レイヤー5からTT(6)キー押下(ワンタップ)
- レイヤー6にて作業(TT(6)キーを押し続ける必要は無い)
- レイヤー6にて、上記1で押下したキーを再度押す。
- レイヤー5に戻る。
- 無事帰還^^
以下、設定ミス。
・同じ位置のキーにKC_TRNS
設定忘れ。
- レイヤー5からTT(6)キー押下(ワンタップ)
- レイヤー6にて作業(TT(6)キーを押し続ける必要は無い)
- レイヤー6にて、上記1で押下したキーを再度押す。
- レイヤー5に戻れず。
- レイヤー6でゾンビ化。
- 上記3にて、押下するキーに、文字や記号などの設定をしていた場合、それが入力されて終わる。
デフォルトレイヤーではない(多分)。
LT(layer, kc)
押し続けなければレイヤーを変更することが出来ないため、レイヤーショート技法と呼ばれているか分からないが、私は頻繁に使う。
そして、押下(ワンタップ)だけならば、kc
キーが作動する。
Momentarily activates layer if held, sends kc if tapped
kc
キー:キーコードのなかで、接頭辞がkcで始まるキーコードのこと。要は、KC_A・KC_BSPACE・KC_PGUPなどなどの通常使うキーのこと。
押し続ける場合、そのレイヤーを使うことが出来る。
・以下、LT(6, KC_BSPACE)
キーを設定
- レイヤー5からLT(6, KC_BSPACE)キー押下(ワンタップ)
- テキストエディタがアクティブの場合は、前の1文字が削除される。
- で、終わり。
・以下、同条件
- レイヤー5からLT(6, KC_BSPACE)キーを押し続ける。
- レイヤー6の状態で作業
- LT(6, KC_BSPACE)キーを離す。
- レイヤー5に戻る。
- 無事生還^^
デフォルトレイヤーにはなり得ない・・・もういいよね。
デフォルトレイヤーというのは、明示的に設定しない限り変わらないのだから・・・。
LM(layer, mod)
またまたmod
が出現した。
この機能は、キー押下時のみレイヤー移動する。キーを離せば、元のレイヤーに戻る。
キー押下時は、レイヤー移動のみに限らず、mod
が有効化された状態で移動する。
As MO(layer) but with mod active
・以下、LM(12, MOD_LALT)
キーを設定
※基本的なQWERTY並びのキーボードを想定
- レイヤー9からLM(12, MOD_LALT)キー押下(ワンタップ)
- 何もせずに終わる。
・同条件
- レイヤー9からLM(12, MOD_LALT)キーを押し続ける。
- レイヤー12の状態になり、そこからFキーを押す。
- 一般的なテキストエディタの場合、"ファイル(F)"が反応する(WindowsOSに限るけど)。
- そこから更にAキーを押せば、"名前を付けて保存"ウィンドウが開いて、保存できるようになる。
- LM(12, MOD_LALT)キーから手を離す。
- Aキーを押す場合、それはレイヤー9に戻っているため、Aキーがテキストに書き込まれる。
- 以上
modを使うため、LM(9, MOD_RSFT | MOD_LCTL )
のように組合せが可能。
デフォルトレイヤーにはなれない。
DF(layer)
過去投稿通り、日本語配列と英語配列のレイヤーで使うのが主な利用方法だろうか。
Switches the default layer
・通常動作
- レイヤー7からDF(8)キー押下(ワンタップ)
- レイヤー8にて作業
- レイヤー8にて、上記1で押下したキーを再度押す。
- レイヤー7に戻れず。
- レイヤー8でゾンビ化。
この機能は、デフォルトレイヤーを変更する。変更先がデフォルトレイヤーに変わる。
そのため、元のレイヤーに戻るには、明示的な設定が必要になる。
重い体を動かしている
一応就職活動ぐらいはしている。
欲しいキーボードがあるため、親のすねかじりでは購入が追いつかない。
なぜ、腕が2本しかないのに、使い倒せないのが分かっているのに、キーボードを買い続けるのか。
そこに、キーボードがある限り,,,
ちなみに
今回動かしたソースコードが以下になる。
Qiita投稿用keymap(ErgoDoxEZのレイヤーカット技法9種類)20180913.c
今回検証した方法は、レイヤー0ではなく、レイヤー2に移行してから検証を行った。
Keymap 0: WindowsBasic layer
,--------------------------------------------------.
| | | | | | | |
|--------+------+------+------+------+-------------|
| | | | | | | JAP |
|--------+------+------+------+------+------| |
| | | | | | |------|
|--------+------+------+------+------+------| |
| | | | | | | |
`--------+------+------+------+------+-------------'
| | | | | |
`----------------------------------'
,-------------.
| | |
,------|------|------|
| | | |
| | |------|
| | | |
`--------------------'
Keymap 2: WindowsBasic layer
,--------------------------------------------------. ,--------------------------------------------------.
| | | | | | | | | | | | | | | LM |
|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
| | | | | | | ENG | | | | | | | | LM |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | | | | | |------| |------| | | | | | LM |
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
| | | | | | | | | | | | OSM | OSM | TT(3)| LM(4) |
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
| | | | | | | | DF(5) | TG(8) | LT(3) | OSL(4) |
`----------------------------------' `----------------------------------'
,-------------. ,-------------.
| | | | TO(5)| |
,------|------|------| |------+------+------.
| | | | | MO(9)| | |
| LT(7)| |------| |------| | |
| | | | | | | |
`--------------------' `--------------------'
ソースコード上には存在する文字を邪魔なので今回消している。
表示されている部分を使って検証した。書き換えて上書きしているため、あまり意味の無いソースコードではあるが・・・。
以上。