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

如何配置,还请大佬明示?

已经试验过楼主给的这个配置:

(defun emacs-ime-disable ()
    (w32-set-ime-open-status nil))
(defun emacs-ime-enable ()
    (w32-set-ime-open-status t))
(add-hook 'evil-insert-state-entry-hook 'emacs-ime-enable)
(add-hook 'evil-insert-state-exit-hook 'emacs-ime-disable)

这个只有64位版本的吗,我下载了snapshot.zip,32位下面无法运行

使用清华的镜像源下载应该能快点,链接地址附下:

https://mirrors.tuna.tsinghua.edu.cn/gnu-alpha/emacs/pretest/windows/emacs-28/

1 个赞

pretest有32bit的吗?好像是64bit的吧。win10一般都64bit了吧。

不好意思,我现在用macos,没有windows来测试。

就是这样配置。先确定下载的pretes的emacs版本和编译时间。M-x version 看看版本是否正确。我用去年9月份的28.0.50 pretest版本是ok。一般我是用自己编译的master分支或者native-comp分支。

scratch 里面执行 (w32-set-ime-open-status nil) 是否报错,报错就是没有这个函数。可能用的版本不对。

已经可以正常使用了,感谢您的帮助和贡献!敬佩!

pretest 27是有32位的,这样看来32位系统是没有希望了

有人用我就很高兴。

微软拼音的效果比Rime好,切换的时候在状态栏上能看见输入法的中英文标识会变。Rime的图片不会变。

现在跑到macos上,macos上找不到切换输入法中英文状态的api,只能把输入法从Rime切换到英文输入法。水果真够坑爹的。而且输入法的api文档特别少,以前在官网能查到,后来居然删了。还是微软对他的系统开发人员友好。

微软的切换输入法的api不区分操作系统是32bit还是64bit的。可以自己编译一个32bit的emacs。

1 个赞

正打算过年的时候试试看,先读一下编译文档

另外想请问一下,在win7以及以上平台,如果本机输入法不止一种,也是可以正常调用吗

多个输入法也问题,我的win10有微软输入法和Rime。是在一个输入法内切换中英文状态。

我的意思是只能调用系统设置的默认输入法吗,这样不会造成多个输入法冲突

哦,是切换emacs当前正在使用的输入法,比如现在在emacs中使用的是Rime,会在Rime的中英文状态间进行切换,如果切换为微软拼音,则在微软拼音的中英文状态间切换,微软输入法的中英文状态可以很方便从任务栏里的语言栏上看到是什么状态。

当然要求使用的中文输入法需要支持微软的输入法api。

明白了,也就是还是要先启动系统输入法,感谢

给楼主点赞。:+1:
Mac 上要是也能解决就太好了。回头先试试Windows

macos上也是可以的。我参考emacs mac port的代码在master分支上修改了输入法相关的代码,用的感觉很一般。这么折腾我觉得不如用 GitHub - laishulu/macism: Command line MacOS Input Source Manager ,还不用改代码了。我主要觉得输入法不要搞得太复杂,按mode处理不同输入状态,你可以用 GitHub - laishulu/emacs-smart-input-source: Less manual switch for native or OS input source (input method).

水果系统上切换输入法真蛋疼,水果的输入法api没找到像微软一样可以切换中英文状态的api。只能切换到另外一个输入法。垃圾啊。这样有时候在切换到Rime时,原来是中文状态,按esc后,再按i切换到insert mode后变成英文,这时要按shift再切。不过有时候又能保持住,搞不懂是什么情况下可以记住Rime的输入法状态。

(if (eq system-type 'darwin)
    (progn
      (defun emacs-ime-disable ()
        (start-process "set-input-source" nil "/usr/local/bin/macism" "com.apple.keylayout.ABC"))
      ;; (mac-select-input-source "com.apple.keylayout.ABC"))

      (defun emacs-ime-enable ()
        (start-process "set-input-source" nil "/usr/local/bin/macism" "im.rime.inputmethod.Squirrel.Rime"))
      ;; (mac-select-input-source "im.rime.inputmethod.Squirrel.Rime"))

      (add-hook 'evil-insert-state-entry-hook 'emacs-ime-enable)
      (add-hook 'evil-insert-state-exit-hook 'emacs-ime-disable)
      ))

确实,简单点好。那我还是在Emacs 用 Emacs-rime 好了。不折腾

emacs evil, win下中文输入的最佳解决方案!

建议标题中的 修改源代码 这几个字去掉,很多人看到这几个字可能因太复杂或不安全或麻烦,直接pass了!

唉,不知道怎么改帖子的标题,可能是没权限。