屏蔽 Windows 下 Ctrl+Space 快捷键

屏蔽 Windows 下 Ctrl+Space 快捷键

作为一个 Emacser ,我会把包括 VSCode、 Clion 等开发工具的快捷键都设置成类 Emacs 的。其中有一个常用的快捷键 C-SPC ,用来设置选中区域的锚点。但这个快捷键被 Windows 自身的输入法快捷键占用。 Windows 下 C-SPC 是用来切换中英文输入法的。这个快捷键无论如何都取消不掉,取消勾选点确定后又会回来,只能设置成其他键,但这种方法只对 Windows 自带的输入法有效,对我习惯使用的搜狗五笔输入法没用。尝试了不少办法都没效果,包括在 PowerToys 里把这个组合键映射成 Disable 。

最后还是用 AutoHotKey 工具解决了这个问题,编写 AutoHotKey 脚本在 Emacs/VSCode/Clion 下把 C-SPC 组合键拦截下来再转发给相应的程序。其中有一个坑,在 Emacs 中可能是由于转发太快导致锚点刚被 set 完就被取消了,最后通过设置时延解决了这个问题。

脚本如下:

1

2

3

4

5

6

7

8

9

10

11

#HotIf WinActive("ahk_exe emacs.exe")

^Space::{

SetKeyDelay 75, 25

ControlSend "^{Space}", , "ahk_exe emacs.exe"

}

#HotIf WinActive("ahk_exe code.exe")

^Space::ControlSend "^{Space}", , "ahk_exe code.exe"

#HotIf WinActive("ahk_exe clion64.exe")

^Space::ControlSend "^{Space}", , "ahk_exe clion64.exe"

效果如下:

【2024年11月9日更新】

我们可以写代码让这个脚本随着 Emacs 启动和关闭,我让 ChatGPT 直接给我写了一份,目前用起来没有问题:

1

2

3

4

5

6

7

8

9

10

11

;; launch AutoHotKey for windows to cancel ctrl+space

(defvar my-ahk-process nil)

(defun start-ahk-script ()

(setq my-ahk-process

(start-process "my-ahk-script" nil "C:/Program Files/AutoHotkey/v2/AutoHotkey.exe" "C:/Users/niall/OneDrive/scripts/cancel_ctrl_space.ahk")))

(defun stop-ahk-script ()

(when (and my-ahk-process (process-live-p my-ahk-process))

(kill-process my-ahk-process)

(setq my-ahk-process nil)))

(add-hook 'emacs-startup-hook 'start-ahk-script)

(add-hook 'kill-emacs-hook 'stop-ahk-script)

相关推荐

梦幻西游172升175多久通关?升级技巧分享!
h365官方登录平台

梦幻西游172升175多久通关?升级技巧分享!

📅 10-18 👁️ 6081
女足世界杯官方公布跑动数据:中国女足单场103公里排名第一
宇宙中十二大星系名称,宇宙有超90%星系还待研究
h365官方登录平台

宇宙中十二大星系名称,宇宙有超90%星系还待研究

📅 08-17 👁️ 6018