使用雾凇拼音的小鹤双拼方案时,希望输入双拼编码后按回车,提交的是对应的完整拼音,而不是原始按键;输入过程中的拼音显示在应用输入框中,选词后再由汉字替换。同时精简中英文切换提示,让小狼毫的界面更安静。
例如输入“上屏”的小鹤双拼编码 uhpk:
| 操作 | 默认结果 | 期望结果 |
|---|---|---|
输入 uhpk 后按回车 | uhpk | shangping |
配置环境
- Windows 11
- 小狼毫 Weasel 0.17.4
- Rime 1.13.1
- 雾凇拼音的小鹤双拼方案
- 方案 ID:
rime_frost_double_pinyin_flypy
Rime 用户目录在本机是 D:\Software\Rime\UserConf。其他安装方式通常使用 %AppData%\Rime,下文中的配置文件都位于实际的 Rime 用户目录中。
实现原理
Rime 的编辑器对回车组合键有不同处理:
Return提交原始输入编码,所以小鹤双拼会得到uhpk。Shift+Return提交经过translator/preedit_format转换的预编辑文本。
雾凇拼音的小鹤双拼方案已经在 translator/preedit_format 中定义了完整的双拼展开规则。例如,规则会把 uh 转换成 shang,把 pk 转换成 ping。因此不需要在 Lua 中重新维护一套小鹤双拼映射,只需要在组字状态下把回车转发为 Shift+Return。
实际配置中还存在一个需要注意的地方:小狼毫的 weasel.yaml 可以在输入方案之前处理回车。如果这里只修改小鹤双拼方案,回车可能已经被前端转换成其他动作,方案内的绑定就收不到原始 Return。因此前端配置和方案配置都需要处理。
小狼毫还支持嵌入式预编辑。启用 style/inline_preedit 后,正在输入的拼音会显示在应用输入框的光标位置,而不是候选面板内;style/preedit_type: composition 表示显示当前拼音组合,选词上屏后由候选文字替换。少数不支持 TSF 嵌入式预编辑的旧应用可能仍会回退到候选面板显示。
中英文切换时显示的状态图标使用 Windows 系统图标尺寸 SM_CXICON,小狼毫 0.17.4 没有单独缩放参数。show_notifications 既可以设置布尔值,也可以设置要显示的通知列表。只保留 schema 后,切换输入方案时仍有提示,但切换 ascii_mode 时不再弹出过大的中英文图标。
修改小狼毫前端配置
编辑 weasel.custom.yaml,在已有的 patch 节点中加入回车绑定。当前配置还包含候选窗的配色、字体和布局设置,合并后的完整 patch 如下:
patch:
"show_notifications": [schema]
"key_binder/bindings":
- { when: composing, accept: Return, send: "Shift+Return" }
- { when: composing, accept: KP_Enter, send: "Shift+Return" }
"style/color_scheme": so_young
"style/font_face": "霞鹜文楷"
"style/font_point": 14
"style/horizontal": true
"style/inline_preedit": true
"style/label_font_face": "霞鹜文楷"
"style/label_font_point": 14
"style/layout/border_height": 0
"style/layout/border_width": 0
"style/layout/candidate_spacing": 10
"style/layout/corner_radius": 8
"style/layout/hilite_padding": 8
"style/layout/hilite_spacing": 3
"style/layout/margin_x": 8
"style/layout/margin_y": 8
"style/layout/spacing": 10
"style/preedit_type": composition这里使用 when: composing,所以只有正在输入拼音时才转换按键。没有输入内容时,主回车和小键盘回车仍保持正常行为。
样式配置的作用如下:
| 配置项 | 当前值 | 作用 |
|---|---|---|
show_notifications | [schema] | 仅保留输入方案切换提示 |
style/color_scheme | so_young | 使用内置的“致青春”配色方案 |
style/font_face | 霞鹜文楷 | 设置候选文字字体 |
style/label_font_face | 霞鹜文楷 | 设置候选序号字体 |
style/font_point | 14 | 设置候选文字字号 |
style/label_font_point | 14 | 设置候选序号字号 |
style/horizontal | true | 使用横向候选列表 |
style/inline_preedit | true | 在应用输入框中显示正在输入的拼音 |
style/preedit_type | composition | 内嵌显示当前拼音组合 |
style/layout/border_height | 0 | 取消上下边框留白 |
style/layout/border_width | 0 | 取消左右边框留白 |
style/layout/candidate_spacing | 10 | 设置候选项之间的间距 |
style/layout/corner_radius | 8 | 设置候选窗圆角 |
style/layout/hilite_padding | 8 | 设置高亮候选项的内边距 |
style/layout/hilite_spacing | 3 | 设置高亮区域之间的间距 |
style/layout/margin_x | 8 | 设置候选窗横向内边距 |
style/layout/margin_y | 8 | 设置候选窗纵向内边距 |
style/layout/spacing | 10 | 设置预编辑区与候选区的间距 |
如果文件中已经有 patch:,不要再创建第二个同名节点,应当把回车绑定和样式配置合并到同一个节点下。
当前本机配置将 style/label_font_point 写成了 style/label_font_poin,末尾少了字母 t。这个错误键名不会覆盖候选序号字号;当前生成配置仍继承默认值 14,所以视觉上暂时没有差异。文中的配置使用正确写法。
修改小鹤双拼方案配置
创建或编辑 rime_frost_double_pinyin_flypy.custom.yaml:
patch:
"key_binder/bindings/+":
- { when: composing, accept: Return, send: "Shift+Return" }
- { when: composing, accept: KP_Enter, send: "Shift+Return" }
"translator/preedit_format/+":
- "xform/[ ']+//"这部分包含两项处理:
key_binder/bindings/+为小鹤双拼方案追加回车绑定,也作为前端绑定失效时的兜底。xform/[ ']+//在所有双拼展开规则执行完之后,移除音节之间的空格和单引号分隔符。
如果没有最后一条格式化规则,uhpk 按回车可能得到 shang ping;加入后才会得到连续的 shangping。
使用 .custom.yaml 补丁文件,而不是直接修改 rime_frost_double_pinyin_flypy.schema.yaml,可以避免更新雾凇拼音时覆盖自定义内容。
重新部署
修改完成后,需要重新部署小狼毫。可以从开始菜单选择“小狼毫输入法”中的“重新部署”,也可以在 PowerShell 中执行:
& "D:\Software\Rime\weasel-0.17.4\WeaselDeployer.exe" /deploy安装目录或版本不同,需要相应修改命令中的路径。
部署后可以检查生成配置:
build/weasel.yaml中应当包含Return到Shift+Return的绑定。build/weasel.yaml中的inline_preedit应当为true,preedit_type应当为composition。build/weasel.yaml中的show_notifications应当只包含schema。build/rime_frost_double_pinyin_flypy.schema.yaml的translator/preedit_format末尾应当包含xform/[ ']+//。
验证结果
重新部署后,在小鹤双拼方案中测试:
| 输入 | 操作 | 输出 |
|---|---|---|
uhpk | 主回车 | shangping |
uhpk | 小键盘回车 | shangping |
| 无输入 | 回车 | 正常换行 |
输入 uhpk 但尚未选词时,完整拼音应当显示在应用输入框的光标位置,候选面板只显示候选文字;选词后,汉字会替换输入框中的拼音。
切换中英文时,光标旁不再弹出状态图标;切换输入方案时,方案名称提示仍然保留。
注意事项
weasel.custom.yaml 可能由小狼毫的界面设置工具重新生成。之后如果修改候选框样式,应当确认其中的 key_binder/bindings 仍然存在,并重新部署。
当前 Rime 配置仓库通过 .gitignore 中的 *.custom.yaml 忽略本地补丁,因此以上两个自定义配置文件不会被 Git 跟踪。本次修改也不需要执行 git add 或 git commit。