(重新设计)中英文混打:OS输入法管理包 smart-input-source

这个在 mac 用 29 我也遇到了

这块都删掉试试,sis自动检测和配置了,应该是不需要的。

got it.

我昨天用的包,是6月初下载的版本,必须添加这四行才能生效。

早上更新了包之后,删掉这四行也可以用 :smile:

image 使用w32之后 还用配这个English吗 ,我这里怎么测试不成功? So the follow codes are not required actually. (sis-ism-lazyman-config nil nil 'w32) 需不需要增加?

我在win10系统使用微软拼音输入法,不需要再配置英文键盘了,其他输入法我没有测试。

当前系统如下,配置就是我上面贴的那样,不用再添加其他设置:

请问下有办法设置 Shift 来切换输入法吗?之前用 im-select 的时候,我可以通过 AHK 映射,在 Emacs 中Shift 映射为 C-\ 来切换不同的输入法。

现在这个只是切换状态的话,由于在 Emacs 中 Shift 按键首先会被系统的输入法捕获了,直接就切换了输入法状态,所以就没法工作了。 或者有没有办法提高 AHK 的级别,让它高于系统输入法。

感觉使用w32后逻辑反而变得特别复杂了,minbuff里的切换也不正常

没有特别明白你之前的操作方式,但是我觉得这个问题可以解决:

1、系统输入法中,可以设置不响应shift按键

2、AHK可以直接调用 im-select.exe 来进行输入法切换

用 im-select.exe 的方案,我知道,是可以正常实现用 Shift 切换不同的键盘方案。 这个方案在 Windows 11 不好用,切换的时候,右边侧边栏会闪一下,可能是因为 Windows 11 该死的动画效果。

但目前这个通过 w32 API 切换的是中文输入法的中英文状态,这个时候就没法通过 AHK 实现在系统中和 Emacs 中都用 Shift 来切换同一个输入法的中英文状态。

  1. 在 Emacs 之外,Shift 没有做任何映射,直接就是切换当前输入法的中英文状态
  2. 在 Emacs 中,Shift 映射为 F9,F9 绑定到 sis-switch 这个函数,用于切换输入法状态。
  3. 但是在 Emacs 中按 Shift 的时候,会先执行了第一步,才轮到第二步。

有问题可以描述出来,也许作者可以解决。

应该给个w32的最简配置测试一下,需不需要设置额外英文输入法等? 也可能我用的系统太旧了win7,等我换系统的时候再用w32吧,im-select够我用了,懒得折腾了。

Windows 10 的话,目前不需要任何设置。作者已经写到 sis 里面了,如果使用的 Emacs 28 以上,自动就会用 w32-set-ime-open-status 来切换系统输入法的中英文状态。我这边使用下来一切正常。 Win7 没试过。

不做任何按键绑定的情况下

  1. 在Emacs之外,Shift直接切换当前输入法中英文状态
  2. 在Emacs中,按Shift也能切换输入法中英文状态
  3. 在启用sis时,中文输入的情况下,按空格键 w32 API 生效,自动切换到英文状态

完全做到了系统中和Emacs中的行为一致,为什么要用AHK?

刚才又尝试了一下,现在用 AHK 可以正常 Shift 切换输入法状态了。AHK 在 Emacs 中绑定到 F9 (sis-switch)。

至于为什么要通过 AHK 间接用 sis-switch 来手动切换,主要是因为通过输入法自身的 Shift 切换时,光标颜色是不会跟着变更的,因为 Emacs 不知道系统的输入法变了。

厉害了,我没有想过这个问题

w32模式好像不能保存每个buffer的中英文输入状态了

我这边是正常的,可以保存状态。我用的是 Rime (小狼毫),Windows 10 ,Emacs 29.0.50

win10中系统自带的微软拼音输入法是emacs的w32 IME api配合得最好的,切换了能看见状态栏中的输入法的中英文状态变化,Rime应该没实现部分api,所以不行。

Rime 确实不行,不知道什么原因。不知道是 Emacs 问题还是小狼毫的问题,直接用Shift切换中英文,都看不到状态栏的变化。所以我要靠光标颜色来判断当前的输入法状态