emacs 28.0 windows版原生支持输入法的中英文切换

你得去看看windows的文档了,好像是没有你想要的api,而且就算有,输入法也不一定要实现。既然emacs可以支持切换,为什么要用外部程序切换?外部程序稳定性也不如emacs调用win32 api。

多谢。我要这个功能不是为了解决 Emacs 的输入法问题,是其他软件程序里面想要通过命令行来控制输入法。
Emacs 现在我就是用的 sis + im-select+ AHK+小狼毫 实现的用大写键切换输入法,和macOS保持一致的体验。

一个无聊的人,闲着蛋疼又干了件无聊的事。要不要试试VimR(macOS上的nvim 图形界面)。我把输入法切换的功能加进去了。GitHub - georgealbert/vimr: VimR — Neovim GUI for macOS in Swift

4 个赞

:+1: 回头去体验一下,nvim 用户的福音。

(defun sis-update-shift ()
  (when (w32-get-ime-open-status)
    (w32-set-ime-open-status nil)
    (w32-shell-execute nil "~/.emacs.d/elpa/shift.ahk")))

(add-hook 'sis-change-hook #'sis-update-shift)

按照思路这样操作了下,基本可以做到中文输入法中文状态和英文之间来回切换了。

1 个赞

vimr上游已经合并我的PR了。直接下载最新的版本即可。

2 个赞

最近在用搜狗拼音输入法,测试了下这两个函数倒是能正常工作了,虽然托盘区域的状态图标没有变化,但确实能做到中英文模式切换。

@georgealbert

我在 Windows 11 上目前用兼容模式的拼音输入法可以配合 sis 正常切换。但是用 Windows 11 的新输入法就没法正常工作。

在小狼毫上也是正常的。大佬啥时候有空,适配下 Windows 11 最新的输入法啊?

在 Windows 10 上一切正常。

Emacs 29.0.50

sis 不能用么?我这边 win11 下,im-select 是 work 的。 能详细说下?

emacs 28 后内置支持切换输入法中英文状态,不需要用im-select。

sis 也默认支持了,不需要设置。

现在用macOS,win10好久不用了,也没有win11,不好意思。你有空可以在win11上改emacs的代码,看看哪里的问题,是否是api变了。

理解!我现在又切换会用 Rime 了,用了段时间 Windows 自动带的输入法,感觉还是没 Rime 舒服。

估计是 Win 11 改了东西,等以后有时间我再看看。

非常nice

一点拙见,系统自带的输入法用得越多,词汇积累得也越多;结合 Emacs 的自动补全,起码在 Emacs 中使用系统输入法还是挺舒服的!仅供参考!

Win11自带输入法目前只能被sis-set-english切换至英文状态,无法从英文状态里通过sis-set-other切换至中文

和emacs-sis比如何,sis做得更复杂,使用的im-select切换。

目前我在Windows 10和11上用 sis切换输入法,没什么问题了,以前有问题是自己AHK没设置好。

@georgealbert 大佬,(w32-set-ime-open-status t) 返回的是 nil, 目前在 Windows 11 和 Windows 10 上没法切换输入法为中文了。

(w32-set-ime-open-status nil) 可把中文切换为英文。

测试了 emacs 29.2, 29.3 和 30.0.50,都是一样。

好久不用windows了。在win10(版本号10.0.19045.4291)、emacs 30.0.50 (pretest 2023.04.15)中测试确实 (w32-set-ime-open-status t) 返回的是 nil,但是可以在insert mode中切换中文后,按ecs返回normal mode变为英文输入法。就是发现emacs切了窗口焦点后再次从normal mode进入insert mode时没有记住刚才的中文状态,又变回默认英文了。

不知道哪里有问题,要不忍忍,要是需要改c的代码话,commit好麻烦,得找个contributor帮忙才能提上去。

如果需要的话,可以找 @oldosfan 大佬帮忙提交。