続 Windows PCでMac風キーバインドを目指す
前提
目指すところ
cmd単体押しで入力切替ができること
結論
先人の知恵を借りれば余裕だった
とても快適になった
やったこと
一応ここのチュートリアルをちょっとやって感覚を掴んだ
先人の知恵を借りてスクリプトを書く
起動時にスクリプトが実行されるようにする
https://gyazo.com/f0b4eea5ddca2bddbffbd1bd9b1eace5
スクリプト
コード
code:ahk
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
; SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
LCtrl::Send, {vk1D}
RCtrl::Send, {vk1C}
LCtrl & a::send_with_modifiers("a")
LCtrl & b::send_with_modifiers("b")
LCtrl & c::send_with_modifiers("c")
LCtrl & d::send_with_modifiers("d")
LCtrl & e::send_with_modifiers("e")
LCtrl & f::send_with_modifiers("f")
LCtrl & g::send_with_modifiers("g")
LCtrl & h::send_with_modifiers("h")
LCtrl & i::send_with_modifiers("i")
LCtrl & j::send_with_modifiers("j")
LCtrl & k::send_with_modifiers("k")
LCtrl & l::send_with_modifiers("l")
LCtrl & m::send_with_modifiers("m")
LCtrl & n::send_with_modifiers("n")
LCtrl & o::send_with_modifiers("o")
LCtrl & p::send_with_modifiers("p")
LCtrl & q::send_with_modifiers("q")
LCtrl & r::send_with_modifiers("r")
LCtrl & s::send_with_modifiers("s")
LCtrl & t::send_with_modifiers("t")
LCtrl & u::send_with_modifiers("u")
LCtrl & v::send_with_modifiers("v")
LCtrl & w::send_with_modifiers("w")
LCtrl & x::send_with_modifiers("x")
LCtrl & y::send_with_modifiers("y")
LCtrl & z::send_with_modifiers("z")
RCtrl & a::send_with_modifiers_unless_modifiers_are_not_only_ctrl("a", "{Home}")
RCtrl & b::send_with_modifiers_unless_modifiers_are_not_only_ctrl("b", "{Left}")
RCtrl & c::send_with_modifiers("c")
RCtrl & d::send_with_modifiers_unless_modifiers_are_not_only_ctrl("d", "{Delete}")
RCtrl & e::send_with_modifiers_unless_modifiers_are_not_only_ctrl("e", "{End}")
RCtrl & f::send_with_modifiers_unless_modifiers_are_not_only_ctrl("f", "{Right}")
RCtrl & g::send_with_modifiers("g")
RCtrl & h::send_with_modifiers_unless_modifiers_are_not_only_ctrl("h", "{Backspace}")
RCtrl & i::send_with_modifiers("i")
RCtrl & j::send_with_modifiers("j")
RCtrl & k::send_with_modifiers_unless_modifiers_are_not_only_ctrl("k", "+{End}{Delete}")
RCtrl & l::send_with_modifiers("l")
RCtrl & m::send_with_modifiers("m")
RCtrl & n::send_with_modifiers_unless_modifiers_are_not_only_ctrl("n", "{Down}")
RCtrl & o::send_with_modifiers("o")
RCtrl & p::send_with_modifiers_unless_modifiers_are_not_only_ctrl("p", "{Up}")
RCtrl & q::send_with_modifiers("q")
RCtrl & r::send_with_modifiers("r")
RCtrl & s::send_with_modifiers("s")
RCtrl & t::send_with_modifiers("t")
RCtrl & u::send_with_modifiers("u")
RCtrl & v::send_with_modifiers("v")
RCtrl & w::send_with_modifiers("w")
RCtrl & x::send_with_modifiers("x")
RCtrl & y::send_with_modifiers("y")
RCtrl & z::send_with_modifiers("z")
; 修飾キーを取得する
get_modifiers() {
m := ""
if GetKeyState("Control", "P")
m = %m%^
if GetKeyState("Shift", "P")
m = %m%+
if GetKeyState("Alt", "P")
m = %m%!
return m
}
; 修飾キーつきでSendする
send_with_modifiers(key) {
m := get_modifiers()
Send, %m%{%key%}
}
; ctrlだけだったら別のコマンドをSendする
send_with_modifiers_unless_modifiers_are_not_only_ctrl(key, command_for_only_ctrl) {
m := get_modifiers()
if m = ^
Send, %command_for_only_ctrl%
else
Send, %m%{%key%}
}
説明
それに加えて、右CtrlのときだけEmacsキーバインドが使えるようにする ちょっとだけリファクタリング
こういうのはDRYよりも無駄のない処理を意識したほうは良さそうだけどやっちゃった send_with_modifiers_unless_modifiers_are_not_only_ctrlがしっくり来てなさすぎる
使い心地
快適
入力の遅延は感じない
この環境でゲームをまだやってないので影響は不明だが、影響があったらタスクバーのアイコンから終了すればいいはず
ctrl + spaceで入力切替できるままにしておけば、AutoHotKeyが動いてなくても困ることはない