コンパクトキーボードや分割キーボード(Mistel MD770など)の操作性を劇的に向上させる、AutoHotkey v2.0用のスクリプトを紹介します。
スペースキーを「単押しでスペース」「長押しでFnキー」として使う、いわゆるSandS(Space and Space)設定に加え、タイピング時の誤動作を防ぐ工夫や、特殊配列向けのカスタマイズを盛り込んでいます。
SpaceキーのFn化: Spaceを押しながら I/J/K/L で矢印移動など、ホームポジションを崩さずに操作が完結します。
長押しキャンセル機能: Spaceを「250ミリ秒以上」長押しして離した場合はスペースが入力されません。通常のSandSで起こりがちな「文字入力中の意図しない誤爆」をしっかり防ぎます。
左Shift + 右Shift = アンダーバー(_): 一部のキーボードで入力しづらいアンダーバーを、両方のShiftキーの同時押しで簡単に入力できるようにしています。
修飾キーの引き継ぎ: Space + Shift + o で Shift + Enter として機能するなど、他の修飾キーとも自然に組み合わせられます。
💻 AutoHotkey v2.0 スクリプト
以下のコードをコピーし、.ahk 拡張子のファイルとして保存して実行してください。
#Requires AutoHotkey v2.0
; ==========================================
; Shiftキーの組み合わせ設定
; ==========================================
; 左Shift(<+) を押しながら 右Shift(RShift) を押すとアンダーバー(_)を入力
<+RShift::Send("{_}")
; ==========================================
; スペースキー単独の挙動(時間判定付き)
; ==========================================
*Space:: {
startTime := A_TickCount ; スペースが押された瞬間の時間を記録
KeyWait("Space") ; スペースが離されるまで待機
elapsedTime := A_TickCount - startTime ; 押していた時間を計算
; A_PriorKey: 他のキーを途中で押していないこと
; elapsedTime: 押していた時間が250ms未満であること
if (A_PriorKey = "Space" && elapsedTime < 250) {
Send("{Blind}{Space}")
}
}
; ==========================================
; スペースキーとの組み合わせ(長押し時の挙動)
; ==========================================
; スペースキーが物理的に押されている間だけ、以下の設定を有効化します
#HotIf GetKeyState("Space", "P")
; --- 矢印移動 ---
*j::Send("{Blind}{Left}")
*i::Send("{Blind}{Up}")
*k::Send("{Blind}{Down}")
*l::Send("{Blind}{Right}")
; --- 削除系 ---
*u::Send("{Blind}{Backspace}")
*d::Send("{Blind}{Delete}")
; --- 行頭・行末 ---
*h::Send("{Blind}{Home}")
*sc027::Send("{Blind}{End}") ; sc027は日本語キーボードの「;」キー
; --- クリップボード・検索・全選択・エンター ---
*c::Send("^c")
*v::Send("^v")
*x::Send("^x")
*f::Send("^f")
*a::Send("^a")
*o::Send("{Blind}{Enter}") ; {Blind}指定によりShift+Enter等にも対応
#HotIf
💡 調整のポイント
スクリプト内の 250(ミリ秒)という数値が、長押しキャンセルのしきい値です。ご自身のタイピング速度に合わせて、キャンセルが早すぎる場合は 300 などに増やし、遅すぎる場合は 200 などに減らして調整してください。