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

是这样的,
你是从其它应用切回emacs后,
立刻就 i 进入 insert mode?

如果稍微延迟一下再 i 进入 insert mode,
是不是就没这个问题了?

emacs处理窗口焦点的切换(focus in事件)是有一个延迟的,
这样操作就导致:

  • focus in之后恢复当前buffer的input source(因为离开前为normal状态,所以为english)
  • 你进入insert mode切换input source(为rime)

这二者抢占了。

比较dirty但是直接的办法是,
你把下面这个函数在自己的配置文件中重新定义一下,让sis不要切换。

但是这块也不算是sis的bug,
sis对于焦点切换也只能做到这一步。
包治百病的用法就是切回emacs稍微等一下。

不过我又想到一点,
macos可以系统配置“自动切换到文稿的输入法”,
你如果配置了这个,
在使用GUI Emacs时,应该是不需要sis自己去恢复当前buffer的输入法的。
那就可以用空函数去覆盖上面那个函数了。
但是!!!
macos也会帮你主动地切输入法,就是不知道会不会也有延迟,导致同样的问题

不过sis针对的是一般情况:非MacOS系统,或没系统设置“自动切换到文稿的输入法”,或用的是Terminal Emacs等等。

2 个赞