候选悬停提示
鼠标停在候选上弹出的提示框——由可自定义的段组成,能看完整原文、编码、读音、拆字、Unicode,右键可按段复制或上屏
鼠标在候选上停一会儿,旁边会弹出一个提示框(气泡),列出这个候选的编码、读音等信息。 气泡由若干段自上而下组成,每段是一个标题加几行内容,比如:
[编码(五笔)]
vbg
[拼音]
好:hǎo/hào哪些段、什么顺序、每段显示什么,都可以自己定。段的内容用与候选注释 同一套模板语法和变量,会写注释模板就会写气泡。
这是进阶定制
出厂配置保留了以往气泡的内容与分段(编码、读音等按主题配色显示),多数人不需要改。本页面向想调整气泡内容的用户:只要编码、 想看 Unicode 码位、想让英文候选显示词典释义、想把拆字与拼音合成一段,等等。
设置位置:设置工具 →「外观」→ 候选项提示。那里可以逐段开关、调整顺序、编辑段名与模板,
也能从预设里添加常用的段;本页的全部内容也都可以直接写进 config.toml。
出厂有哪些段
| 顺序 | 段名 | 出厂 | 内容 |
|---|---|---|---|
| 1 | 完整原文 | 开 | 候选太长、在候选窗里被截断(末尾带 …)时,这里给出完整的文字;没被截断时整段不出现 |
| 2 | 编码 | 开 | 这个词在编码来源方案里的全部编码,如 a/ab/abc。拼音方案下反查五笔时标题显示为「编码(五笔)」 |
| 3 | 拼音 | 开 | 逐字列出读音,多音字全部列出 |
| 4 | 拆字 | 关 | 逐字列出字根与拆字编码(需方案配了拆字库) |
| 5 | Unicode | 关 | 逐字列出码位,如 好:U+597D |
| 6 | 调试 | 关 | 编码来源、权重等内部诊断信息 |
对应的配置(data/config.toml 出厂值,想在此基础上改就整段复制过去):
[ui.tooltip]
delay = 200 # 悬停多久后显示(毫秒)
max_chars = 200 # 单行最多显示多少字,0 = 不限
wrap_width = 40 # 折行宽度(列),0 = 不折行
[[ui.tooltip.sections]]
label = "完整原文"
template = "${full_text}"
[[ui.tooltip.sections]]
label = "编码{(${code_source})}"
template = "${word_code}"
[[ui.tooltip.sections]]
label = "拼音"
each = "han"
template = "${char}:${readings}"
[[ui.tooltip.sections]]
enabled = false
label = "拆字"
each = "han"
template = "${char}:${chaizi}{ [${chaizi_code}]}"
[[ui.tooltip.sections]]
enabled = false
label = "Unicode"
each = "char"
template = "${char}:${unicode}"
[[ui.tooltip.sections]]
enabled = false
label = "调试"
template = "${debug}"写了 sections 就是整表替换
[[ui.tooltip.sections]] 在你的 config.toml 里一出现,就整张表取代出厂列表,不是逐段合并。
只写一段,气泡里就只有这一段。想「在出厂基础上多开一段」,要把上面整张表复制过去再改。
删掉你配置里全部的 [[ui.tooltip.sections]],即回到出厂列表。
只要有任何一段有内容,候选就有气泡。英文、符号、emoji 候选也一样——比如在词库里有编码的 符号候选会显示「编码」段,挂了英汉注释库的英文单词可以显示释义(见配方)。
每段由什么组成
| 字段 | 默认 | 说明 |
|---|---|---|
enabled | true | 段开关。关着的段留在列表里,想看时改回 true 即可,不必删了再加 |
label | 空 | 段名,显示为 [段名] 独占一行;留空则没有标题行。段名本身也是模板,见下 |
template | 空 | 段内容,语法与候选注释相同 |
each | 空 | 求值粒度:空 = 整个候选求值一次;han = 每个汉字一次;char = 每个非空白字符一次。见逐字模式 |
promote | 空 | 仅逐字段:填一个变量名,该变量有值的行排到前面。见合并拆字与拼音 |
inline | false | 内容恰好只有一行时,写成 段名: 内容,不另占一行标题 |
几条规则:
- 段名里的文字不会因变量为空而消失。
编码{(${code_source})}在拼音方案下反查五笔时是编码(五笔),直接打五笔时变量为空、括号那一截消失,剩下编码——而不是整个标题都没了。 - 段内容按换行拆成行,空行丢弃;所有行都为空,整段(连同标题)不显示。
- 模板语法写错时的表现与候选注释相同:变量名拼错会原样显示出来,方便你发现。
each写了不认识的值,按整段求值处理,并在日志里留一条警告。
给段内容上色 0.123 新增
段名与段内容里同样可以用内联颜色 $[颜色]{内容},
写法与候选注释相同。例如让读音显示为强调色:
template = "${char}:$[accent]{${readings}}"气泡与候选窗有两处不同:
- 颜色名先取气泡专用的那一个:写
x时先找主题里的tooltip_x,没有再用x。气泡底色是深的, 候选窗用的颜色多是为浅色底调的——$[error]{…}在候选窗里是深红,放进气泡会看不清,所以在气泡里取到的是 调浅过的tooltip_error。$[text]{…}同理取到气泡文字色tooltip_text。各颜色名在气泡里的值见 标准色;#开头的固定色不受影响,写什么就是什么。 selected=不起作用:气泡没有选中态。
不改模板也能分色:主题可以按变量名、以及段名(title)统一配色,见
文字角色色。出厂主题已经配好了一组:完整原文与读音用强调色,
编码用绿色,编码来源(「编码(五笔)」里的「五笔」)与拆字编码用蓝色,字根用黄色,Unicode 码位用红色;
好: 这类前缀和段名文字保持气泡文字色。具体见出厂主题的角色色。
变量
候选注释的全部变量在这里都能用(${pinyin}、
${chaizi}、${code_rev}、${dict}……)。此外有几个气泡专属的:
| 变量 | 用在 | 内容 | 示例 |
|---|---|---|---|
${full_text} | 整段 | 候选的完整文字。只在候选被截断时有值,否则为空,于是整段自动消失 | 中华人民共和国万岁万岁万万岁 |
${word_code} | 整段 | 这个词在编码来源方案里的全部编码,短的在前,/ 连接 | a/ab/abc |
${code_source} | 整段 | 编码来源方案的名字;正在用该方案直接输入时为空 | 五笔 |
${unicode_all} | 整段 | 逐字码位,默认空格分隔;${unicode_all:、} 指定分隔符 | U+4F60 U+597D |
${debug} | 整段 | 调试信息正文(多行) | |
${char} | 逐字 | 当前这个字 | 好 |
${readings} | 逐字 | 这个字的全部读音,常用的在前,/ 连接;${readings:2} 只取前 2 个 | hǎo/hào |
${unicode} | 逐字 | 这个字的码位,扩展区的字写五 / 六位 | U+597D、U+2A6D6 |
「用在」一列指这个变量在哪种段里有意义:「整段」变量在逐字段里也能写,但取的是整个候选的值,
每行都一样;逐字变量(${char} / ${readings} / ${unicode})只在逐字段里认得,写在整段段里
会像拼错的变量名一样原样显示出来。
编码从哪个方案来
${word_code} 回答「这个词在某个形码方案里怎么打」,这个方案(编码来源方案)这样定:
- 当前是码表方案(五笔等):就是它自己,列出这个词的全部编码
- 当前是混输方案:取它的主码表
- 当前是拼音等其他方案:取主码表方案
编码是按词查词库得来的,不按取码规则推算。第一次用到某个方案的反查时,索引在后台构建, 这时「编码」段暂不出现,建好后自动补上。
它和注释里的 ${code_rev_all} 不是一回事:${code_rev_all} 只给拼音来源的候选反查主码表,
受「编码提示来源」开关管,码表方案下恒为空(候选的码就是你自己打的);${word_code} 对任何
候选都查,不受那个开关影响——在气泡里,想确认一个词的全部简码是常见需求。
逐字模式
拼音、拆字、Unicode 这几类信息是一个字一行的,靠 each 实现:设了 each 的段对每个字
求值一次,每字一行。
| 取值 | 遍历哪些字 |
|---|---|
han | 汉字(含各扩展区)。判据是码位不小于 U+3400:「,!?」这类全角标点(U+FF00 区)和 emoji 也在其中,只是通常查不到读音,那一行就不出现;「。、「」《》」这类 CJK 标点(U+3000–303F)不在其中 |
char | 每个非空白字符,包括字母、数字、符号 |
- 遍历的是候选在候选窗里显示出来的字(被截断的话只到截断处,不含末尾的
…)。一条 上百字的长短语不会把气泡撑成上百行,被截掉的部分看「完整原文」段。 - 逐字段里,拼音、拆字、反查编码这类注释变量都按这一个字求值。比如
${char}:${code_rev_all}逐字列出每个字的全部编码,取自与「编码」段同一个编码来源方案 (按字求值时不受「编码提示来源」开关限制)。 ${char}不算「这一行有内容」。${char}:${readings}遇到查不到读音的字,整行不显示, 而不是留下一个孤零零的龘:。规则是:一行里除${char}以外的变量全为空,这行就丢掉。
合并拆字与拼音:promote
想让拆字和读音并排在一行(旧版开了拆字后的样子),用一个段代替「拼音」「拆字」两段:
[[ui.tooltip.sections]]
label = "拆字 / 拼音"
each = "han"
promote = "chaizi"
template = "${char}:{${chaizi}{ [${chaizi_code}]}\t}${readings}"候选「你好」,拆字库里有「好」、没有「你」时:
[拆字 / 拼音]
好:女子 [vbg] hǎo/hào
你:nǐ逐项看这行模板:
{ [${chaizi_code}]}是内层可选段:没有拆字编码时,连方括号一起消失。- 外层
{…\t}包住字根、编码和分隔用的制表符:这个字拆字库里没有,整截消失,得你:nǐ。 - 查不到读音时,
${readings}为空,会吞掉紧挨在它前面的那个制表符,得好:女子 [vbg]。 - 模板里的制表符
\t让两列对齐。在设置页的对话框里输入\t同样生效。 promote = "chaizi":${chaizi}有值的行排在前面,其余行按原文顺序跟在后面——所以「好」 在「你」之前。不写promote就按原文顺序。
promote 不是拆字专用的,填任何变量名都行,意思都是「这个变量有值的行排前面,两组内部各自
保持原文顺序」。
可选段可以嵌套
上面的模板用到了可选段套可选段。这是 0.123 起模板语法的变化,候选注释同样适用; 随之而来的要求是:模板里要写字面的花括号,必须成对出现。见候选注释的可选段嵌套。
长度与折行
气泡里最长的往往是「完整原文」段——一条长短语可以有上千字。两个键控制显示长度:
| 键 | 出厂 | 说明 |
|---|---|---|
max_chars | 200 | 每行最多显示多少字,超出截断加 …;0 = 不限 |
wrap_width | 40 | 一行显示到多宽就换行,按列计:汉字、全角字符、emoji 算 2 列,其余算 1 列;0 = 不折行 |
- 先截断、再折行,都是逐行处理的。计数按人眼看到的字算:一个 emoji 组合、一个带附加 符号的字母都算一个,不会被从中间切开。
- 折行落在一串英文、编码中间时,优先在空格、
/、·之后断开,a/ab/abc不会被切成a/ab/ab+c;折出来的续行不以空格开头。 - 模板里写了制表符的段(如上面的「拆字 / 拼音」),带制表符的行不折——折开会把第二列甩到 下一行行首。
inline段的段名:占第一行的宽度。- 截断和折行只影响显示。右键复制、上屏拿到的都是完整、未折行的原文。
右键菜单
在气泡上点右键,菜单项取决于点在哪里:
| 点在哪 | 菜单项 |
|---|---|
| 某一段(标题或内容) | 复制「段名」 · 上屏「段名」 |
| 逐字段里的某一行 | 另加:复制此行 · 上屏此行 |
| 任何位置 | 复制全部 · 截图此窗口 |
菜单里的段名就是气泡上显示的段名,如「编码(五笔)」;超过 8 个字截断加 …,没有段名的段
叫「第 N 段」。
取到的是什么:
- 某段:这一段的内容行,换行连接,不含段名。「编码」段复制得
vbg;「完整原文」段 复制得未截断、未折行的整段原文。 - 此行:这一行原样,如
好:hǎo/hào。只想要读音的话,把模板改成只输出${readings}。 - 复制全部:整个气泡的文字,格式与气泡上一样(
[段名]独占一行),但内容是原文—— 没有截断的…,也没有折行插入的换行。
上屏的行为:
- 连同已经确认的部分一起上屏,并结束本次输入(清空编码、关掉候选窗)。
- 上屏的是提示里的一段信息,不是这个候选,所以不计词频、不参与造词与联想。
- 菜单开着的时候候选变了(比如这次输入已经结束,或那个位置已换成别的候选),上屏会放弃,并弹出提示 「候选已变化,未执行」。复制不受影响,复制的就是你打开菜单时看到的内容。
如果气泡在你右键前一刻刚好刷新过(例如编码索引在后台建好,前面多出一个「编码」段), 菜单里只剩「截图此窗口」——此时按你点的位置取值会取错段。把鼠标移开再悬停一次即可。
常用配方
下面的片段都写在 config.toml 里。记住写了 sections 就是整表替换:片段里
没有列出的段就不会显示。
只要编码
[[ui.tooltip.sections]]
label = "编码{(${code_source})}"
template = "${word_code}"出厂内容 + 一行 Unicode
把出厂列表整段复制过来,在末尾加一段:
[[ui.tooltip.sections]]
label = "Unicode"
inline = true
template = "${unicode_all}"显示为 Unicode: U+4F60 U+597D,整个候选一行。想每字一行,改用出厂那个 Unicode 段
(each = "char"),把 enabled 改成 true。
英文候选显示词典释义
先按注释词库挂好英汉词典,再加一段(设置页「按预设添加」里的「词库注释」就是这一段):
[[ui.tooltip.sections]]
label = "词库注释"
template = "${dict}"没有释义的候选这一段自动消失,所以中文候选不受影响。与候选注释相比,释义放在气泡里不占候选窗 的宽度,长释义也看得全。
拆字与拼音分开显示
出厂就是分开的,只是拆字段关着。在出厂列表里把「拆字」段的 enabled 改成 true:
[[ui.tooltip.sections]]
label = "拆字"
each = "han"
template = "${char}:${chaizi}{ [${chaizi_code}]}"想合成一段见上文。
读音只显示最常用的一个
把「拼音」段的模板改成:
template = "${char}:${readings:1}"学形码:逐字看编码
[[ui.tooltip.sections]]
label = "逐字编码"
each = "han"
template = "${char}:${code_rev_all}"对词组候选,「编码」段给整词的编码,这一段再把每个字怎么打列出来。
从旧版开关迁移
0.123 之前,悬停提示只有六个开关。升级后它们自动换算成等效的段列表写入你的配置,旧键从 配置文件中移除,气泡外观不变:
| 旧键 | 换算为 |
|---|---|
code_enabled | 「编码」段的开关 |
pinyin_enabled | 「拼音」段的开关 |
pinyin_heteronyms = false | 拼音段模板改为 ${readings:1}(只取首音) |
pinyin_max_readings = N | N > 0 且多音字开关没关时,拼音段模板改为 ${readings:N}(多音字开关关了则以 ${readings:1} 为准) |
chaizi_enabled | 拼音也开着:拼音、拆字两段换成一个「拆字 / 拼音」合并段,行序与旧版一致;拼音关着:打开「拆字」段 |
debug_enabled | 「调试」段的开关 |
- 换算以出厂列表为底,所以老用户同样得到新增的「完整原文」段(开)和「Unicode」段(关)。
- 如果你的配置里已经写了
sections,以它为准,旧键直接删除、不再换算。 - 与旧版有三处可见差异:
- 合并段的标题固定为「拆字 / 拼音」。旧版在所有字都查不到拆字(或都查不到读音)时,会退回 只显示「拼音」或「拆字」标题;内容行与旧版相同。
- 英文、符号等非汉字候选开始有气泡(见上文)。
- 自备拆字库里「只有编码、没有字根」的字,现在会多显示编码,如
丂: [gnv](出厂拆字库里没有这种条目)。
平台支持与已知局限
- 右键菜单只在 Windows 的普通候选窗下可用。开启了宿主代理渲染 的应用里,气泡不响应右键;macOS 版的气泡也没有右键菜单。气泡的内容、截断与折行在各平台一致。
- 段列表一旦写进你的配置,就定格在那一刻。以后版本新增的出厂段不会自动出现在你的气泡里——
无论这份列表是你手改的,还是从旧版开关换算来的。升级后想看看有什么新段,对照本页的
出厂列表手工加上,或删掉你配置里的
sections回到出厂状态。 - 只有全局一份,不能按方案或输入模式分别设置。
- 段名可以由主题单独配色(
title角色)0.123 新增,但不能单独加粗, 与内容同一字体。 - macOS 版的气泡由
.app自己绘制 0.123 新增。.app与输入法服务的版本不一致时(新服务配旧.app,或反过来), 气泡里的分段颜色退化为单色——整段用气泡文字色,内容与排版不受影响。
配置项参考
对应的配置键、取值范围与默认值见外观配置 · 悬停提示。
对这篇文档有疑问,或发现内容有误?
欢迎到文档仓库提 issue,写明问题时附上本页链接即可。