你要改成啥标题?我帮你改
请帮忙改为 “emacs 28.0 windows版原生支持输入法的中英文切换”,谢谢!
win10下测试可以,用的第三方五笔输入法,会在中英文状态切换。
这么说 macos 版本下的 gvim 也没有这个功能?
macos的vim我用的是macvim。输入法是rime,从insert mode按esc切换到normal mode时,会切换到英文状态。再按i或a进入insert mode就不行,也可能是rime的功能。macvim用得少。
mac下切换中英文状态不如win下方便,只能是rime和英文输入法之间的切换,不知道怎么做到在rime中切换中英文状态。
照着emacs mac port的代码在master分支上稍微改了一下,像windows版一样增加2个系统函数,切换输入法。测试下来不如windows版好用,无法做到rime中切换中英文状态。我的代码写得太垃圾,没commit,自用吧。可以看看论坛里的 smart-input-source 或者用 macism 。
BTW:apple的输入法api的文档极其垃圾,在官网上几年前是有的,后来又取消了,没法查了。无力吐槽水果。对系统开发人员太不友好。
在Windows11的emacs上面试了下(编译版本:https://github.com/kiennq/emacs-build)
$ emacs-version
GNU Emacs 29.0.50 (build 1, x86_64-w64-mingw32)
结果是(w32-set-ime-open-status nil)
可以正常将自带的微软拼音切换到英文状态,但是无法通过(w32-set-ime-open-status t)
来切换回中文状态。
我之前也尝试过,确实有这个问题。
换成mac后,好久没用windows了,有时间我看看。
不知道这种方法能不能再Linux上实现,即自动切换一种输入法的中文输入和英文输入!!!
十分感谢!不仅可以自动切换Windows10自带的中文输入法,日语输入法也可以切换。
Linux 上直接用 D-Bus 给对应的输入法实现 (fcitx,ibus)发送信息就能切换了,不用内置进 Emacs.
为什么我这个一直返回nil,,语言也没有切换过去。
还有想请教一下为什么我用 ImmGetContext
ImmSetOpenStatus
一直返回0,,有没有其它api切换中英文。
意思是如果想做一个通过命令行切换中英文的程序是不可能了吗。有没有可能用其它的windowsThread调用(
-
emacs的版本是28.0.50以后的吗?从官网上下载的应该已经有这个函数了。win10上是ok的。其他版本的windows没测试过。我现在没怎么用windows了。。。
-
windows的win32 gui编程中,一个程序的输入法是由程序的图形线程来管理的。就是说不能随便在一个线程中调用windows的输入法函数就能控制输入法。emacs主要有2个线程,一个是windows thread,处理gui相关的,如各种自定义的window message。另外一个是lisp thead,也叫main thread,lisp在这个线程执行。所以lisp执行只是发一个自定义的window message,window thread接受到这个message后做相应处理。
不好意思,不知道windows下有没有这样的命令行工具。
多谢。目前我在Emacs 是用的这个 GitHub - daipeihust/im-select: 📟 Switch your input method through terminal 工具,也是可以在命令行切换。但是这个工具需要安装多种语言,只能用来切换中文输入法和英文,没法切换中文输入法的中英文状态。
似乎没有这种api,我也想弄一个来着,,,,
ImmSetOpenStatus
似乎只能在某个窗口进程内使用,,
多谢提供文档,有空去研究一下看看。
不嫌弃的话,可以用 autohotkey 模拟发送 shift ,我不是开发人员,只会用这个。 用法也很简单,安装 autohotkey ,新建个 .ahk 文件,用 =w32-shell-execute= 运行即可
autohotkey 代码就一句
send, {shift}
结合本贴的 =w32-get-ime-open-status= 和 sis 的探针,能在 insert 的时候自动切换中英文,用起来相当不错,少按了很多 shift
ps: 我试过 w32 的 =keybd_event(VK_SHIFT,0,0,0)= 和 =keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0)= ,能力太菜没能成功…
pps: 感谢老哥热心回答 windows 相关的问题,对我帮助很大,希望能帮到你