全平台实现Caps Lock切换输入法
效果
- Caps Lock 为输入法切换健
- Shift + Caps Lock 为大写锁定健 (macOS 可长按 Caps Lock)
macOS
系统设置->键盘->输入法->使用大写锁定键切换ABC。
Win
已知:Win+Space为切换键盘布局
- 下载 AutoHotkey 并安装:官网
- 在桌面右键->新建 AutoHotkey Script,可命名为CapsLockToWinSpace.ahk
- 右键点击 CapsLockToWinSpace.ahk -> Edit Script,会自动打开记事本,替换为以下内容并保存。
Capslock::
Send {LWIN down}{space down}
KeyWait, Capslock ; Wait for user to physically release it.
Send {LWIN up}{space up}
SetCapsLockState, off ; set caps lock off because holding the key would enable caps lock
return
- 双击运行CapsLockToWinSpace.ahk,测试CapsLock键功能。
- 设置开机运行:
- 将CapsLockToWinSpace.ahk移动到安全的位置,防止误删,比如
D:/Apps/CapsLockToWinSpace.ahk
- 在新位置右键复制 CapsLockToWinSpace.ahk
- 打开文件管理器,在地址栏输入
shell:startup
,回车Enter - 右键粘贴快捷方式
- 将CapsLockToWinSpace.ahk移动到安全的位置,防止误删,比如
Linux
1 查看keycode
执行xmodmap -pke | grep Caps
, 得到Caps_Lock键的keycode为66
[xcp@127 ~]$ xmodmap -pke | grep Caps
keycode 66 = Caps_Lock NoSymbol Caps_Lock
2 通过setxkbmap将Caps_Lock设为Control_R
之所以要用setxkbmap而不是只用xmodmap,是因为ibus和fctix对于xmodmap存在兼容性问题
执行setxkbmap -print
,通过xkb_symbols
后面的项可知当前keymap为pc
[xcp@127 ~]$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)" };
xkb_geometry { include "pc(pc104)" };
};
修改对应的keymap
sudo cp /usr/share/X11/xkb/symbols/pc /usr/share/X11/xkb/symbols/pc.bak
sudo vim /usr/share/X11/xkb/symbols/pc
将CAPS所在行的Caps_Lock
改为Control_R
key <CAPS> { [ Control_R ] };
注销,重新登录
3 xmodmap实现Shift+Caps_Lock为Caps_Lock
再次查看第一项所得到的keycode 66,发现其内容发生了变化
[xcp@127 ~]$ xmodmap -pke | grep 66
keycode 66 = Control_R NoSymbol Control_R
添加.Xmodemap
touch ~/.Xmodmap
将keycode 66那一行的新配置复制到里面,并且将NoSymbol
修改为Caps_Lock
,保存。
keycode 66 = Control_R Caps_Lock Control_R
执行xmodmap ~/.Xmodmap
后测试Caps_Lock和Shift+Caps_Lock的功能。