Skip to content

如何在将回车作为按键输入时,仍能直接输出回车? #2155

@adong660

Description

@adong660

我在修改宫保拼音方案,具体修改目标有两点:

  • 用回车充当宫保拼音方案中的 A;空格不用于输入,仅像一般输入法一样用来选词
  • 当仅键入回车(仅有 A)时,输出回车;该回车可以直接输出到输入法外,或像一般输入法一样用来键入原始按键序列等

宫保拼音对空格的原始实现,是在 chord_composer 中将单个 A 输入置换为空格,相当直接:

default_layout_config:
  alphabet: 'swxdecfrvgtbjum kiloaqzhynp'
  algebra:
    - 'xlit|swxdecfrvgtbjum kiloaqzhynp|SCZHLFGDBKTPIUVANREOXXXXXXX|'
    - 'xform/^A$/ /'
    - 'xform/X+//'

我在文档中暂时没有找到关于利用回车进行输入的说明。在经过一番尝试后,我作了如下修改:

default_layout_config:
  alphabet: 'swxdecfrvgtbjum{Return}kiloaqzhynp'
  algebra:
    - 'xform/\{Return\}/A/'
    - 'xlit|swxdecfrvgtbjumkiloaqzhynp|SCZHLFGDBKTPIUVNREOXXXXXXX|'
    - 'xform/X+//'
    - 'xform/^A$/X/'  # 将单个A输入再次置换为X,则:如果经过后续处理后有X,说明输入是单个A(单个回车)
validate_syllable:
  ...
  - "erase/^([A-WYZa-z+]+)$/"  # 删除不合法音节,但保留X

经过这一修改,我已经实现令回车参与并击输入,例如“回车+k”会被解释为宫保拼音的“A+N”,从而得到拼音“an”。同时,如果在并击时只键入回车,输入法会将其解释为单个大写字母X,并与候选项(如有)一起上屏。

接着,我又作了下面的修改:

key_binder:
  import_preset: default
  bindings:
    - { when: always, accept: X, send: Return }

此时,按照 use_return_to_commit_raw_input 的设置,如果先输入一些音节,再单独键入回车,之前的原始输入序列会被上屏(但如果之前的输入序列中的首个按键是回车,上屏的会是带'分隔符的拼音序列,我不太理解为什么会这样)。但是,如果直接键入回车,将不会上屏任何字符。我感觉我对 key_binder 的理解似乎有误,key_binder 是不能用来输出回车、tab等特殊按键的?

有什么办法在将回车作为按键输入的情况下,仍然像一般输入法一样,能够直接输出回车吗?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions