hadix-lin / ideavim_extension

IdeaVIM插件的扩展插件
Apache License 2.0
291 stars 36 forks source link

是否可以保持中文输入法的英文模式? #70

Open Azureki opened 3 years ago

Azureki commented 3 years ago

这个 issue https://github.com/hadix-lin/ideavim_extension/issues/66 中提到了搜狗输入法。而我使用系统自带的微软输入法也不行。 我一般习惯使用中文拼音输入法,按 shift 切换到英文写代码。但是按esc进入normal模式,再进入insert模式,就变成了中文。 插件版本:1.4.7。 不太清楚是本来支持的,但是我哪里做错了,还是本来就不支持这样做,正确的做法是在微软拼音/美国键盘之间切换?

hadix-lin commented 3 years ago

输入法自身保持输入状态,是输入法自己的特性,不是我这个插件可以解决的问题。

除非输入法本身提供API可以调用,否则我这个插件是做不到的。

liang-0131 commented 2 years ago

输入法自身保持输入状态,是输入法自己的特性,不是我这个插件可以解决的问题。

除非输入法本身提供API可以调用,否则我这个插件是做不到的。

确实有这个需求,大部分这类切换输入法插件都是能获取输入法中英文状态的。体验是保持一致的

Azureki commented 2 years ago

@liang-0131 我想Windows上的微软拼音、搜狗拼音都不支持获取中英文。如果可以作者就没必要这么麻烦了。而且也不仅仅是这一个插件如此,其他插件(win版)也同样。

我只知道如果用Linux上的fcitx输入法,进入normal模式再进入insert模式是保留原有中/英状态的。

liang-0131 commented 2 years ago

@liang-0131 我想Windows上的微软拼音、搜狗拼音都不支持获取中英文。如果可以作者就没必要这么麻烦了。而且也不仅仅是这一个插件如此,其他插件(win版)也同样。

我只知道如果用Linux上的fcitx输入法,进入normal模式再进入insert模式是保留原有中/英状态的。

这可以的Windows不行就算了 mac和Linux应该可以。可以看看这个类似的有很多可以获取中英文状态 https://github.com/yuanotes/obsidian-vim-im-switch-plugin

hadix-lin commented 2 years ago

@liang-0131 我想Windows上的微软拼音、搜狗拼音都不支持获取中英文。如果可以作者就没必要这么麻烦了。而且也不仅仅是这一个插件如此,其他插件(win版)也同样。 我只知道如果用Linux上的fcitx输入法,进入normal模式再进入insert模式是保留原有中/英状态的。

这可以的Windows不行就算了 mac和Linux应该可以。可以看看这个类似的有很多可以获取中英文状态 https://github.com/yuanotes/obsidian-vim-im-switch-plugin

谢谢你提供的线索,直接使用输入法自己的中英文状态切换的确是最好的方案,我研究一下。

liang-0131 commented 2 years ago

有的输入法自带命令切换:比如这个小小输入法http://yong.dgod.net/read.php?tid=2155&fid=7

hadix-lin commented 2 years ago

Duplicate of #81 #85

hadix-lin commented 2 years ago

Duplicate of #81

hadix-lin commented 2 years ago

Duplicate of #85

A-23187 commented 2 years ago

直接切换当前输入法的中英文模式可能是更合理的方式。在 Linux 或 macOS 下,有获取和切换当前输入法中英文模式的方法(具体,Linux:fcitx-remote,macOS:fcitx-remote for OS X)。而在 Windows 下,有接口 IMC_GETCONVERSIONMODE 用于获取中英文模式,IMC_SETCONVERSIONMODE 用于切换中英文模式。我用这两个接口实现了一个命令行工具 AIMSwitcher,可以切换自带的微软拼音输入法的中英文模式(所以应该可以满足 @Azureki 的需求),但目前的问题是这两个接口已经过时,对于搜狗等第三方输入法可能无效

hadix-lin commented 1 year ago

没有通用的方案不好处理,都是针对特定输入法的

而且相当多的windows用户都是使用搜狗输入法的,搜狗完全不开放

On Tue, Nov 8, 2022 at 3:59 PM A23187 @.***> wrote:

直接切换当前输入法的中英文模式可能是更合理的方式。在 Linux 或 macOS 下,有获取和切换当前输入法中英文模式的方法(具体,Linux:fcitx-remote,macOS:fcitx-remote for OS X https://github.com/xcodebuild/fcitx-remote-for-osx)。而在 Windows 下,有接口 IMC_GETCONVERSIONMODE https://learn.microsoft.com/en-us/previous-versions/windows/embedded/ms905959(v=msdn.10) 用于获取中英文模式,IMC_SETCONVERSIONMODE https://learn.microsoft.com/en-us/previous-versions/windows/embedded/ms905968(v=msdn.10) 用于切换中英文模式。我用这两个接口实现了一个命令行工具 AIMSwitcher https://github.com/A-23187/AIMSwitcher,可以切换自带的微软拼音输入法的中英文模式(所以应该可以满足 @Azureki https://github.com/Azureki 的需求),但目前的问题是这两个接口已经过时,对于搜狗等第三方输入法可能无效

— Reply to this email directly, view it on GitHub https://github.com/hadix-lin/ideavim_extension/issues/70#issuecomment-1306778161, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAH5ITPTCVOEP2ABZTQCNMDWHIB7NANCNFSM45I3Z3CA . You are receiving this because you modified the open/close state.Message ID: @.***>

HusuSama commented 1 year ago

我使用的微软自带的输入法,英文使用的美式英文键盘,但是能切换英文,不能在输入时切换回来,只能搜狗输入法吗?

A-23187 commented 1 year ago

我使用的微软自带的输入法,英文使用的美式英文键盘,但是能切换英文,不能在输入时切换回来,只能搜狗输入法吗?

如果你中英文输入都用的微软自带的输入法,可以试一试我的工具 AIMSwitcher,可以实现在微软输入法的中英文模式之间切换

HusuSama commented 1 year ago

@A-23187 你的这个只是通过 im-select 去进行的键盘切换,在vim和vscode中很容易编写,但是放在 ideavim 中,他本身不支持 autocmd 命令,不能在切换模式或者其他生命周期中操作,因为我本身不太熟java,如果是可以使用python、golang、rust这些我倒是能帮这个插件进行一些修改,而且看起来修改非常简单,然而我这里并不能打包成功,不知道为什么


也许,可以在文件src/main/kotlin/io/github/hadixlin/iss/win/WinInputMethodSwitcher.kt,添加关于微软键盘的指令,0x0804 image

hadix-lin commented 1 year ago

@A-23187 你的这个只是通过 im-select 去进行的键盘切换,在vim和vscode中很容易编写,但是放在 ideavim 中,他本身不支持 autocmd 命令,不能在切换模式或者其他生命周期中操作,因为我本身不太熟java,如果是可以使用python、golang、rust这些我倒是能帮这个插件进行一些修改,而且看起来修改非常简单,然而我这里并不能打包成功,不知道为什么

也许,可以在文件src/main/kotlin/io/github/hadixlin/iss/win/WinInputMethodSwitcher.kt,添加关于微软键盘的指令,0x0804 image

微软中文输入法支持操作系统指令来切换输入状态吗?如果你知道指令编码,并且可以帮忙做测试,我可以来修改这部分代码

hadix-lin commented 1 year ago

插件可以调用win32api

HusuSama commented 1 year ago

我在nvim中使用python进行过中英文的切换,但是我没有用java实现过这个方案,而且我并不熟悉idea的插件开发,不过我可以给你看下这边使用python进行的示例代码 ideavim_extension的项目我尝试过克隆修改并编译,但是似乎错误很多,因为没有弄过,所以也不清楚具体产生的原因 如果你想看下python的示例,你可以从下面访问:

https://github.com/1538379200/vim-switch-keyboard

hadix-lin commented 1 year ago

我在nvim中使用python进行过中英文的切换,但是我没有用java实现过这个方案,而且我并不熟悉idea的插件开发,不过我可以给你看下这边使用python进行的示例代码 ideavim_extension的项目我尝试过克隆修改并编译,但是似乎错误很多,因为没有弄过,所以也不清楚具体产生的原因 如果你想看下python的示例,你可以从下面访问:

https://github.com/1538379200/vim-switch-keyboard

跟我调用的基本是一样的api,只是键盘布局使用的码不同,我没有windows电脑,测试起来有点儿麻烦。

HusuSama commented 1 year ago

也许可以加入配置来自定义键盘码?在有配置加入的情况下使用配置,没有则使用代码中指定的?这个实现应该很简单,但是不知道这个可不可以做到

owenstake commented 1 year ago

直接切换当前输入法的中英文模式可能是更合理的方式。在 Linux 或 macOS 下,有获取和切换当前输入法中英文模式的方法(具体,Linux:fcitx-remote,macOS:fcitx-remote for OS X)。而在 Windows 下,有接口 IMC_GETCONVERSIONMODE 用于获取中英文模式,IMC_SETCONVERSIONMODE 用于切换中英文模式。我用这两个接口实现了一个命令行工具 AIMSwitcher,可以切换自带的微软拼音输入法的中英文模式(所以应该可以满足 @Azureki 的需求),但目前的问题是这两个接口已经过时,对于搜狗等第三方输入法可能无效

第三方输入法(qq、sogou)的接口理解实现错误了,中英文切换 用了这两个接口 IMC_GETOPENSTATUS IMC_SETOPENSTATUS。这接口原生是用来 关闭输入法,即纯英文输入,对微软拼音有效。