Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

输入法会依照不同程序改变输入状态,请问如何禁用这个功能? #454

Closed
asterho opened this issue Dec 24, 2019 · 16 comments

Comments

@asterho
Copy link

asterho commented Dec 24, 2019

gif
就像上图的样子,怎样保持一个状态不变呢?谢谢

@n8210san
Copy link

n8210san commented Jan 1, 2020

我的困擾和樓主相反,每個程序的輸入狀態都相同

@lotem
Copy link
Member

lotem commented Jan 2, 2020

你們看,我難不難?

@asterho
Copy link
Author

asterho commented Jan 2, 2020

@lotem 请问哪个选项控制这个功能呢?我patch过weasel.yamlapp_optionsdefault.yamlsave_options,都不能固定每个程序的输入状态。

@lotem
Copy link
Member

lotem commented Jan 6, 2020

初始狀態是指打開應用程序(啓動進程)時的狀態。記事本不是多窗口應用,因此圖示有兩個不同的進程,兩者不共享狀態。窗口切換時進程並未結束,因此狀態不變。
這是小狼毫實現的邏輯。反之也有人抱怨,比如二樓以及 rime/ibus-rime#87
問題是無論哪種實現,總能找到反例。

@Ace-Who
Copy link

Ace-Who commented Jan 6, 2020

难。

@VaslD
Copy link

VaslD commented Mar 21, 2020

Windows 系统设置可以让两个程序(严格来讲也许是窗口?)共享或不共享输入法,既打开新程序(窗口?)后是否重置输入法为默认值(系统所管理第一个键盘布局),但此设置不会影响输入法本身状态(如简繁体、布局或输入方案等)。

建议:小狼豪可以考虑取此设置来决定是否维护内部状态;如果用户设置 Windows 为“在新程序里重置输入法”,代表用户不希望在新程序(窗口?)里保留任何输入法相关状态,小狼豪也应该在唤起时针对新程序(窗口?)重置状态。

另外,既然 Windows 提供此设置,小狼豪也不需要考虑实现自己的“重置”逻辑(既忽略/违背 Windows 设置的逻辑),用户希望输入法根据程序重置的话会去修改系统设置,小狼豪只需要在已知用户设置的情况下尽可能满足用户期待就可以。

@hayden-pan
Copy link

Windows 系统设置可以让两个程序(严格来讲也许是窗口?)共享或不共享输入法,既打开新程序(窗口?)后是否重置输入法为默认值(系统所管理第一个键盘布局),但此设置不会影响输入法本身状态(如简繁体、布局或输入方案等)。

建议:小狼豪可以考虑取此设置来决定是否维护内部状态;如果用户设置 Windows 为“在新程序里重置输入法”,代表用户不希望在新程序(窗口?)里保留任何输入法相关状态,小狼豪也应该在唤起时针对新程序(窗口?)重置状态。

另外,既然 Windows 提供此设置,小狼豪也不需要考虑实现自己的“重置”逻辑(既忽略/违背 Windows 设置的逻辑),用户希望输入法根据程序重置的话会去修改系统设置,小狼豪只需要在已知用户设置的情况下尽可能满足用户期待就可以。

不仅仅是打开新的程序,如果有两个打开了的程序A和B。

  1. 当输入光标放到A上的时候把输入法切换到ascii状态
  2. 然后光标再放到B上,然后把输入法切换到中文输入状态
  3. 然后再把光标放到A程序上,此时输入法的状态是否还是ascii状态?

我在ubuntu18上测试,A程序上的输入状态是无法保持在ascii状态的。而我要实现这个效果,最终的方案是放弃使用 rime 自带的ascii模式,而是在ibus上再添加 English(UK)输入法,然后使用 ibus-setup 命令,设置 “Advanced - Global input method settings - 去掉勾选 Share the same input method among all applications”,使用的时候就在 rime 和 English(UK) 两个输入法之间切换来实现中英切换。这样就实现了在不同的应用上记住了各自的中英输入状态,而Windows应该也是类似的逻辑,只不过不是ibus的功能。而我不确定的是这个效果在 rime里实现是否合理。

@VaslD
Copy link

VaslD commented Sep 23, 2020

@aaftio 你提到的 iBus 设置就是我所提到的 Windows IME 设置。这在 Windows 上是一个系统设置,会针对所有程序、所有输入法生效,而且并不涉及输入法内部状态(例如:全、半角)的逻辑。

