尝试过基于 macism im-select 命令行的输入法切换
macism 实现方式不可靠,旧版本模拟按快捷键切换,有时候切换不过去。新版本会闪一下,切换窗口焦点实现有问题
im-select 虽然显示的图标变了但实际上从没切换成功过
所以用 dynamic module 重新实现了一个最小输入法切换插件,暂时对我个人来说没有问题,欢迎测试
使用:
克隆仓库然后执行 build.sh
(add-to-list 'load-path "/Users/keke/Code/Github/input-source")
(require 'mac-input-source)
(mac-input-source-list) ; 获取输入法 ID 列表
(mac-input-source-current) ; 获取当前输入法 ID
(mac-input-source-select "com.apple.keylayout.ABC") ; 根据 ID 切换到对应输入法
3 个赞
yibie
2
macOS 下可用吗?
(mac-input-source-select “com.apple.keylayout.ABC”)
这个设定是啥意思?在 Emacs 只用英文?
支持在 Windows 11系统使用吗?
目前 Windows 平台下的切换输入法已经坏了很久了。没法配合 Windows 11 的输入法使用,只能开Windows 10 兼容模式才能用。
那是输入法的 ID 可以用 (mac-input-source-list) (mac-input-source-current) 获取,你可以自己写点规则然后用 mac-input-source-select 切换输入法
我用下来是正常的,kiennq的emacs包,还有最新的beta小狼毫/微信输入法,都能通过(w32-set-ime-open-status t)切换到中文,(w32-set-ime-open-status nil)切换到英文。
系统是Windows11 24H2和25H2
2 个赞
小狼毫确实可以使用。我用的自己编译的官方版本 Emacs 31
我也是配合小狼毫用的,但是发现一个问题:如果用 Windows 自带的 Ctrl-Space 更换输入法,那么 w32-get-ime-open-status 返回的值会改变,但是如果用 Shift 切换中英文输入状态(这个是在 Rime 端配置的),那么 w32-get-ime-open-status 返回的值就不变。
我前面一直在用 w32-set-ime-open-status 切换,但问题在于我在英文的编辑状态 esc 回到 doom 的normal 状态时,这个方法将输入法又切回中文了。所以我从一个单纯的需求,即不管编辑状态时输入法是中文还是英文状态,回到normal 时都将输入法设为英文状态,跟 ChatGPT 迭代了几次,得到的结论是:
只要你还在用:
Windows 系统 IME
Rime(尤其万象)
外部切换工具(im-select / Win+Space)
你就不可能做到:
Insert 期间输入过程 绝对不被系统切回 ENG
底下是详细一点的说明,感觉说的挺有道理。所以开始配置 emacs-rime 了……
为什么 sis 和“纯 im-select”都会失败(核心原因)
关键事实(必须接受)
im-select 控制的是:
Windows 的“键盘布局 / 输入法 ID”
而 Rime 的工作模型是:
- 在输入过程中
- 会根据上下文 / ascii_mode / commit 状态
- 主动向 Windows 请求 layout 同步
这在以下情况下尤其明显:
- 万象拼音(强烈使用 ascii_mode)
- 智能中英混输
- 候选确认前后的状态切换
这不是 bug,是 Rime 的设计
1 个赞
emacs-rime 配置失败。可能是 windows 下 emacs 不支持 module 加载,不管是 scoop extra 的 emacs 还是 kienq 的 emacs-x/k,可能需要自己编译 emacs, 这个就不考虑了。
于是改用另一个思路,配置 rime,目前效果还可以,除了在中文编辑状态下要按两次 esc 回到 normal, 其他都符合预期:
# 配合 emacs evil, 让 esc 和 C-g 回到 normal 状态时将 rime 设为英文
# 情况 1:有候选字时,ESC, C-g = 清屏
- { when: has_menu, accept: Escape, send: Escape }
- { when: has_menu, accept: Control+g, send: Escape }
# 情况 2:没有候选字时,ESC, C-g = 强制英文状态
- { when: always, accept: Escape, set_option: ascii_mode }
- { when: always, accept: Control+g, set_option: ascii_mode }
这个函数应该是坏了挺久了,我都是为想要的buffer手动设置hook以便(sis-set-other)
1 个赞
请问一下,我刚刚从fcitx5想转用pyim或emacs-rime
现在pyim和emacs-rime都能用起来,感觉上emacs-rime更舒适一些,但是evil模式下用“/”搜索中文遇到麻烦,每次只能输入一个字符,显示一个中文字,当输入第二个字符后,显示立马切走了,不太好用。
请问大家有遇到这个问题吗?怎么解决的?
我又查了一下,有pyim-isearch模式,可以和emacs-rime无冲突的使用吗?
谢谢啦!