key-echo 单按修饰键来调用 Emacs 命令
Emacs
2023-08-03 999字

Emacs 本身的按键机制需要用户最少按一个组合键才能执行一个命令, 如果用户只按一个修饰键, 比如只按 Shift 时, Emacs 本身并不会触发一个 Shift 按键事件。

这样的机制在大部分 Emacs 场景都没有问题, 但是对于输入法场景就很不方便, 用户每次切换中英文都需要按一个组合键, 不能像传统输入法那样只需要按一次 Shift 键就可以快速切换输入法状态。

这半个月都在旅游自驾, 今天东北下大雨, 终于有时间写会儿代码来解决这个问题啦。

key-echo 是一个利用 XRecord 技术来实现的全局按键监听插件, 它可以监听一些特殊的单按键事件, 比如用户只是按了一下 Shift 辅助键而没有按其他字母按键时, 发送信号给 Emacs, 让 Emacs 执行一些 Elisp 代码, 比如切换输入法。

安装

  1. 安装 Emacs 28 及以上版本
  2. 安装 Python 依赖:
    • Linux: pip3 install epc sexpdata six pynput
    • Windows: pip3 install epc sexpdata six pynput pygetwindow
    • macOS: pip3 install epc sexpdata six pynput pyobjc
  3. git clone 下载此仓库, 并替换下面配置中的 load-path 路径
  4. 把下面代码加入到你的配置文件 ~/.emacs 中:
(add-to-list 'load-path "<path-to-key-echo>")

(require 'key-echo)
(key-echo-enable)

(defun key-echo-shift-to-switch-input-method (key)
  (interactive)
  (when (string-equal key "Key.shift")
    (toggle-input-method)
    ))

(setq key-echo-single-key-trigger-func 'key-echo-shift-to-switch-input-method)

加上上面设置后, 按 Shift 可以自由切换输入法。

选项