其实问题的关键点在于 Rime 是一个输入引擎 (Input Method Manager/Framework),而不是一款严格意义上的“输入法”。Rime 的角色更相似于 Ubuntu 上的 iBus 和 Windows 上的语言栏(这句话并不完全准确,仅用来说明情况。)。输入法 (IME/keyboard) 只提供一种按键信号到文本转换方式,例如明月拼音是一种输入法、注音是另一种、五笔输入又是一种;Rime 本质是一个 meta package 提供多种“输入法”(多种键盘布局、和按键信号到文本转换方式),却只向系统注册为一种输入法

举 Google 的移动端“输入法” Gboard 为例。Gboard 类似 Rime,安装一款 meta package 然后可以使用多种语言和输入方式。Gboard 在向系统集成时是这样做的:

Gboard

它将每个附带的输入法单独注册。尽管 Android 不支持不同 App 保留不同输入法,但如果 Rime 可以做成图中这个效果,所有问题都可以解决。因为这个时候 Rime 的“内部状态”就变成了可以受操作系统和系统设置控制的“输入法状态”。

诚然,这是个很宏大的设想。我对 Rime 本身架构并不精通,只是从使用者角度看问题。

@hayden-pan
Copy link

image

输入法的逻辑层级应该是如上图:

  1. 在操作系统层面,他负责的是记录某一个应用程序当前使用是的 ABC输入法 或者是 搜狗输入法RIME输入法等其中的一种,或者他只记录住一个整个系统使用的输入法。这完全是由操作系统自身的设置支持。
  2. 而在输入法内部,比如RIME他本身又支持多种输入状态,而这个状态的记录逻辑是由输入法自身来完成。而当输入法自身要完成这个记录的任务的时候,可能是可以从操作系统的接口获取相应的参数,比如:当前激活的是哪个应用程序

那么对于1,站在RIME的角度是无需考虑的,问题在于2,当前RIME是否提供了相应的方法来进行设置,设置RIME的内部输入状态是否跟针对应用进行记录?

新手,请指教:)

初始狀態是指打開應用程序(啓動進程)時的狀態。記事本不是多窗口應用,因此圖示有兩個不同的進程,兩者不共享狀態。窗口切換時進程並未結束,因此狀態不變。
這是小狼毫實現的邏輯。反之也有人抱怨,比如二樓以及 rime/ibus-rime#87
問題是無論哪種實現,總能找到反例。

@linchangyi
Copy link

linchangyi commented Feb 4, 2021

Windows 系统设置可以让两个程序(严格来讲也许是窗口?)共享或不共享输入法,既打开新程序(窗口?)后是否重置输入法为默认值(系统所管理第一个键盘布局),但此设置不会影响输入法本身状态(如简繁体、布局或输入方案等)。
建议:小狼豪可以考虑取此设置来决定是否维护内部状态;如果用户设置 Windows 为“在新程序里重置输入法”,代表用户不希望在新程序(窗口?)里保留任何输入法相关状态,小狼豪也应该在唤起时针对新程序(窗口?)重置状态。
另外,既然 Windows 提供此设置,小狼豪也不需要考虑实现自己的“重置”逻辑(既忽略/违背 Windows 设置的逻辑),用户希望输入法根据程序重置的话会去修改系统设置,小狼豪只需要在已知用户设置的情况下尽可能满足用户期待就可以。

不仅仅是打开新的程序,如果有两个打开了的程序A和B。

  1. 当输入光标放到A上的时候把输入法切换到ascii状态
  2. 然后光标再放到B上,然后把输入法切换到中文输入状态
  3. 然后再把光标放到A程序上,此时输入法的状态是否还是ascii状态?

我在ubuntu18上测试,A程序上的输入状态是无法保持在ascii状态的。而我要实现这个效果,最终的方案是放弃使用 rime 自带的ascii模式,而是在ibus上再添加 English(UK)输入法,然后使用 ibus-setup 命令,设置 “Advanced - Global input method settings - 去掉勾选 Share the same input method among all applications”,使用的时候就在 rime 和 English(UK) 两个输入法之间切换来实现中英切换。这样就实现了在不同的应用上记住了各自的中英输入状态,而Windows应该也是类似的逻辑,只不过不是ibus的功能。而我不确定的是这个效果在 rime里实现是否合理。

