能否实现在激活某个buff时,切换输入法为英文?

目前碰到的问题是,org-agenda view buff内,基本是用的一些快捷键如“r:刷新任务状态"等,不太可能输入中文,但是输入法经常是中文状态,能否配置实现当切换到某些特定buff(如不可能输入中文的agenda view),自动将输入法切换为英文输入呢?避免按了几个键没反应才发现是中文输入。

sis 可以的,或者用这个patch .emacs.d/patches/ns-mac-input-source.patch at main · LuciusChen/.emacs.d · GitHub ,自己写逻辑判定。

我写过这个代码用于实现进入emacs的时候切换成英文输入法,退出emacs的时候恢复原本的输入法。

emacs内我用的都是emacs rime。

具体到你的使用场景,我不知道你用的是ibus还是fcitx。 不过把这个代码丢给AI,让它稍微改一下应该就可以符合你的要求了。

(defun get-ibus-engine ()
  "Get the current IBus engine."
  (interactive)
  (let ((engine (string-trim (shell-command-to-string "ibus engine"))))
    ;; (message "Current IBus engine: %s" engine)
    engine))

(setq ibus-engine (get-ibus-engine))
(defun my/on-focus-in ()
  "Code to run when Emacs gains focus."
  ;; (message "Emacs is now focused!") ; 打印一条消息
  (setq ibus-engine (get-ibus-engine))
  (start-process "ibus-engine" nil "ibus" "engine" "xkb:us::eng")) ; 将 IBus 切换为英文输入法
(defun my/on-focus-out ()
  "Code to run when Emacs loses focus."
  ;; (message "Emacs lost focus!") ; 打印一条消息
  (call-process "ibus" nil nil nil "engine" ibus-engine)) ; 将 IBus 切换为英文输入法
;; 将代码添加到 focus-in-hook
(add-hook 'focus-in-hook 'my/on-focus-in)
(add-hook 'focus-out-hook 'my/on-focus-out)

用 emacs-rime 吧。

1 个赞