macOS
建议将 cpas_lock 换为 fn,以防止与 macOS 一键打开/切换到 App(替代 Cmd + Tab) 中的按键产生冲突。
{
"description": "方向: caps_lock + h/j/k/l",
"manipulators": [
{
"from": {
"key_code": "h",
"modifiers": {
"mandatory": ["caps_lock"],
"optional": ["any"]
}
},
"to": [{ "key_code": "left_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "j",
"modifiers": {
"mandatory": ["caps_lock"],
"optional": ["any"]
}
},
"to": [{ "key_code": "down_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "k",
"modifiers": {
"mandatory": ["caps_lock"],
"optional": ["any"]
}
},
"to": [{ "key_code": "up_arrow" }],
"type": "basic"
},
{
"from": {
"key_code": "l",
"modifiers": {
"mandatory": ["caps_lock"],
"optional": ["any"]
}
},
"to": [{ "key_code": "right_arrow" }],
"type": "basic"
}
]
}
Windows
AutoHotkey v2:
#SingleInstance Force
#InstallKeybdHook
global initialCapsLockState := ""
#HotIf GetKeyState("CapsLock", "P")
h::
Send("{Left}")
initialCapsLockState := GetKeyState("CapsLock", "T")
return
j::
Send("{Down}")
initialCapsLockState := GetKeyState("CapsLock", "T")
return
k::
Send("{Up}")
initialCapsLockState := GetKeyState("CapsLock", "T")
return
l::
Send("{Right}")
initialCapsLockState := GetKeyState("CapsLock", "T")
return
#HotIf
CapsLock Up::
; 仅按下 CapsLock 未使用组合键时切换 CapsLock 的状态、使用组合键则保持现状不执行切换(什么也不做)
if (initialCapsLockState = "") {
SetCapsLockState(!GetKeyState("CapsLock", "T"))
}
; 重置变量
initialCapsLockState := ""
return
AutoHotkey v1:
#SingleInstance Force
#InstallKeybdHook
Menu, Tray, Tip, CapsLock + HJKL to arrow keys
; P:是否按下,T:是否开启
; 只有松开后状态才会切换,只要未松开状态就是按下前的状态
#If GetKeyState("CapsLock", "P")
h::
Send {Left}
initialCapsLockState := GetKeyState("CapsLock", "T")
return
j::
Send {Down}
initialCapsLockState := GetKeyState("CapsLock", "T")
return
k::
Send {Up}
initialCapsLockState := GetKeyState("CapsLock", "T")
return
l::
Send {Right}
initialCapsLockState := GetKeyState("CapsLock", "T")
return
#If
; 如果写了UP则需要手动处理切换状态,如果方法体为空则不切换(表现为点击没反应)
CapsLock Up::
; 仅按下 CapsLock 未使用组合键时切换 CapsLock 的状态、使用组合键则保持现状不执行切换(什么也不做)
if (initialCapsLockState = "") {
SetCapsLockState % !GetKeyState("CapsLock", "T")
}
; 重置变量
initialCapsLockState := ""
return