@aaftio , 请问一下你这样设置之后,从中文切换到英文的时候,是否能够自动上屏已经输入的字符呢。

@linchangyi
Copy link

linchangyi commented Feb 4, 2021

  1. 在操作系统层面,他负责的是记录某一个应用程序当前使用是的 ABC输入法 或者是 搜狗输入法RIME输入法等其中的一种,或者他只记录住一个整个系统使用的输入法。这完全是由操作系统自身的设置支持。
  2. 而在输入法内部,比如RIME他本身又支持多种输入状态,而这个状态的记录逻辑是由输入法自身来完成。而当输入法自身要完成这个记录的任务的时候,可能是可以从操作系统的接口获取相应的参数,比如:当前激活的是哪个应用程序

那么对于1,站在RIME的角度是无需考虑的,问题在于2,当前RIME是否提供了相应的方法来进行设置,设置RIME的内部输入状态是否跟针对应用进行记录?

新手,请指教:)

初始狀態是指打開應用程序(啓動進程)時的狀態。記事本不是多窗口應用,因此圖示有兩個不同的進程,兩者不共享狀態。窗口切換時進程並未結束,因此狀態不變。
這是小狼毫實現的邏輯。反之也有人抱怨,比如二樓以及 rime/ibus-rime#87
問題是無論哪種實現,總能找到反例。

@lotem , 我认为这个想法很好,添加设置让用户选择是否在rime内部记住不同程序的输入状态,这样就兼顾了不同用户的选择。

@hayden-pan
Copy link

Windows 系统设置可以让两个程序(严格来讲也许是窗口?)共享或不共享输入法,既打开新程序(窗口?)后是否重置输入法为默认值(系统所管理第一个键盘布局),但此设置不会影响输入法本身状态(如简繁体、布局或输入方案等)。
建议:小狼豪可以考虑取此设置来决定是否维护内部状态;如果用户设置 Windows 为“在新程序里重置输入法”,代表用户不希望在新程序(窗口?)里保留任何输入法相关状态,小狼豪也应该在唤起时针对新程序(窗口?)重置状态。
另外,既然 Windows 提供此设置,小狼豪也不需要考虑实现自己的“重置”逻辑(既忽略/违背 Windows 设置的逻辑),用户希望输入法根据程序重置的话会去修改系统设置,小狼豪只需要在已知用户设置的情况下尽可能满足用户期待就可以。

不仅仅是打开新的程序,如果有两个打开了的程序A和B。

  1. 当输入光标放到A上的时候把输入法切换到ascii状态
  2. 然后光标再放到B上,然后把输入法切换到中文输入状态
  3. 然后再把光标放到A程序上,此时输入法的状态是否还是ascii状态?

我在ubuntu18上测试,A程序上的输入状态是无法保持在ascii状态的。而我要实现这个效果,最终的方案是放弃使用 rime 自带的ascii模式,而是在ibus上再添加 English(UK)输入法,然后使用 ibus-setup 命令,设置 “Advanced - Global input method settings - 去掉勾选 Share the same input method among all applications”,使用的时候就在 rime 和 English(UK) 两个输入法之间切换来实现中英切换。这样就实现了在不同的应用上记住了各自的中英输入状态,而Windows应该也是类似的逻辑,只不过不是ibus的功能。而我不确定的是这个效果在 rime里实现是否合理。

@aaftio , 请问一下你这样设置之后,从中文切换到英文的时候,是否能够自动上屏已经输入的字符呢。

不行,而且这应该也是做不到的,因为当你在RIME上输入了两个字符,这个字符是传到了RIME里,此时切换到English(UK)输入法时是一个完全独立的输入法,这时候你在RIME输入的那两个字符是无法传递过来的

@talenhao
Copy link

linux下好想要这个功能,哈

@fxliang
Copy link
Contributor

fxliang commented Apr 15, 2024

ascii_mode 已有选项实现,其他暂无计划

@fxliang fxliang closed this as completed Apr 15, 2024
@sceraser
Copy link

ascii_mode 已有选项实现,其他暂无计划

请问有没有实现的文档?

@fxliang
Copy link
Contributor

fxliang commented Sep 18, 2024

global_ascii: true in weasel.yaml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

10 participants