由于目前在通过 Shift 切换输入法遇到了点问题,索性通过 AutoHotkey 把闲置的 CapsLock 键利用起来。
主要需求:
-
单击 CapsLock 时,如果在 Emacs中,则映射到 F9, 执行 sis-switch 通过 w32-get-ime-open-status 切输入法的中英文状态。如果不在 Emacs中,则映射为右Shift键(LShift),直接由小狼毫(Weasel)切换中英文状态。
-
双击或者长按 CapsLock时,切换大小写状态。(macOS 默认的也是长按 CapsLock,保持换设备时一致的体验)
其实双击可以邦定到其他更加有用的功能,目前还没想好。
AHK (v2)代码如下, 希望对 Emacs 用户有点用:
;; Toggle Chinese and English input method in Emacs
$CapsLock::
{
global
SetStoreCapsLockMode(false)
ErrorLevel := !KeyWait("CapsLock", "T0.25")
if ErrorLevel ;; Long press
Send("{CapsLock}")
else
{
ErrorLevel := !KeyWait("CapsLock", "D T0.5")
if ErrorLevel ;; Single click
{
If WinActive("ahk_exe emacs.exe")
Send("{f9}")
else
Send("{RShift}")
}
else ;; Double click
Send("{CapsLock}")
}
ErrorLevel := !KeyWait("CapsLock")
return
}
这是个人的 AHK 配置,实现了在 Windows 系统都用 Emacs 按键
4 个赞
yibie
2
虽然不在 Windows 下用 Emacs,但还是点赞支持。
AHK 在 Windows 下简直就是神器中的神器。
感谢分享,ahk 辅助输入法确实方便,以前用 ahk 搓过一个 esc 强行更改微软输入法为英文的脚本,用 vim 系软件的时候巨爽
直到微软某次更新后脚本失效,我在不断拖延重构脚本的后续几个月慢慢习惯了自己切输入法
不建议使用 AHK ,我的 AHK 脚本已经废弃掉了,太浪费时间,可以直接用微软的 PowerToys 做映射,又好又快,还有很多其他好用小组件。
1 个赞
powertoys 目前只适合简单映射,op 这种带双击和长按的需求是处理不了的 
PowerToys 我也试过,不过它连把 Shift 映射为 Ctrl + 12 都做不到。
我也是用ahk实现的capslock切换中英输入法。
我的实现方式是在搜狗中文输入法和微软英文输入法之间切换, windows里可以设置C-f11来切换输入法, 然后我再把capslock映射到C-f11上
原来的版本因为加了双击功能,有点小问题:会造反按了 CapsLock 后需要等待一会儿输入法才切换。
下面的AutoHotkey实现完全没问题了:
;; Toggle Chinese and English input method in Emacs
$CapsLock::
{
global
SetStoreCapsLockMode(false)
pressTime := A_TickCount ; 记录按下时间
KeyWait("CapsLock") ; 等待按键释放
; 计算按住时长
holdDuration := A_TickCount - pressTime
if (holdDuration > 250) ; 长按超过250ms,当作大写锁定
{
Send("{CapsLock}")
}
else ; 短按,立即切换输入法
{
If WinActive("ahk_exe emacs.exe")
Send("{f9}")
else
Send("{RShift}")
}
return
}
另外,在 Linux 下我也通过 xremap 实现了同样功能。
体验上和 macbook 上的大小写键切换中英文体验一样了。
# Configuration for xremap on Linux
# https://github.com/xremap/xremap
modmap:
- name: CapsLock tap -> toggle Input Method in Emacs, hold -> CapsLock toggle
application:
only: emacs
remap:
CapsLock:
held: KEY_CAPSLOCK
alone: F9
- name: CapsLock tap -> toggle Input Method in other Apps, hold -> CapsLock toggle
application:
not: emacs
remap:
CapsLock:
held: KEY_CAPSLOCK
alone: [KEY_LEFTCTRL, KEY_LEFTSHIFT]
2 个赞