結局LuaMacrosで落ち着いた。
HidKeySequenceにはアプリごとに自動で切り替えて なんてことをやっていたけど
今となっては各アプリでそこまで必要ない使い方をしているので
使用しない設定がたくさんある状態だった。
いっそのことここでリセットしてスッキリしましょう と
必要最低限の設定にしたら、結構キーが空いたw
で、使おうとして動きがおかしい事に気づいた。
想定していた処理結果と違う。
何がおかしいのかキーを押して調べてみると、左手キーボードのキーが
LuaMacrosを貫通(?)して出力されてしまっている。
ex:テンキーの1を押したらCtrl+F13をSendKeyとしているところで、
1が(テキストエディタなんかに)出力された上で、Ctrl+F13が実行されている。
いや、ちょっと待ってくれ。
そういう時のために
if (direction == 1) then return end
と記述して、ボタンが押されたら無視する としているのだ。
なんでキーが押された事を拾ってるんだ?
気持ち悪いので詳細を見てやろう。
lmc_set_handler("LHKey", function(button, direction)
print('Callback for device: button ' .. button .. ', direction '..direction)
if (direct/ion == 1) then return end
~
こうすることで、ログエリアに押したキーと、キーの状態(押/放)が表示される。
Callback for device: button 97, direction 0
テンキーの1を押して放すとこのセットが表示される。
その状態でテキストエディタなんかでテンキーの1を押すと
と同時にテキストエディタ上で1が出力されて
の跡に処理が動いている。
うん。まぁ想定通りなんだけど、if (direction == 1) then return endが
完全に無視されてるね。
なんか書き方が悪いのかと色々調べたけど、ピンポイントでの解決策は見つからず。
参ったな。
前はちゃんと動いていたはずなのだが・・・?
2時間ほどあーだこーだやって、解決せず。
お手上げか。
LuaMacrosを再起動したら直った。
そう来たか・・・。
ということを調べている中で気がついた。
LuaMacrosを使ってみた系のBlogを見ると、だいたいが同じ記述をしている。
大元がそうなっていて、それをコピーして派生して今に至るんだろう。
こんな感じだ。
if (direction == 1) then return end
if (button == 97) then
lmc_send_keys("abc",50)
end
if (button == 98) then
lmc_send_keys("def",50)
end
if (button == 99) then
lmc_send_keys("ghi",50)
end
~
一見何も問題ないように見えるけど、これってどうなのよ と。
この状態でテンキーの1(キーコードは97)を押してみよう。
押した → 何も起きない ※if (direction == 1)でTrueになって、そのまま終了
放す → 2番目のif文に突入 → キーコードは97なのでTrue → abcが出力される
ここからが問題。
※abcが出力された後 → 3番目のif文に突入 → 97なのでFalse
→ 4番目のif文に突入 → 97なのでFalse
・・・
最後のif文まで全部チェックするわけだ。
実際には一瞬で終わるだろう。
でも
100あったら?
10,000あったら?
1,000,000あったら?(ねーよ
超絶無駄なわけですよ。
なので
lmc_send_keys("abc",50)
return
end
if (button == 98) then
lmc_send_keys("def",50)
return
end
returnで終わらせてしまうか
lmc_send_keys("abc",50)
elseif (button == 98) then
lmc_send_keys("def",50)
elseif (button == 99) then
lmc_send_keys("ghi",50)
~
end
elseifで以後の余計な判定をしないようにする
・・・のが良いのではないだろうか。
return ~ endを都度書くよりelseifの方がシンプルなので、無駄なトラブルは避けられそう。
最後のelseifにはendが必要なので忘れないように。怒られるw
最初はif~return~endで作っていたけど、可読性を上げるためにelseifを使っている。
疑似switch文も一瞬頭をよぎったけど、面倒なのでやめた(何