(重新设计)中英文混打:OS输入法管理包 smart-input-source

可以用其他额外的软件来实现,或者用模式编辑,切换到其他 app 就到 normal mode,normal mode 下统一都是英文。

我希望的是离开emacs,比如进到微信、QQ等,恢复到原本的输入法,这些不需要normal。

macOS系统自带这个功能,
如果你是用windows的话,我就不清楚了。

sis里面也可以实现:

  • 切入emacs的时候,记下当前输入法。
  • 切出emacs的时候,恢复输入法。

我印象中,已经实现了这个功能啊。
不过也不确定,得翻一下代码。

怎么配置生效呢?

这些在 Mac 上有很多方法,自带的那个不太好用,我记得有个软件是可以实现这种记住当前的输入法的,而 hammerspoon 以及 Rime 本身是单独设置软件的默认输入法。

以后再有讨论,请到下面这个帖子去:

在mac系统上我可以使用shift按键切换英文输入法和中文输入法。但是在emac中使用这个包的话,在中文环境中按shift可以切换成英文输入,但是在英文环境中按shift就不能切换成中文输入了。这个问题大家有遇到过吗?我的emacs版本是29,是mac 2021 m1的。

emacs 不支持 shift 切换输入法

你需要用键盘映射软件中转下就可以实现在 Emacs 中通过 Shift 来切换输入法。 我在 macOS 用的是 karabiner 实现。

大概是这样做:

Emacs 中单按 Shift 时,用 Karabiner 等软件映射为 F9, F9 在 Emacs 中 邦定为 sis-switch 就可以了。

你需要装这个工具:

这个包使用感觉还有个问题,就是:emacs和外部软件输入法会相互干扰。比如我现在在emacs中使用的是英文,然后切换到外部浏览器打中文字,最后在切换到emacs中,发现当前emacs的输入法是中文了,而不是原来的英文了。这个很头疼啊。emacs输入的中英文最好别和外部的输入法的中英文相互干扰。

如果你使用模式编辑的话,可以设置 normal mode 下始终英文,Emacs 失去焦点后回到 normal mode,然后再根据不同的 mode 设置进入 insert mode 是中文还是英文。这样就不会互相干扰了。

这个方法感觉很好。在Emacs中会一瞬间的看到光标从蓝色(sis指中文输入法环境)变成其他颜色。感觉使用体验还可以,并没有感到有延迟的感觉。

在使用体验上感觉还是有点不是太好。这个问题发生在中文输入然后快速进入normal模式最后快速移动。比如:我当前在输入中文,然后快速按下ESC键,让编辑模式变成Normal,最后在快速移动,比如连续按j或k等。此时就会发现这个中文输入法框还滞留在屏幕上面,光标移动也发生混乱,此时的输入法好像还是中文模式,导致光标移动还是有问题。不知道大家有没有遇到这个问题。

我用的 meow,自己写了个 hook 在回到 normal mode 下变为英文,没有这样的问题。

有对应配置参考吗?

主要是就是在 meow 中根据 meow-insert-mode-hook 写了个进入和离开 insert-mode 的 hook,参考

然后加了

(add-to-list 'sis-context-hooks 'meow-entering-insert-mode-hook)
(add-hook meow-leaving-insert-mode-hook #'sis-set-english)

这样退出 insert-mode 就可以了。

另外从其他应用切换回来时,有时候也会带过来中文输入法。加了下面 focus 的时候触发

(defun lucius/meow-focus-change-function ()
    (if (frame-focus-state)
        (sis-set-english)
      (meow-insert-exit)))

  (add-function :after after-focus-change-function 'lucius/meow-focus-change-function)

好, 感谢。

after-focus-change-function 代码中处理了的。

但是有时候还是不行??