はじめに
こんにちは!みなさんはタイピングの際、ホームポジションから手を離してカーソルキーまで指を運ぶのが面倒だと感じたことはありませんか?特に、カッコを閉じてからキャレットを中央に戻す操作スタイルの方は、書くたびに矢印キーに手を伸ばすことになりますよね。
そんな悩みを解決するのが今回ご紹介するカスタマイズです。Spaceキーを右手の親指で押しながら他のキーを押すことで、カーソル移動や文字削除などの操作をホームポジションから操作できるようになります。
※本記事ではWindowsでのAutoHotkey利用を想定しています。
この記事でできるようになること
- スペースキーをFnキーのようにして、ホームポジションのまま以下の操作ができる
- カーソル移動 (↓ ↑ ← →, Home/End)
- バックスペース・削除
- PageUp/PageDown
- PrintScreen
実装コード
; SpaceFn 実装
whenSpaceFn := false
spaceFnTriggered := false
altSpace := false
~!Space::
{
; Alt + Space では通常の Alt + Space 動作にする
global altSpace
altSpace := true
Return
}
*Space::
{
global whenSpaceFn
whenSpaceFn := true
}
*Space up::
{
global whenSpaceFn
global spaceFnTriggered
global altSpace
; Alt + Space では通常の Alt + Space 動作にする
if altSpace {
altSpace := false
Return
}
if !spaceFnTriggered {
; Space 単体押しの場合は通常の Space 動作
Send "{Blind}{Space}"
} else {
; スペースとコンビネーションキーがほぼ同時に離れた際の判定バッファ
while (A_TimeIdlePhysical < 60) {
Sleep 10
}
}
whenSpaceFn := false
spaceFnTriggered := false
altSpace := false
}
sendKeyWithSpaceFn(key) {
global spaceFnTriggered
spaceFnTriggered := true
SendEvent "{Blind}{" . key . "}"
}
sendKeyAfterSpace(key) {
global spaceFnTriggered
if spaceFnTriggered {
Send "{Blind}{" . key . "}"
} else {
spaceFnTriggered := true
Send "{Blind}{Space}{" . key . "}"
}
}
#HotIf whenSpaceFn
*j::sendKeyWithSpaceFn("Left")
*k::sendKeyWithSpaceFn("Down")
*l::sendKeyWithSpaceFn("Right")
*i::sendKeyWithSpaceFn("Up")
*o::sendKeyWithSpaceFn("Home")
*sc027::sendKeyWithSpaceFn("End") ; ;キー
*h::sendKeyWithSpaceFn("Backspace")
*m::sendKeyWithSpaceFn("Delete")
*sc033::sendKeyWithSpaceFn("PgUp") ; ,キー
*sc034::sendKeyWithSpaceFn("PgDn") ; .キー
*p::sendKeyWithSpaceFn("PrintScreen")
*Enter::sendKeyAfterSpace("Enter")
*Left::sendKeyAfterSpace("Left")
*Right::sendKeyAfterSpace("Right")
*Up::sendKeyAfterSpace("Up")
*Down::sendKeyAfterSpace("Down")
#HotIf
主な機能の説明
基本操作
- Space + J/K/L/I: 左/下/右/上にカーソル移動
- Space + H/M: Backspace/Delete
- Space + O/;: Home/End (行頭/行末へい)
- Space + ,/.: PageDown/Up
- Space + P: PrintScreen
特徴的な実装
- 自然な操作感: スペース単体押しでは通常のスペースとして機能
- 同時押し判定: キーリピートや、Enterキー等を際どいタイミングで押した際の誤判定を防ぐ工夫
- Alt+Spaceの互換性: Alt+Spaceの通常動作を維持
カスタマイズのヒント
上記がおすすめの形ですが、キーアサインはお好みで変更可能です。
例えば:
#HotIf whenSpaceFn
; Vimスタイルの移動
*h::sendKeyWithSpaceFn("Left")
*j::sendKeyWithSpaceFn("Down")
*k::sendKeyWithSpaceFn("Up")
*l::sendKeyWithSpaceFn("Right")
#HotIf
おわりに
このSpaceFnを導入すれば、カッコを書いた後に矢印キーに手を伸ばす必要がなくなり、コーディングや文章作成が格段に快適になります。
console.log('hogehoge');
のように、「カッコを入力 → カーソルを内側に → シングルクォーテーションを入力 → カーソルを内側に → "hogehoge" を入力 → 末尾にEnd (Space+;) で移動」といった操作をしてみると、右手をまったく動かさなくて済むことに驚くのではないかと思います。
最初は慣れが必要かもしれませんが、一度使いこなすと手放せなくなること間違いなしです!ぜひお試しください。