rime / rime-double-pinyin

雙拼輸入方案
GNU General Public License v3.0
389 stars 96 forks source link

问题:使用双拼时如何同时显示按下的键以及双拼对应的拼音? #6

Closed ghost closed 3 years ago

ghost commented 3 years ago

我用的是小鹤双拼,在打字的时候,上面会显示拼音,下面显示选项。

例如当我敲出pbyb(”拼音“的双拼)时,上面会显示pin yin,也就是双拼pbyb对应的拼音。

Screenshot from 2021-01-04 10-49-40

有没有办法让rime同时显示pbybpin yin?因为如果不显示pbyb的话一眼看不出按下了哪些键。

lotem commented 3 years ago

有。

lotem commented 3 years ago

不顯示拼音比較簡單,就刪除這裏列出的轉寫規則: https://github.com/rime/rime-double-pinyin/blob/69bf85d4dfe8bac139c36abbd68d530b8b6622ea/double_pinyin_flypy.schema.yaml#L90

改成同時顯示按鍵和拼音需要一些技巧。類似做法有: https://github.com/rime/rime-cangjie/blob/d0f6f521ec049166ada29085434126be175f6439/cangjie5.schema.yaml#L68 簡單地說就是在拼寫運算規則裏先複寫輸入碼,然後轉換其中一份,另一份保持原樣。

ghost commented 3 years ago

@lotem 感谢🙏🏻,使用下面的配置,现在能同时显示拼音和按键了:

  translator:
    dictionary: luna_pinyin
    preedit_format:
      - 'xform/^([a-z ]*)$/$1\t (\U$1\E)/'  # 显示大写按键,不能使用\L替换\U,否则会被下面的正则给改掉
      - "xform/([bpmfdtnljqx])n/$1iao/"
      - "xform/(\\w)g/$1eng/"
      - "xform/(\\w)q/$1iu/"
      - "xform/(\\w)w/$1ei/"
      - "xform/([dtnlgkhjqxyvuirzcs])r/$1uan/"
      - "xform/(\\w)t/$1ve/"
      - "xform/(\\w)y/$1un/"
      - "xform/([dtnlgkhvuirzcs])o/$1uo/"
      - "xform/(\\w)p/$1ie/"
      - "xform/([jqx])s/$1iong/"
      - "xform/(\\w)s/$1ong/"
      - "xform/(\\w)d/$1ai/"
      - "xform/(\\w)f/$1en/"
      - "xform/(\\w)h/$1ang/"
      - "xform/(\\w)j/$1an/"
      - "xform/([gkhvuirzcs])k/$1uai/"
      - "xform/(\\w)k/$1ing/"
      - "xform/([jqxnl])l/$1iang/"
      - "xform/(\\w)l/$1uang/"
      - "xform/(\\w)z/$1ou/"
      - "xform/([gkhvuirzcs])x/$1ua/"
      - "xform/(\\w)x/$1ia/"
      - "xform/(\\w)c/$1ao/"
      - "xform/([dtgkhvuirzcs])v/$1ui/"
      - "xform/(\\w)b/$1in/"
      - "xform/(\\w)m/$1ian/"
      - "xform/([aoe])\\1(\\w)/$1$2/"
      - "xform/(^|[ '])v/$1zh/"
      - "xform/(^|[ '])i/$1ch/"
      - "xform/(^|[ '])u/$1sh/"
      - "xform/([jqxy])v/$1u/"
      - "xform/([nl])v/$1ü/"
      - 'xform/(\([A-Z ]*\))$/\L$1\E/'  # 把大写转换成小写
    prism: double_pinyin_flypy

如果需要显示大写的按键,把prism: double_pinyin_flypy 的上一行删掉即可。

ghost commented 3 years ago

发现一个小问题,上面的配置文件在输入是合法的双拼的时候能正常工作,但是当输入不是合法的双拼时就不显示按键了。

例如依次按下host四个键,ho是合法的双拼,对应拼音huo,而st不是合法的双拼,此时整体就 只会显示 huost。好像在输入不是合法双拼的时候,preedit_format下面的规则就没有全部执行?

lotem commented 3 years ago

會全部執行。注意這些規則不是對全部輸入碼的轉換,是對當前中文候選所對應的輸入碼區間的變換。非中文輸入的部分原樣顯示。 輸出格式中的\t表示插入點/光標位置,允許在光標之後添加提示。僅當插入點位於整個輸入串末尾時纔會顯示光標之後的部分。

從直觀角度,最好把格式改成輸入碼在前,拼音標註在光標位置(\t)後面。

ghost commented 3 years ago

明白了,修改配置如下,实现双拼在前,拼音在后,使用|分隔。

  translator:
    dictionary: luna_pinyin
    preedit_format:
      - 'xform/^(.*)$/\U$1\E\t | $1/'
      - "xform/([bpmfdtnljqx])n/$1iao/"
      - "xform/(\\w)g/$1eng/"
      - "xform/(\\w)q/$1iu/"
      - "xform/(\\w)w/$1ei/"
      - "xform/([dtnlgkhjqxyvuirzcs])r/$1uan/"
      - "xform/(\\w)t/$1ve/"
      - "xform/(\\w)y/$1un/"
      - "xform/([dtnlgkhvuirzcs])o/$1uo/"
      - "xform/(\\w)p/$1ie/"
      - "xform/([jqx])s/$1iong/"
      - "xform/(\\w)s/$1ong/"
      - "xform/(\\w)d/$1ai/"
      - "xform/(\\w)f/$1en/"
      - "xform/(\\w)h/$1ang/"
      - "xform/(\\w)j/$1an/"
      - "xform/([gkhvuirzcs])k/$1uai/"
      - "xform/(\\w)k/$1ing/"
      - "xform/([jqxnl])l/$1iang/"
      - "xform/(\\w)l/$1uang/"
      - "xform/(\\w)z/$1ou/"
      - "xform/([gkhvuirzcs])x/$1ua/"
      - "xform/(\\w)x/$1ia/"
      - "xform/(\\w)c/$1ao/"
      - "xform/([dtgkhvuirzcs])v/$1ui/"
      - "xform/(\\w)b/$1in/"
      - "xform/(\\w)m/$1ian/"
      - "xform/([aoe])\\1(\\w)/$1$2/"
      - "xform/(^|[ '])v/$1zh/"
      - "xform/(^|[ '])i/$1ch/"
      - "xform/(^|[ '])u/$1sh/"
      - "xform/([jqxy])v/$1u/"
      - "xform/([nl])v/$1ü/"
      - 'xform/([^|]*)/\L$1\E/'
    prism: double_pinyin_flypy
lotem commented 3 years ago

明白了,修改配置如下,实现双拼在前,拼音在后,使用|分隔。

如果這樣改,我反而覺得雙拼輸入碼在後面比較好,和不構成拼音的輸入碼連在一起。 看錯了,代碼裏仍然用了 \t 分隔兩部分。可以。

rockbenben commented 2 years ago

被困扰很久,终于解决了。

能不能集成在默认配置里,非常有用。

yunsii commented 1 month ago

按键显示大写还是有点奇怪,如果直接回车输入的还是小写,有什么办法让显示的按键显示小写吗?👀