方案与引擎配置
schema 域全部配置项——方案选择、码表与拼音引擎、混输、调频、自动造词
[schema] 域管理方案选择与全局引擎基线。这里配置的码表、拼音、混输等参数是所有同类方案共用的公共基线;单个方案若需与基线不同,通过 schema_overrides/<方案ID>.toml 逐字段覆盖(仅 schema.codetable 支持方案级 override,schema.pinyin / schema.mix 全局唯一)。方案本身的定义与覆盖机制见自定义方案。
默认值来源
本页默认值以系统预置 data/config.toml 的 [schema] 段为准。未写进预置文件的隐藏 / 内部字段,默认值取自程序内置代码默认。
方案选择
[schema]
active = "wubi86" # 当前激活方案
available = ["wubi86", "wubi86_pinyin"] # 可循环切换的方案列表(顺序即切换顺序)
primary_codetable = "" # 主码表方案 ID(拼音反查码源),留空按 available 顺序取第一个码表方案
primary_pinyin = "" # 主拼音方案 ID(临时拼音目标方案),留空 = 全拼 "pinyin"| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
active | 字符串 | — | "wubi86" | 当前激活的方案 ID |
available | 字符串数组 | — | ["wubi86", "wubi86_pinyin"] | 可循环切换的方案列表,顺序即切换顺序 |
primary_codetable | 字符串 | — | "" | 主码表方案 ID,作拼音反查的码源。留空时按 available 顺序取第一个码表方案 |
primary_pinyin | 字符串 | — | "" | 主拼音方案 ID,作临时拼音的目标方案。留空 = 全拼("pinyin") |
码表引擎(schema.codetable)
所有码表方案的公共基线。方案可经 schema_overrides/<方案ID>.toml 的 [codetable] 段(带 enabled 总开关)逐字段覆盖。
[schema.codetable]
top_code_commit = true # 顶码上屏(超满码长取前 N 码首选上屏)
clear_on_empty_max = false # 满码无候选时清空缓冲
auto_commit_at_full = false # 满码唯一精确时自动上屏
punct_commit = true # 标点触发上屏
show_code_hint = true # 显示编码提示
single_code_input = false # 精确匹配模式(关闭前缀匹配)
single_code_complete = true # 精确匹配空码补全(无候选时从更长编码取首选)
z_key_repeat = true # z 键重复输入
input_chars = "" # 码元字符集:哪些字符可进输入缓冲;空 = a-z
leading_chars = "" # 可作第一码的字符(码元字符集的子集);空 = 与 input_chars 相同
# auto_commit_min_len = 0 # 隐藏项,见下方 Callout| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
top_code_commit | 布尔 | — | true | 顶码上屏:超满码长时取前 N 码首选上屏 |
clear_on_empty_max | 布尔 | — | false | 满码无候选时清空缓冲 |
auto_commit_at_full | 布尔 | — | false | 满码唯一精确时自动上屏 |
auto_commit_min_len | 整数 | — | 0 | 自动上屏最短码长;0 = 等于全码长。隐藏项 |
punct_commit | 布尔 | — | true | 标点触发上屏 |
show_code_hint | 布尔 | — | true | 显示编码提示 |
single_code_input | 布尔 | — | false | 精确匹配模式,关闭前缀匹配 |
single_code_complete | 布尔 | — | true | 精确匹配空码补全:无候选时从更长编码取首选 |
z_key_repeat | 布尔 | — | false(预置为 true) | z 键重复输入 |
input_chars | 字符串 | 范围+字面 | "" | 码元字符集:哪些字符可进输入缓冲。空 = 内置默认 a-z |
leading_chars | 字符串 | 范围+字面 | "" | 可作第一码的字符,须是 input_chars 的子集。空 = 与 input_chars 相同 |
隐藏项:auto_commit_min_len
schema.codetable.auto_commit_min_len 不在设置工具中开放,仅可通过 config.toml 手改。0 表示等于全码长(默认行为)。
码元字符集(input_chars / leading_chars)
默认情况下只有 26 个字母算「输入码」,按下别的键就走标点、选词或直接上屏。码表方案若需要
别的字符参与编码——比如词库里有 Win10 这类词条、或有含 / 的编码——用这两项声明。
写法是范围 + 字面的组合,大小写不敏感:
| 写法 | 含义 |
|---|---|
a-x | 只有 a 到 x 是码元(五笔严格集,y/z 不进缓冲) |
a-x/ | 上述再加一个 / |
a-z0-9 | 字母加数字 |
-a-z / a-z- | - 写在首位或末位时作字面字符 |
leading_chars 单独声明哪些字符能起头。典型用法是让数字能作码元但不能作第一码:
[engine.codetable]
input_chars = "a-z0-9"
leading_chars = "a-z"这样打 win10 时 1、0 会正常进入编码,但空编码时按数字键仍是选词或输出数字本身——
两种用法都保住了。
这些字符会从原有功能手里抢走按键
编码输入期间,码元字符优先于选词键、翻页键、以词定字键和数字选词。例如把 ; 配成码元后,
编码输入时按 ; 是打码而不是选第二个候选。
若某字符还写进了 leading_chars,它连空编码时也归码表,那些以它作引导键的功能
(快捷输入、临时拼音/英文、特殊模式)就再也进不去了。想两者共存,把该字符排除出
leading_chars 即可——它便只在编码输入途中作码元。
存在冲突时启动日志会逐条告警并提示改法。字符集写错(如 z-a 这种逆序)不会让输入法失灵,
会回落到默认 a-z 并记录告警。
码表调频(schema.codetable.frequency)
[schema.codetable.frequency]
enabled = false # 码表调频总开关
strategy = "top" # top = 一次到顶 MRU / step = 逐次提升 / position = 位次渐进
promote_prefix = "all" # 补全词参与调频:none / single / all(仅 position 下生效)
protect_top_n = 0 # 全码位(码长 ≥ 4)锁定原始前 N 位
protect_top_n_len1 = 1 # 一简位(码长 1)
protect_top_n_len2 = 1 # 二简位(码长 2)
protect_top_n_len3 = 0 # 三简位(码长 3)
half_life = 0.0 # 热度衰减半衰期(小时),0 = 内置 72 小时;仅 position 下生效| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enabled | 布尔 | — | false | 码表调频总开关(取代旧 user_frequency) |
strategy | 枚举 | top / step / position | "top" | 词频应用策略:top = 一次到顶 MRU;step = 逐次提升;position = 位次渐进 0.114 新增 |
promote_prefix | 枚举 | none / single / all | "all" | 前缀补全候选参与位置提升的范围 0.114 新增。仅 strategy = "position" 时生效 |
protect_top_n | 整数 | — | 0 | 码长 ≥ 4 的全码位锁定原始前 N 位不被调频挤动(0 = 不保护) |
protect_top_n_len1 | 整数 | — | 1 | 码长 1 的一简位 |
protect_top_n_len2 | 整数 | — | 1 | 码长 2 的二简位 |
protect_top_n_len3 | 整数 | — | 0 | 码长 3 的三简位 |
half_life | 小数 | — | 0.0 | 调频热度的衰减半衰期(小时)0.114 新增;0 = 内置 72 小时。仅 position 策略生效 |
位次渐进策略 0.114 新增
top / step 的本质都是布尔的「用过优先」:用过一次即整体跳到未用过的那批之前,策略只决定已用过的内部怎么排。position 换成连续的位次表达:
目标位次 = 原始位次 / 2^有效使用次数每用一次前移一半,第 8 位 → 4 → 2 → 1 → 0;久未使用按半衰期回落,累计有效使用不足半次则不提升。提升速度与候选权重无关——位次天生归一化,不管两个候选差 486 倍还是 2 倍,第 2 位的都是用一次到首位。
提升只在来源档内发生:前缀补全(深档)再怎么提升也跨不到精确全码(浅档)之前,「五笔优先」不受影响。
英文引擎走的正是码表这条重排路径,而英文几乎所有候选都是前缀匹配,布尔闸门下选过一次就顶到最前过于粗暴——英文方案建议选 position。
promote_prefix 的三档语义与拼音侧一致,判据同为语义单元数(汉字逐字计、连续西文段整体计 1),详见拼音调频 · 补全词参与调频。码表默认 all 而拼音默认 single,因为码表的前缀补全已由来源档位隔离,无需再按语义单元收窄,也与 top / step 的历史行为一致,升级后调频范围不会突然变窄。
热度衰减半衰期 0.114 新增
设置工具位置:方案 → 上屏行为 → 词频调整 → 热度衰减半衰期。只在 strategy = "position" 下生效(top / step 直接比使用次数与最近时间,不做衰减),设置页也据此置灰。
它是「热度衰减到一半所需的小时数」:某个词最后一次使用过去越久,它累积的使用次数就越不算数。默认 0 表示用内置的 72 小时(3 天)。
与 schema.pinyin.frequency.half_life 完全独立,不存在互相跟随的关系 —— 两者的合理值本就不同,码表用户的用词集中度通常高于拼音,旧记录该留得久一些。
每方案单独设调频 0.114 新增
本节的值是全局基线。任一码表方案都可以在自己的方案文件里覆盖它:
# <方案id>.schema.toml
[engine.codetable.frequency]
enabled = true
strategy = "position"该段逐字段稀疏——写出来的覆盖基线,没写的跟随,字段名与取值和本节完全一致。
同一台机器上不同码表的调频诉求本就不同:五笔要简码位保护,生僻字表要学习,快符这类小符号表要的是稳定顺序。基线取自哪里则按方案性质分——普通方案取本节的全局值,特殊方案(hidden = true)取内置默认,不继承全局。
英文 [schema.english] 0.114 新增
英文是可切换方案,有自己的配置段,不再共用码表那套——此前英文的调频策略挂在 schema.codetable.frequency 下,改它会连带改掉五笔的。设置工具位置:方案 → 全局方案配置 → 英文方案配置。
[schema.english]
commit_space = false # 上屏一个英文词后再补一个空格
[schema.english.frequency]
enabled = false # 英文调频总开关
strategy = "position" # position(默认)/ top / step
promote_prefix = "all" # 补全词参与调频:none / single / all(仅 position 下生效)
half_life = 0.0 # 热度衰减半衰期(小时),0 = 内置 72 小时;仅 position 下生效
code_scope = "candidate" # 调频记账方式:candidate(按整词)/ input(按编码)| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
commit_space | 布尔 | — | false | 上屏一个英文词后自动补一个空格,连续打词不必手动按。生效范围见下 |
frequency.enabled | 布尔 | — | false | 英文调频总开关 |
frequency.strategy | 枚举 | position / top / step | "position" | 词频应用策略 |
frequency.promote_prefix | 枚举 | none / single / all | "all" | 前缀补全候选参与位置提升的范围。仅 position 时生效 |
frequency.half_life | 小数 | — | 0.0 | 衰减半衰期(小时),0 = 内置 72 小时。仅 position 时生效 |
frequency.code_scope | 枚举 | candidate / input | "candidate" | 词频记账码口径 |
默认策略与码表不同(position vs top):英文候选几乎全是前缀匹配,top / step 那种「用过一次即整体跳到没用过的那批之前」在这里过于激进——误选一次就把词顶到很显眼的位置,且码表侧的「用过」不衰减。position 每次只前移一半、久不用会回落。同理 promote_prefix 默认 all:英文候选本来就几乎全是前缀补全,收窄到 single 等于把调频关掉大半。
没有 protect_top_n*:那组是「简码位首选保护」,判据是本次输入的码长——英文没有简码位这回事,一个 a 后面跟的是几万个词而不是钦定首选。
code_scope 的两种口径
candidate/ 按整词(默认)—— 打hel选hello记成(hello, hello),之后打he也受益(跨码位共享)input/ 按编码 —— 记成(hel, hello),各前缀独立学习(与码表同侧)
两个字段的生效范围不同
code_scope 按候选来源生效——混输方案里混进来的英文候选同样按它记账。commit_space 则按当前方案:只在英文方案下补空格,中文输入中途插个英文词不会平白多出空格。
commit_space 的补空格范围:
- 所有选中方式都补 —— 空格、数字键、次/三选键、鼠标点选,用哪个键选中都一样;
- 空格上屏原码也补 —— 打了词库里没有的词(自造词、缩写),按空格上屏原文同样补,与选中候选保持一致;
- 回车上屏原码不补 —— 回车是终结性动作,多伴随换行或提交意图,与「接着打下一个词」的语义相反;
- 标点键顶屏不补 —— 打
hello直接按,得到的是hello,,不会被空格断开。
码表与拼音的记账口径不受 code_scope 影响:码表恒用输入码,拼音恒用候选码。
首选保护按码长分级 0.113 新增
四个 protect_top_n* 都只对纯码表方案(及混输的码表侧)生效,按本次输入的码长决定用哪一档。
0.112 及以前只有一个标量 protect_top_n,对所有码长一视同仁,无论取什么值都有一头顾不上:
- 取
1(旧出厂值):一简二简保住了,但全码位的首选也被永久锁死,调频只对第 2 位以后有效 - 取
0:全码位调频正常,但一简二简当场失守
失守的根源是词库与调频用了两条不同的轴。词库靠权重表达简码的钦定地位(生成时给一简 9999、二简 9950、三简 9000),而调频重排的比较链不看权重,只看「有没有被选过」。五笔一简的 25 个编码每个都是二选一(如 a → 工 9999 / 戈 9998),次选字被误选一次就永久翻转,且码表侧的「用过」不衰减。
分级后出厂即为:一简、二简保住词库首选,三简与全码位放开——全码位才是调频该起作用的地方。
老配置不会自动迁移
本次不做配置迁移。已经手动开过码表调频的用户,其用户配置里冻结着旧的 protect_top_n = 1(配置写回不剔除等于默认的键),全码位仍然锁死,需自行在设置页把「全码位保护前 N 项」改成 0。三个新增的分级键在老配置里缺省,会自动取新默认值,故简码保护对老用户自动生效。
码表调频出厂 enabled = false,没开过的用户不受影响。
保护名额只在精确候选里取
保护名额从精确匹配(编码与输入完全相同)的候选里取,不足则少保护,该码位没有精确候选就不保护。这样名额多于精确候选时,不会把前缀补全出来的长词一并钉死在前面。
码表自动造词(schema.codetable.auto_phrase)
连续单字上屏累积成序列,遇终止符(标点 / 回车 / 空格 / 焦点切换 / 光标移动 / 多字词上屏)或超时后,为整个序列算词组编码并写入临时词库(立即可作候选);累计使用达 promote_count 次才晋升进用户词库。
[schema.codetable.auto_phrase]
enabled = false # 自动造词总开关
# 以下均为隐藏 / 内部字段,见下方 Callout:
# min_phrase_len = 2 # 造词最小字数
# max_phrase_len = 5 # 造词最大字数(超长整体放弃,不截末尾 N 字)
# promote_count = 0 # 晋升进用户词库所需使用次数,0 = 不晋升(一直留临时词库)
# idle_timeout_ms = 0 # 连续单字最大间隔(毫秒),0 = 默认 5000
# temp_max_entries = 5000 # 临时词库条目上限,0 = 不限| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enabled | 布尔 | — | false | 码表自动造词总开关 |
min_phrase_len | 整数 | — | 2 | 造词最小字数。隐藏项 |
max_phrase_len | 整数 | — | 5 | 造词最大字数;超长序列整体放弃,不截取末尾 N 字(避免切出杂词)。隐藏项 |
promote_count | 整数 | — | 0 | 临时词晋升进用户词库所需使用次数;0 = 不晋升,一直留在临时词库。隐藏项 |
idle_timeout_ms | 整数 | — | 0 | 连续单字之间的最大间隔(毫秒),超过则视作终止;0 = 默认 5000。隐藏项 |
temp_max_entries | 整数 | — | 5000 | 临时词库条目上限,超出淘汰权重最低者;0 = 不限。隐藏项 |
隐藏项:自动造词内部参数
除 enabled 外,min_phrase_len / max_phrase_len / promote_count / idle_timeout_ms / temp_max_entries 均为内部字段,不在设置工具中开放,仅可通过 config.toml 手改。默认组合已针对五笔场景调优,一般无需改动。
拼音引擎(schema.pinyin)
所有拼音类方案(全拼 / 双拼 / 混输拼音子方案 / 临时拼音反查)共用,无方案级 override。
[schema.pinyin]
show_code_hint = true # 显示编码提示
use_smart_compose = true # 智能组词
separator = "auto" # 分隔策略:auto / quote / backtick / none| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
show_code_hint | 布尔 | — | true | 显示编码提示 |
use_smart_compose | 布尔 | — | true | 智能组词 |
separator | 字符串(隐性枚举) | auto / quote / backtick / none | "auto" | 拼音分隔策略。auto = ' 未被占作选择键时用 '、否则用反引号;quote = 强制 ';backtick = 强制反引号;none = 禁用分隔符。双拼方案下不生效 |
模糊音(schema.pinyin.fuzzy)
各模糊音配对开关默认全关,需先开 enabled 总开关再逐项启用。
[schema.pinyin.fuzzy]
enabled = false
zh_z = false
ch_c = false
sh_s = false
n_l = false
f_h = false
r_l = false
an_ang = false
en_eng = false
in_ing = false
ian_iang = false
uan_uang = false| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enabled | 布尔 | — | false | 模糊音总开关 |
zh_z | 布尔 | — | false | zh ↔ z 不分 |
ch_c | 布尔 | — | false | ch ↔ c 不分 |
sh_s | 布尔 | — | false | sh ↔ s 不分 |
n_l | 布尔 | — | false | n ↔ l 不分 |
f_h | 布尔 | — | false | f ↔ h 不分 |
r_l | 布尔 | — | false | r ↔ l 不分 |
an_ang | 布尔 | — | false | an ↔ ang 不分 |
en_eng | 布尔 | — | false | en ↔ eng 不分 |
in_ing | 布尔 | — | false | in ↔ ing 不分 |
ian_iang | 布尔 | — | false | ian ↔ iang 不分 |
uan_uang | 布尔 | — | false | uan ↔ uang 不分 |
拼音调频(schema.pinyin.frequency)
0.114 起为位置提升模型:按候选位次前移,不打分。只有 half_life 参与(衰减),为 0 时用词频存储的内置默认(72 小时)。
[schema.pinyin.frequency]
enabled = true # 拼音调频总开关
promote_prefix = "single" # 补全词参与调频:none / single / all
# half_life = 0.0 # 半衰期(小时),0 = 用 store 默认(72)
# base_scale = 0.0 # 当前模型不使用,改动无效
# recency_peak = 0.0 # 当前模型不使用,改动无效| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enabled | 布尔 | — | true | 拼音调频总开关 |
promote_prefix | 枚举 | none / single / all | "single" | 前缀补全候选参与位置提升的范围 0.114 新增。判据为语义单元数 |
half_life | 浮点 | — | 0.0 | 半衰期(小时);0 = 用 store 默认(72) |
base_scale | 浮点 | — | 0.0 | |
recency_peak | 浮点 | — | 0.0 |
两项已成死链,但没有删除
拼音词频从「衰减打分」改为「位置提升」后,base_scale 与 recency_peak 不再有任何消费者。保留而非删除是为了将来若恢复打分模型可直接复用,也避免跨仓改动设置工具的守门测试。写在配置里不会报错,只是没有效果。
模型细节见词库与词频 · 拼音调频:位置提升模型。
拼音词组补全(schema.pinyin.completion)
[schema.pinyin.completion]
min_syllables = 2 # 至少输入几个音节才给词组候选
max_extra_syllables = 3 # 词组最多比输入多几个音节| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
min_syllables | 整数 | 1–4 | 2 0.114 新增 | 至少输入几个音节才给出词组候选;1 = 不限制 |
max_extra_syllables | 整数 | 0–6 | 3 0.114 新增 | 词组最多比已输入内容多几个音节 |
两项约束的都是词组补全——即码比输入长、引擎在预测你尚未输入的音节的那些候选。精确匹配、分段子词、整句、简拼一律不受影响,它们没有预测成分。
判据的尺子是输入自身的音节数:完整音节数 + (有未成音节的尾部字母则算起头的一个)。所以 dian 算 1 个音节,dianh(dian + 残码 h)算 2 个。
为什么默认打一个音节不出词组
打 d 或 dian 时若给出「但是」「电话」这类词组,它们会与同音字混排并占据前几页——主流拼音输入法在这一档同样只给单字。min_syllables = 2 即表示打到第二个音节才开始预测词组。
注意「堤岸」在 dian 下仍会出现:它的编码恰好就是 dian(切分为 di|an),属于精确匹配而非预测。
max_extra_syllables 是口味取舍,没有两全值
数值越大,引擎越敢预测你还没打的内容:
1——nih只给「你好」「你会」,不给 4 音节的「你会发现」3(默认)——zhongguorenm仍能补出「中国人民解放军」4起 ——zhonghuar才能补出「中华人民共和国」
难点在于「你会怎么做」与「中国人民解放军」的超出音节数完全相同(都是 3),词频也无法区分(前者反而更高),因此不存在既滤掉噪音又保留长专名的数值。按自己的输入习惯选。
拼音自动造词(schema.pinyin.auto_learn)
[schema.pinyin.auto_learn]
enabled = true # 拼音自动造词总开关
# min_word_length = 0 # 造词最小字数,0 = 回退 2
# promote_count = 0 # 临时词晋升所需使用次数| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
enabled | 布尔 | — | true | 拼音自动造词总开关 |
min_word_length | 整数 | — | 0 | 造词最小字数;0 = 回退 2 |
promote_count | 整数 | — | 0 | 临时词晋升所需使用次数 |
混输(schema.mix)
融合策略,全局唯一,无方案级 override。控制码表 / 拼音 / 英文候选如何在混输方案里融合与竞争上屏。
[schema.mix]
show_source_hint = false # 显示候选来源标记
enable_english = false # 启用英文候选
pinyin_only_overflow = true # 超码长时仅查拼音
top_code_override_pinyin = false # 顶码覆盖拼音
auto_commit_block_on_pinyin = true # 满码上屏遇拼音候选则否决
auto_commit_block_on_english = false # 满码上屏遇英文候选则否决
min_pinyin_length = 2 # 拼音最小触发长度
min_english_length = 3 # 英文最小触发长度
block_commit_on_pinyin_word = true # 拼音歧义拦截(词强度启发式)
pinyin_word_min_weight = 0 # 拼音歧义拦截的权重阈值
enable_pinyin_abbrev = true # 拼音产出简拼候选(声母缩写,nh→你好)| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
show_source_hint | 布尔 | — | false | 显示候选来源标记 |
enable_english | 布尔 | — | false | 启用英文候选 |
pinyin_only_overflow | 布尔 | — | true | 超码长时仅查拼音 |
top_code_override_pinyin | 布尔 | — | false | 顶码偏好:顶码覆盖拼音 |
auto_commit_block_on_pinyin | 布尔 | — | true | 满码上屏遇拼音候选则否决(粗粒度:只要有拼音候选就拦,不看拼音成不成词)。与细粒度的 block_commit_on_pinyin_word 叠加,任一命中即否决。它同时管顶码上屏,也是满码空码清空的总闸,见下 |
auto_commit_block_on_english | 布尔 | — | false | 满码上屏遇英文候选则否决(仅 enable_english 开时有意义) |
min_pinyin_length | 整数 | — | 2 | 拼音最小触发长度;0 = 回退 2 |
min_english_length | 整数 | — | 3 | 英文最小触发长度;0 = 回退 3 |
block_commit_on_pinyin_word | 布尔 | — | true | 拼音歧义拦截:整串是强拼音词时否决码表自动 / 顶码上屏(如 wangba→网吧) |
pinyin_word_min_weight | 整数 | — | 0 | 拼音歧义拦截的词强度权重阈值;0 = 仅结构判据(≥2 汉字且消费整串) |
enable_pinyin_abbrev | 布尔 | — | true | 混输时拼音是否产出简拼候选(声母缩写);关闭后混输里拼音只认全拼,候选更干净。仅影响混输的拼音子引擎,纯拼音方案不受影响 |
auto_commit_block_on_pinyin 也是「满码空码清空」的总闸
它开着时,schema.codetable.clear_on_empty_max 会被拼音侧拦下:「已有拼音候选」或「拼音还没打完」都不清空。关掉它则拼音不再干预,满码只剩「部分匹配」的拼音候选时即清空(如 nunl,候选「嫩」只解释了前 3 码 nun)。
仍在打的词不受影响——wanl 有前缀补全候选(wanle → 完了,消费整串),照常拦住清空。
快捷输入(schema.quick_input)
只放与候选来源无关的全局行为,目前仅一个键。
[schema.quick_input]
decimal_places = 6 # 计算器结果小数位数| 键 | 类型 | 可选值 | 默认 | 说明 |
|---|---|---|---|---|
decimal_places | 整数 | — | 6 | 计算器结果小数位数(0 = 取整) |
快捷输入的其余设置都不在这一段,而在内置「快捷」融合模式(schema.mix_modes 里 id 为 quick_mix 的那一项)上:
| 想改什么 | 去哪 |
|---|---|
| 开哪些候选来源、优先级 | members —— 有无即开关,顺序即优先级 |
| 候选窗横排 / 竖排 | candidate_layout |
| 触发键 / 禁用整个功能 | trigger_keys —— 清空即进不去,故没有单独的总开关 |
| 自由字面输入 | free_input 0.114 新增 —— off / auto / always |
自由输入下 ; ' 是字面还是选词 | free_input_takes_select_keys 0.114 新增 —— 默认 true(字面) |
三个已移除的键
旧版本这一段还有 enabled、force_vertical、enable_english,现已全部移除,写在配置里不会有任何效果:
enabled从未被任何逻辑读取,关掉不产生效果,故删除。禁用改为清空quick_mix的trigger_keysforce_vertical(布尔)→quick_mix的candidate_layout(三态)。它的判定条件本就是「这个融合实例含快捷来源」,属于实例的属性,却被放在了与实例无关的全局段。存量配置会在启动时自动迁移:true→vertical,false→followenable_english→ 改为members里有没有english这一项。它与members曾是双真相源。存量配置同样自动迁移:false→ 从 members 移除english
自 0.114 起,enabled 与 enable_english 这两个退役键会在启动时从用户配置里自动清除(force_vertical 走的是迁移而非清除)。此前它们只是被解析器丢弃、却一直留在 config.toml 里,用户看见 enable_english = true 会以为它还生效。清除是幂等的,且清除前后 load() 的结果逐键完全相同——它们本来就不产生任何效果。若 [schema.quick_input] 段因此变空,整段一并回收。
注意 schema.mix.enable_english 是另一个键(管混输里的英文候选),仍然有效,没有被删。
更多用法见快捷输入。
特殊模式与混输模式(special_modes / mix_modes)
# schema.special_modes / schema.mix_modes 均为数组(对象列表),此处不展开子字段| 键 | 类型 | 说明 |
|---|---|---|
special_modes | 结构体数组 | 特殊模式列表(各自带码表 + 上屏策略,引导键触发)。子字段见引导键特殊模式 |
mix_modes | 结构体数组 | 临时混输模式列表(引导键触发,合并多个成员方案的候选)。内置一项 quick_mix 即快捷输入 |
两者都是每实例配置:同一份列表里的不同条目各有自己的引导键、候选来源与 candidate_layout,互不影响。
mix_modes 每一项的常用子字段:
| 子字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
id / name / short_name | 字符串 | — | 实例标识、显示名、模式指示短称(空则取 name 首字) |
trigger_keys | 字符串数组 | — | 引导键列表;清空即禁用该实例 |
members | 字符串数组 | — | 候选来源:有无即开关,顺序即优先级 |
candidate_layout | 枚举 | follow | 进入本实例期间的候选窗布局,退出后恢复 |
comment_template_vertical / _horizontal | 结构体 | 跟随全局 | 本实例期间的候选注释模板覆盖 |
free_input | 枚举 | auto | 自由字面输入:off / auto / always 0.114 新增。见快捷输入 · 自由字面输入 |
free_input_takes_select_keys | 布尔 | true | 自由输入时把第 2 / 3 候选键(默认 ; ')当作字面字符 0.114 新增。关掉则它们恢复选词,代价是 rock'n'roll 这类内容打不出。数字键 1–9 始终选词,不受本项影响 |
这两项不要写进 data/config.toml
它们的默认值定义在程序内部。系统预置文件 data/config.toml 一旦写出这两个数组,就会整体替换内置默认、把当时的定义冻结成快照——日后版本给内置「快捷」加候选来源或改触发键,都会被这份陈旧快照静默遮蔽。
要改就改用户配置(%APPDATA%\WindInput\config.toml),或直接用设置工具。