左手デバイス(ロジクールG13)で任意のボタン押下時のみモードを切り替える
前置き
絵を描く際に左手デバイス(G13)を有効に使えてない気がしたので、設定を見直すことにしました。 ただ、指が届く範囲だとキーが足りず、手元を見ずに切替キーでモードを切り替えるのも難しいといった問題が出てきたのでいろいろと考えた結果スクリプトを使用することにしました。
やりたいこと
- 「G22」キーが押された状態の間だけ切替キーの「M2」が押された状態にする
- 「G21」キーが押された状態の間だけ切替キーの「M3」が押された状態にする
- 「G21(G22)」を放すと切替キーの「M1」が押された状態にする
G13でスクリプトを使用する方法
※ 以後このプロファイルでは「G21]「G22」を押すとモードが切り替わる
任意のキー押下時のみモードを切り替えるスクリプト
ネットを探してみましたが、やりたいことができるスクリプトが見つからなかったので公開しておきます。
※ 以下のスクリプトの使用する際は自己責任でお願いします。何かあっても責任は持ちません。
-- 切替キーの設定(G21,G22以外のキーで切り替える場合は変更)
SWITCH_MODE2_KEY = 22
SWITCH_MODE3_KEY = 21
MODE1 = 1
MODE2 = 2
MODE3 = 3
PRESSED_GKEY_CNT = 0
IS_SWITCH_KEY_PRESSED = false
function OnEvent( event, arg, family )
if( family == "lhc" ) then
PressGKeyCount( event )
ResetMode()
if( not IsModeSwitchingEvent( event ) ) then return end
if( not IsModeSwitchingKeyPressed( arg ) ) then return end
if( not IsModeSwitchableState() ) then return end
SetMKeyState( GetMode( arg ), "lhc" )
IS_SWITCH_KEY_PRESSED = true
end
end
-- 押されているGキーのカウンター
function PressGKeyCount( event )
cnt = event == "G_PRESSED" and 1 or 0
cnt = event == "G_RELEASED" and -1 or cnt
PRESSED_GKEY_CNT = PRESSED_GKEY_CNT + cnt
end
-- イベントがモード切替イベントかどうか
function IsModeSwitchingEvent( event )
return event=="G_PRESSED"
end
-- 押されているキーがモード切替キーかどうか
function IsModeSwitchingKeyPressed( key )
return key == SWITCH_MODE2_KEY or key == SWITCH_MODE3_KEY
end
-- 状態がモード切替可能状態かどうか
function IsModeSwitchableState()
return PRESSED_GKEY_CNT == 1
end
-- 状態がモードリセット可能状態かどうか
function IsResetModeState()
return PRESSED_GKEY_CNT == 0 and IS_SWITCH_KEY_PRESSED
end
-- 切替先のモードを取得
function GetMode( key )
return key == SWITCH_MODE2_KEY and MODE2 or MODE3
end
-- デフォルトモード(M1)をセットしなおす
function ResetMode()
if( not IsResetModeState() ) then return end
SetMKeyState( MODE1, "lhc" )
IS_SWITCH_KEY_PRESSED = false
end