2021年11月08日

【自キ】ふたつのキーをホールドする案

前記事の続き。


trp3lさんのコードは細かく制御できそうなものの、
結局「○ミリ秒」を意識しなければならないので、
思うような挙動にならないと感じた。

困ったなあと思っていたが、
薙刀式の編集モードと同様、
「二つのキーを押しっぱなしにしたら、
シフトキーをオンにする、
離したらオフにする」
とすれば、
マウスのクリックやホイールと合わせようが、
他のキーと合わせようがいけるのでは?
と思いつく。

丁度、
SS_DOWN(X_LSHIFT)
SS_UP(同)
という、おあつらえ向きのマクロ見つけたし。



マクロを2個定義する。
カーソル左右キーのダブルホールドということで、
DH_LとDH_Rとしようか。

いつものswitch文のところで、

case: DH_L
 押された時、押されたフラグを立てる。

  もう一方のDH_Rが押されたフラグが立ってるかどうか見て、
   両方押されてるときにSS_DOWN(X_LSHIFT);
   を発行し、シフトフラグを立てる。
  そうでないなら放置。

 離された時、
  押されたフラグをオフ。
  シフトフラグ立ってたら、
   SS_UP(X_LSHIFT);フラグリセットしてbreak;
  立ってなかったら、
   単押し、単離しなので、
   カーソルを発行。

case: DH_R
同様。


などのように書けば、
○ミリ秒のことを一切意識せずに、
ノーマルカーソルと、
二つ同時押しシフトキーとに使い分けられ、
かつ、
他のキーコードにもシフトがかかるし、
マウス挙動にもシフトをかけられる、
という仕組みが出来そう。

今出先でスマホしかないので、
家帰ったらコード組んでみよ。


そもそもの目的は、
シフトクリック(複数選択)、
シフトホイール(AEでのタイムラインの横スクロール、
単ホイールだとレイヤー移動)、
Ctrlクリック(レイヤーオプション)、
などを実現したいなあと思っていた。
無意識に選択や移動するので、
○ミリ秒を意識するのはとても難しいのだ…
posted by おおおかとしひこ at 17:49| Comment(2) | カタナ式 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
ひとつ前の記事でおっしゃっていた、
生理的感覚の違いが出ていて
面白いなと思いました。

私の場合、先述のコードだったり、
ダブルタップだったりと、
時間に対しては
あまり抵抗がないのかもしれません。

大岡さんが提案されている手法が
もっと一般的に拡張できたら
片手マクロ用薙刀式みたいな
キーマップが実現できるかもしれませんね。
Posted by trp3l at 2021年11月08日 18:26
>trp3lさん

このへんは同時シフトがいいのか、
先行通常シフトでもいいのか、
みたいなことのような気がしますね。

僕は、先行押し、かつ押しっぱなしで、
次の押しを制御したいので、
間にタイムラグがあると許せない感覚があります。
なのでTAPPING_TERMは普段0で、
RETRO_TAPPINGをオンにして使ってます。
でもシフト明けにカーソルがポロリするので、
だったら二つのキーホールドなら、
と思いついた感じ。

AfterEffectsだと、
タイムラインで、
ホイールで縦移動、
シフトホイールで横移動なので、
横移動しようとしてシフトにまだなってなくて縦移動してしまう、
というのがイライラしてしょうがないんですよね…
複数選択するときもガガガって選択できないし。


これを一般化するには、
「押した時点から離す時点まで、
キーを他に発行したかしてないか」
みたいな関数が必要な気がして、
かなり面倒なので避けることにしました…

さらにエレガントな解決策は全然あるでしょう。
QMK薙刀式のコードを応用すれば、
if文の迷路に迷わずに済みそうですね。
Posted by おおおかとしひこ at 2021年11月08日 18:49
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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