29.1 29.4的输入法探测也失效了

和这个一样 bug#71711: 30.0.50; w32-get-ime-open-status always return t

w32-get-ime-open-status 不正常,w32-set-ime-open-status 正常

看来用windows的同学少,windows client 失效 · Issue #56 · laishulu/emacs-smart-input-source · GitHub

目前情况就是这个功能暂时没人维护了,只有windows+CJK用户才用的到但是现在emacs没有windows+CJK的开发人员

The w32-get-ime-open-status will alway return t.

但我的此函数一直返回的nil

GNU Emacs 31.0.50 (build 1, x86_64-w64-mingw32) of 2024-11-20

版本 Windows 11 企业版
版本号 23H2
安装日期 ‎2024/‎8/‎29
操作系统版本 22631.4541
体验 Windows 功能体验包 1000.22700.1055.0

而且我能在client里正常使用sis

有大佬想维护一下这个功能吗?我5年前写的。现在不用windows,没法在摸鱼时间来查原因,重新配置一遍windows上的编译和debug好麻烦。

我测试了一下,Windows 10 家庭中文版(22H2)和最新的emacs 30.0.93(2024.12.20编译的pretest版本),w32-get-ime-open-status有时候的返回是正确的,但是在切换回英文状态,就是(w32-set-ime-open-status nil)后就不正确了,一直不变,可能是nil或者t,原因不详。

另外我用evil是只设置输入法状态,不调用w32-get-ime-open-status函数,所以没什么影响。

这个问题我测试下来是和新版本 Windows 的输入法有关,因为使用 Windows 11自带的拼音输入法时,如果开启兼容模式,使用旧版的输入法的话,是正常的。

Rime 目前在 Windows 上也更新到了和 Windows 11 输入法一样的 API,所以也会出现楼主所说的问题。

就是 win 11 的 rime有这个问题,切换过一次后失效。我原来这个自动切换输入法的包(https://github.com/QiangF/imbot)需要更改一下控制逻辑了。

我发现虚拟机用这个极度精简的win 11非常丝滑 ultralight

不知道这个(https://github.com/daipeihust/im-select)有没有参考价值。

ImmGetOpenStatus (imm.h)这个api一直没有变可能是因为在lisp线程调用ImmGetOpenStatus函数导致的。ImmSetOpenStatus是要求必须是creator of a specified input method context handle,就是window gui thread才能调用。但是ImmGetOpenStatus函数在当时开发测试时,直接在lisp thread能正确获取到输入法状态。

如果在window gui thread(图形主线程,就是创建输入法的那个gui thread)中调用,应该能正确获取到输入法状态。

2 个赞

但我这边测试下来 Emacs 28.1 和 Emacs 29.1 都是有问题。以前都是正常的,就是 Windows 改变了什么。

打开了输入法的下面这个选项就都好了。可能是 Windows 新版输入法本身有 Bug。

需要社区大佬解决这个bug。我得等哪天用回windows才有时间看了,估计是不可能,以后都换linux了。

请教下,imbot 是做什么用的,解决什么问题?我看 README 没看明白。

自动切换输入法,和sis类似,只有200行你自己看代码。

我把imbot的输入法状态探测给除掉了,感觉代码反而更简单了,这个linux也是很好用的。不过我不知道这个输入法探测w32-get-ime-open-status和设置函数w32-set-ime-open-status哪个更耗时。

imbot(https://github.com/QiangF/imbot),250行基本实现sis的功能,欢迎大家测试。

1 个赞

readme需要写细一点,要不然只能去读代码才知道怎么用了。

输入法探测,主要是有两点考虑:

  • 在do magic后,要恢复之前的输入法,所以一定是要保存输入法状态的。
  • 用户在emacs之外切换输入法,如果你不探测输入法,你得不到最新的输入法状态。

windows下,好多人用WSL吧,这样的话,windows本身无所谓了。

不如去reddit也发个帖子,那边流量大说不定能找到愿意接手的人