iDvel / rime-ice

Rime 配置:雾凇拼音 | 长期维护的简体词库
https://dvel.me/posts/rime-ice/
GNU General Public License v3.0
9.68k stars 650 forks source link

能否单独设置中英文切换按键,以及在中文状态下先了英文单词后能否在前后面加个空格? #1006

Closed chenguangxing888 closed 2 months ago

chenguangxing888 commented 2 months ago

正常切换中英文相当于开关,按一下是中文再按一下是英文。按一下能否切换到自己想要的状态很随机。能否提供一个单独的设置按键,例如左shift就是切换到英文,无论现在是中文还是英文,按了左shift后肯定是英文;同理,按了右shift肯定是中文。这样打字时就能完全控制中英文状态。

另外,在中文状态下,候选词里面也会有单词的提示,如果从候选词中选了单词能否在单词的前后加个空格?这样在切换到英文时可以少打两个空格。

shackleyu commented 2 months ago

同一个shift不是更方便吗? 我都是左shift 切换中英文

mirtlebot commented 2 months ago

前面的不知道,ascii_mode 应该只有 switch key 没有 on 和 off 的 key binding。walkaroud 可能是搞两个方案,或者单独添加一个键盘,用系统快捷键去切换键盘。

英文单词加空格:研究下仓库自带的 en_spacer,改一下可以就实现了,下面的示例所有空格都是自动添加的:

1724899404

fxliang commented 2 months ago

walkaroud 可以是,key_binder放到ascii_composer之前,然后加两个key binding,不够理想的事情是,如果是composing状态的时候set_option: ascii_mode 会让正在输入的码还停留在那里,要自己回车一下上屏或者esc取消

patch:
  'engine/processors/@before 0': key_binder
  key_binder/bindings/+:
    - { accept: Shift+Shift_R, set_option: ascii_mode, when: always}
    - { accept: Shift+Shift_L, unset_option: ascii_mode, when: always}

更新: 如果想再细致一点避免上面提及的问题,可以写个lua插件的processor来处理commit code或者 clear code之类的

一个简易的demo https://github.com/fxliang/weasel_config/blob/main/lua/shift_ascii_enhanced.lua

mirtlecn commented 2 months ago

https://github.com/mirtlecn/rime/blob/master/lua/en_spacer.lua

这个是自动添加空格的示例。使用参见库中的 cn.schema.yaml

受限于 rime 的 session 间不好互相通信,以及一些应用自行用输入来判断控件的做法,会有一些小问题。