20240506 更新:
现在上面的 (global-set-key (kbd "L") 'hydra-caps/body)
已不在使用,连续输入大写字母用键盘原生办法,输入单个大写字母后换回来仍用 逗号+字母
的方法。
emacs不能识别shift输入的大写字母和caps lock
输入的大写字母的问题用第三方工具ahk解决了。而且shift键模拟ctrl键的行为也模拟得更像了。因为不用在emacs端对每个键都绑定一次,代码量也更少了。
ahk端代码28行
#HotIf WinActive("ahk_class Emacs") ;;emacs之内有效
+a::send "^a"
+b::send "^b"
+c::send "{F13}"
+d::send "^k" ;;ctrl+k,del一个字符改一整行
+e::send "^e"
+f::send "^f"
+g::send "^g"
+h::send "^h"
+i::send "{F14}"
+j::send "{F15}"
+k::send "{F16}"
+l::send "^l"
+m::send "^!n"
+n::send "^n"
+o::send "^!p"
+p::send "^p"
+q::send "^x^e" ;;ctrl+x ctrl+e
+r::send "{F17}"
+s::send "^x^s"
+t::send "{F18}"
+u::send "{F19}"
+v::send "^v"
+w::send "^w"
+x::send "^x"
+y::send "^y"
+z::send "^xu" ;;undo
#HotIf
shift+c,i,j,k,r,t,u,
这几个键我不希望和ctrl键的行为保持一致,于是绑定到F13-F19,然后在emacs端在绑定到自己写的几个hydra命令上,如:
(global-set-key (kbd "<f14>") 'hydra-dumb-jump/body);;I键
(global-set-key (kbd "<f15>") 'hydra-git/body) ;;J键
(global-set-key (kbd "<f16>") 'hydra-search/body) ;;K键
之前输入单个大写后换回来没有问题,但连续输入N多个大写字母,中间还有间隔切换这些体验就不太行,现在用原生方法体验非常棒了。
最后感谢 @BlindingDark 和 不知名TG群群友 提供的解决思路 ,否则此问题可能无解