Skip to content

命令直通车

命令直通车 (Command Bar) 是清风输入法的高阶能力, 让短语 / 用户词库 / 系统词库的条目能在选中时执行带副作用的动作 —— 打开 URL、启动程序、模拟按键、写入剪贴板、加词到用户库、切换输入法状态等。把输入法从"纯打字工具"延伸为"快捷命令启动器"。

简介

适用场景

  • 输入编码 cobd → 选中候选 → 用默认浏览器打开 baidu.com
  • 输入 cojk → 选中 → 直接输出 「」 并把光标停在中间
  • 输入 coac → 选中 → 把剪贴板内容加入用户词库
  • 输入 cozd → 选中 → 用汉典查询上一次上屏的词
  • 输入 coen → 选中 → 切换中英文模式

与普通短语的关系

普通短语只能"展开成文本上屏" (如 date = $Y-$MM-$DD → 上屏 2026-05-15)。命令直通车在此基础上新增动作执行能力, 通过短语 / 词库内容中的特殊 marker (以 $ 开头) 触发。

普通文本短语、模板短语 ($Y $M 等)、命令短语 ($CC $CC1)、字符组 ($AA) 共用同一个 text 字段, 仅靠内容形式区分类型。

三种 Marker

$CC — 命令, 仅精确匹配

$CC(显示名, 动作1, 动作2, ...)
  • 用户输入完整编码时 (例如 cobd) 出现在候选区
  • 不会在前缀输入时 (例如 cocob) 显示
  • 适合: 高频但不常和码表字混合的命令

示例:

cobd = $CC("打开百度", open("https://baidu.com"))

$CC1 — 命令, 精确 + 前缀都显示

$CC1(显示名, 动作1, 动作2, ...)
  • 用户输入完整编码时显示
  • 同时在前缀输入时也显示 (co 看得到, cob 也看得到)
  • 适合: 希望让用户在输入过程中"发现"的命令

示例:

cobd = $CC1("打开百度", open("https://baidu.com"))

$AA — 字符组

$AA(组名, 字符列表)
  • 用户输入完整编码 (例如 zzbd) → 候选区展开为 N 个独立单字符, 每个字符为一条候选
  • 用户输入前缀编码 (例如 zz) → 候选区显示 1 条导航候选, 文字是组名 (如"标点"), 选中后可以二级选择
  • 适合: 符号集 (标点、希腊字母、单位符号等)

示例:

zzbd = $AA("标点", "、。·ˉˇ¨〃々—~‖…")

输入 zz → 看到"标点 (bd)"导航; 输入 zzbd → 看到 、 。 · ˉ ǔ ¨ 〃 々 — ~ ‖ … 12 条候选。

编写位置

命令直通车短语可以放在任一支持的 dict 层中, 三处都自动解析:

位置是否全局备注
快捷短语全局, 跨方案有效设置 → 词库 → 短语
用户词库仅当前方案设置 → 词库 → 方案 → 用户词库
系统词库仅当前方案设置 → 词库 → 方案 → 系统词库 (大部分场景不直接编辑)

TIP

推荐绝大部分命令放快捷短语, 因为跨方案 (拼音/五笔/混输) 都可用。 用户词库适合方案专属的命令 (如某个五笔编码特定行为)。

语法

基础

$CC / $CC1 内部是表达式 (expr), 表达式只有 3 种形态:

形态例子
字面量"hello", 42, 3.14
标识符last, now, code (等价零参调用 last() / now() / code())
函数调用open("https://..."), clip.copy("x"), key.tap("Enter")

字符串内插

字符串中可用 {expr} 内插任意子表达式:

$CC("百度搜 {clip()}", open("https://baidu.com/s?wd={url(clip())}"))

display 显示 "百度搜 <剪贴板内容>"; 选中后浏览器打开搜索页。

$$ 转义

如果要输出字面 $ 字符, 用 $$:

text = "价格: $$10"

显示 价格: $10 (没有 $$ 写法时, $10 会被尝试匹配模板变量)。

. 仅用于函数命名空间

. 只用作函数名命名空间分隔符, 例如 clip.copy(...), key.tap(...), dict.addword(...)。不能用于"变量取属性"或"索引"。

错误正确
last.1last(1)
last.1.urlurl(last(1))
code.lengthlen(code)

函数清单

所有函数都返回字符串 (动作函数返回空字符串)。下列表格统一使用以下记号:

  • n / int — 整数
  • s / str — 字符串
  • 参数后带 ? 表示可选

取值函数 (纯函数, 返回字符串快照)

函数参数返回说明
code()(无)str触发候选时的输入编码 (例如 cobd)
code(n)n: intstr触发编码从第 n 字符 (1 起) 切到末尾
tail(s, n)s: str, n: intstr任意字符串 s 从第 n 字符 (1 起) 切到末尾
last()(无)str最近一次上屏的文本
last(n)n: intstr倒数第 n 次上屏文本, n ≥ 1; 历史不足时返回空串
clip()(无)str当前系统剪贴板文本
clip(n)n: intstr剪贴板历史第 n 条 (1 起, 最多 9 条)
sel()(无)str当前应用中选中的文本 (stub, 占位返回空串)
app()(无)str当前前台进程名, 例如 chrome.exe
title()(无)str当前前台窗口标题
date(fmt)fmt: strstr日期, fmt 用 YYYY MM DD HH mm ss 等别名
date(fmt, offset)fmt: str, offset: strstr带偏移的日期, offset 形如 "+1d" "-2w" "+3M" "-1y"
time()(无)str当前时间, 默认 fmt = "HH:mm:ss"
time(fmt)fmt: strstr自定义时间格式
now()(无)str等价 date("YYYY-MM-DD HH:mm:ss")
env(name)name: strstr环境变量, 例如 env("USERNAME")
config.get(key)key: strstr读取配置项当前值, key 为配置键路径 (如 ui.theme.style); 详见 配置读写

文本处理 (纯函数)

函数参数返回说明
len(s)s: strstr (数字)字符数, 按 rune 计
upper(s)s: strstr全部转大写
lower(s)s: strstr全部转小写
trim(s)s: strstr去首尾空白
trim(s, chars)s: str, chars: strstr去首尾的指定字符
sub(s, start)s: str, start: intstr切片到末尾, 索引 1 起, 支持负数
sub(s, start, end)s: str, start: int, end: intstr切片 [start, end] 双闭区间, 索引 1 起, 支持负数
replace(s, old, new)s: str, old: str, new: strstr字面替换
regex(s, pat, rep)s: str, pat: str, rep: strstr正则替换, Go RE2 语法
split(s, sep, n)s: str, sep: str, n: intstr按 sep 拆分, 取第 n 段 (1 起, 支持负数从末尾计)
concat(...)... : strstr字符串拼接, 0 个参数返回空串
reverse(s)s: strstr反转, 按 rune
url(s)s: strstrURL 百分号编码 (component)
html(s)s: strstrHTML 实体编码
json(s)s: strstrJSON 字面量化 (含两端引号)
base64(s)s: strstrBase64 编码
default(s, fallback)s: str, fallback: strstrs 为空时返回 fallback
t2s(s)s: strstr繁→简 (stub, 占位原样返回)
s2t(s)s: strstr简→繁 (stub, 占位原样返回)
pinyin(s)s: strstr汉字转拼音 (stub, 占位原样返回)

计算

函数参数返回说明
calc(expr)expr: strstr (数字)数学表达式求值, 支持 + - * / % ( ), 浮点; 空输入静默返回空串
num(s, base)s: str, base: intstr进制转换 (2/8/10/16), 例 num("0xff", 10)"255"

内省

函数参数返回说明
help(name)name: strstr返回指定函数的简介; 查不到时返回空串。供 cmdbar-repl / 设置面板浏览函数手册使用

动作函数 (有副作用, 返回空串)

命名宪法 (2026-05-16)

动作函数已统一为 namespace.verb 形式: runproc.run, shellproc.shell, searchweb.search, dict.addworddict.add, ime.settingsetting.open旧名仍可用 (注册为 deprecated alias, Eval 复用同一实现), 现有 yaml 不需立刻迁移; 新写短语推荐用新名。

函数 (新名)旧名 / 别名参数副作用说明
type(s)s: str上屏文本经 TSF 输入, 不污染剪贴板。特殊: 解析期被 eval 拦截为 ActionText, 经 InsertText 落字
open(target)target: str打开 URL / 文件 / 程序http(s) 走默认浏览器, 其他走 ShellExecute
proc.run(cmd, ...args)runcmd: str, args: str...启动进程异步, 不等待返回
proc.shell(cmdline)shellcmdline: str执行 shell 命令默认 cmd /c, 静默无窗口
proc.shell(cmdline, flags)shellcmdline: str, flags: str执行 shell 命令flags 控制 shell 类型与窗口, 见下表
key.tap(combo)combo: str单次按键"Enter" "Shift+End" "Ctrl+C" "vk:0x5D"
key.seq(...combos)combos: str...按键序列按顺序依次触发
key.hold(combo)combo: str按下不抬起需与 key.release 成对使用, 否则按键会卡住
key.release(combo)combo: str抬起按键释放 key.hold 按下的键, 顺序与 hold 相反
key.type(text)text: strUnicode 直输文本以扫描码发送, 绕过键盘布局; 与 type() 不同, 走 SendInput 而非 TSF
clip.copy(s)s: str写入剪贴板覆盖现有剪贴板
clip.paste()(无)粘贴模拟 Ctrl+V
dict.add(s)dict.addwords: str加词到用户库编码按当前方案规则自动推导
dict.add(s, code)dict.addwords: str, code: str加词到用户库指定编码
ime.toggle(target)target: str切换输入法状态target ∈ "cn-en" / "fullshape" / "layout"(横纵候选) / "candwin"(候选窗) / "s2t"(简繁) / "preedit"(编码模式) / "toolbar"(工具栏)
ime.schema(id)id: str切换并持久化输入方案id 为方案标识符, 如 "wubi86" / "pinyin"
ime.theme(name)name: str切换并持久化主题name 为主题名, 如 "default" / "msime" 或自定义主题名
ime.theme_cycle(dir?)dir?: str循环切换主题 (内置 + 用户安装)返回新主题名 (非空串); dir ∈ "next"(默认) / "prev"
setting.open(page)ime.settingpage: str打开设置页page 为空打开默认页
setting.web(page)page: str打开 Web 版设置界面--web 启动, 无需 WebView2; page 为空打开默认页
web.search(engine, q)searchengine: str, q: str打开搜索结果页engine ∈ "baidu" / "bing" / "google" / "zdic"
config.set(key, value)key: str, value: str写入并持久化配置项key 为配置键路径, value 为字符串; 详见 配置读写
config.toggle(key)key: str循环切换枚举配置 / 翻转 bool返回新值 (非空串); 详见 配置读写

proc.shell flag 字符串

proc.shell(cmd, flags) 第二参数是 flag 集合 (逗号分隔), 控制 shell 类型 + 窗口可见性:

flag含义
(空 / 省略)cmd /c, 静默无窗口
termcmd /k, 弹可见 console
pwshpwsh.exe (找不到则 fallback powershell.exe), 静默
pwsh,termpwsh 可见

示例:

$CC("ping (静默)", proc.shell("ping -n 1 baidu.com"))
$CC("ping (可见)", proc.shell("ping -n 1 baidu.com", "term"))
$CC("PS 命令",   proc.shell("Get-Process | Out-File ~/procs.txt", "pwsh"))

配置读写 (config.*)

config.get / config.set / config.toggle 直接读写输入法的持久化配置项(即设置工具中的各项),改动立即生效并写入配置文件,无需打开设置界面。

key 参数为配置项的键路径,与全局配置文件(TOML)中的字段路径一致,例如 ui.theme.styleui.candidate.layoutui.toolbar.visible

函数行为返回
config.get(key)读取当前值(纯函数,无副作用)当前值字符串
config.set(key, value)写入指定值并持久化空串
config.toggle(key)枚举项循环切到下一个值;布尔项翻转 true/false新值字符串

display 与 action 都会求值,小心切换两次

config.toggle 有副作用。$CC显示名和动作里的表达式都会被求值,所以在两处各写一次 config.toggle 会切换两次(净效果等于没切)。

若想"切一次并显示新状态",让显示名用 config.get、动作用 config.toggle

cotl = $CC("候选布局: {config.get(\"ui.candidate.layout\")}", config.toggle("ui.candidate.layout"))

示例:

# 直接设为暗色主题风格
codk = $CC("暗色模式", config.set("ui.theme.style", "dark"))

# 在 system / light / dark 之间循环
cotm = $CC("切主题风格", config.toggle("ui.theme.style"))

# 读取当前每页候选数(纯展示,无副作用)
cocn = $CC("每页候选: {config.get(\"ui.candidate.per_page\")}", type(""))

config.toggleime.toggle / ime.theme_cycle 的区别

  • ime.toggle / ime.theme_cycle 针对运行时状态(中英文、候选窗、主题循环等),走专用通道,部分项不一定落配置文件。
  • config.toggle 针对配置文件字段,任何枚举/布尔型配置项都能通用切换。

两者功能有重叠(如主题风格),按需选用即可。

按键参考

key.tap / key.seq / key.hold / key.release 中的 combo 字符串格式为:

[修饰键+]...[修饰键+]主键

大小写不敏感, + 为分隔符, 修饰键顺序会自动规范化为 Ctrl < Shift < Alt < Win

修饰键

规范名可接受别名Windows VK
CtrlControlVK_CONTROL (0x11)
ShiftVK_SHIFT (0x10)
AltMenuVK_MENU (0x12)
WinSuper, Meta, CmdVK_LWIN (0x5B)

控制 / 导航键

规范名可接受别名VK 码说明
EnterReturn0x0D回车
Tab0x09制表符
EscapeEsc0x1B退出
Space0x20空格
BackspaceBack0x08退格
DeleteDel0x2E删除
InsertIns0x2D插入
Home0x24行首
End0x23行尾
PageUpPage_Up, Prior0x21上翻页
PageDownPage_Down, Next0x22下翻页
UpArrowUp0x26上方向键
DownArrowDown0x28下方向键
LeftArrowLeft0x25左方向键
RightArrowRight0x27右方向键
CapsLock0x14大写锁定
PrintScreenPrtSc0x2C截图键
ScrollLock0x91滚动锁定
Pause0x13暂停键

功能键

规范名VK 码规范名VK 码
F10x70F130x7C
F20x71F140x7D
F30x72F150x7E
F40x73F160x7F
F50x74F170x80
F60x75F180x81
F70x76F190x82
F80x77F200x83
F90x78F210x84
F100x79F220x85
F110x7AF230x86
F120x7BF240x87

标点符号键 (美式 US 布局)

规范名字符别名VK 码键位说明
Grave`, ~, Backtick0xC0反引号 / 波浪号键
Minus-0xBD减号 / 下划线键
Equal=, Plus0xBB等号 / 加号键
LBracket[, Open_Bracket0xDB左方括号键
RBracket], Close_Bracket0xDD右方括号键
Backslash\0xDC反斜杠键
Semicolon;0xBA分号键
Quote'0xDE单引号键
Comma,0xBC逗号键
Period.0xBE句号键
Slash/0xBF斜杠键

WARNING

标点符号键的 VK 码基于美式 US 键盘布局。非 US 布局下物理键位可能不同,此时建议改用 vk: 数值码指定精确的虚拟键值。

字母与数字键

字母 az(大小写等价)和数字 09 直接作为键名使用。字母键的 VK 码由 Win32 VkKeyScanW 按当前键盘布局动态查询,无固定值。

vk: 数值码

当需要输入上表未列出的特殊键(如小键盘键、多媒体键、右键菜单键等),可使用 vk: 前缀直接指定 Windows 虚拟键值:

写法解析方式示例
vk:0x5D0x 前缀 → 十六进制右键菜单键 (VK_APPS)
vk:93无前缀 → 十进制同上 (93 = 0x5D)

两种写法等价,可混用:

# 右键菜单键
key.tap("vk:0x5D")
key.tap("vk:93")

# 带修饰键
key.tap("Shift+vk:0x5D")

# 数字小键盘 0 (VK_NUMPAD0 = 0x60)
key.tap("vk:0x60")

# 媒体播放/暂停 (VK_MEDIA_PLAY_PAUSE = 0xB3)
key.tap("vk:0xB3")
key.tap("vk:179")

有效范围:0x010xFF (1–255),值为 0 或超出范围时报错。

组合示例

key.tap("Ctrl+C")              # 复制
key.tap("Ctrl+Shift+End")      # 选到文档末尾
key.tap("Alt+F4")              # 关闭窗口
key.tap("Win+D")               # 显示桌面
key.seq("Home", "Shift+End", "Delete")  # 删除整行
key.hold("Shift")              # 按住 Shift(需配对 release)
key.release("Shift")           # 释放 Shift
key.type("Hello, 世界")         # Unicode 直输,不依赖键盘布局

权重

命令直通车短语的权重设置与普通短语相同, 取值 0 ~ 10000, 默认 1000。详细分档建议、与混输模式的关系等参见 权重系统

TIP

  • 希望命令稳定置顶 (例如 coen 切中英) → weight = 8000+
  • 默认值 1000 适合"和码表字混排"
  • 仅在精确编码下偶尔出现 → weight ≤ 500

前缀匹配规则

内容形态前缀匹配 (输入未完整)精确匹配
普通字面短语 (无 $)✓ 显示✓ 显示
模板短语 (含 $Y / $M 等)✗ 不显示✓ 显示
$CC(...)✗ 不显示✓ 显示
$CC1(...)✓ 显示✓ 显示
$AA(...)✓ 导航候选 (组名)✓ 展开 N 字符

模板短语 (如 date = $Y-$MM-$DD) 不会d / da / dat 时显示, 避免污染前缀候选。

实用示例

打开 URL

cobd = $CC("打开百度", open("https://baidu.com"))
cogh = $CC("打开 GitHub", open("https://github.com"))

搜索剪贴板 / 历史词

由于触发码只能是英文字母, 命令直通车从剪贴板上次上屏文本取查询内容:

cobs = $CC("百度搜 · {clip()}",  search("baidu", clip()))
cogs = $CC("Google · {clip()}", search("google", clip()))
cozd = $CC("汉典 · {last()}",   open("https://www.zdic.net/hans/{url(last())}"))

典型用法: 先复制要搜的词 → 输入 cobs → 选中候选 → 浏览器打开搜索页。

配对符号 + 光标回中

cojk = $CC("「」", type("「」"), key.tap("Left"))
cojb = $CC("()",   type("()"),   key.tap("Left"))

输入 cojk → 选中后输出 「」, 紧接着自动按 Left 让光标停在中间。

删除当前行

codl = $CC("[删行]", key.seq("Home", "Shift+End", "Backspace"))

启动程序

cono   = $CC("打开记事本",      proc.run("notepad.exe"))
cocode = $CC("打开 VS Code 项目", proc.run("code.exe", "D:\\my\\project"))

加词到用户库

coac = $CC("加词 · {clip()}", dict.add(clip()))
coal = $CC("收藏 · {last()}", dict.add(last()))

输入 coac (剪贴板里是"清风输入法") → 候选显示"加词 · 清风输入法" → 选中后写入用户词库 (编码自动生成)。

重复上次输入

coll = $CC(last(), type(last()))

输入 coll → 候选显示上次上屏的词 → 选中后再次输出。

切换输入法状态

coen = $CC("切中英",     ime.toggle("cn-en"))
cofs = $CC("切全半角",   ime.toggle("fullshape"))
coly = $CC("切横纵候选", ime.toggle("layout"))
cocw = $CC("切候选窗",   ime.toggle("candwin"))
cost = $CC("切简繁",     ime.toggle("s2t"))
copm = $CC("切编码模式", ime.toggle("preedit"))
cotb = $CC("切工具栏",   ime.toggle("toolbar"))
cots = $CC("切主题",     ime.theme_cycle())
coss = $CC("打开设置",   setting.open(""))
cosw = $CC("设置(Web)",  setting.web(""))

以上命令均已内置于系统短语包,可直接使用。

切换方案 / 主题 / 配置项

copy = $CC("切到拼音", ime.schema("pinyin"))
cowb = $CC("切到五笔", ime.schema("wubi86"))
coms = $CC("微软主题", ime.theme("msime"))
codk = $CC("暗色模式", config.set("ui.theme.style", "dark"))
cotm = $CC("循环主题风格", config.toggle("ui.theme.style"))

字符组

zzbd = $AA("标点", "、。·ˉˇ¨〃々—~‖…")
zzsx = $AA("数学", "+-<=>±×÷∈∏∑")
zzhb = $AA("货币", "$¢£¥¤")

输入 zz → 看到"标点 / 数学 / 货币"3 条导航; 输入 zzbd → 看到 12 条标点字符。

计算剪贴板表达式

coca = $CC("={calc(clip())}", type(calc(clip())))

先把 1+2*3 复制到剪贴板, 然后输入 coca → 候选显示"=7" → 选中后输出 7

日期 / 时间快照

cody = $CC("{date(\"YYYY-MM-DD\")}",          type(date("YYYY-MM-DD")))
coym = $CC("{date(\"YYYY-MM-DD\", \"+7d\")}", type(date("YYYY-MM-DD", "+7d")))

限制与注意事项

数字键会触发选词

五笔 / 拼音模式下, 数字键 1-9 默认绑定为"选中第 N 候选"。这意味着触发码不能包含数字, 否则数字键会让候选立即上屏, 永远到不了 phrase 层查询。

# 错误 (1 会被选词逻辑吃掉)
co1 = $CC("打开百度", open("https://baidu.com"))

# 正确
cobd = $CC("打开百度", open("https://baidu.com"))

中文标点被键事件层拦截

中文标点 (如 《》 ) 在 key event 阶段就被转换成对应的中文符号, 不进入 phrase 层查询。因此不能用中文标点作为触发码。

# 错误 (《 永远到不了 phrase)
《 = $CC("《》", type("《》"), key.tap("Left"))

# 正确
cojk = $CC("「」", type("「」"), key.tap("Left"))

触发码只能是英文字母

作为中文输入法, 用户输入的 "编码 (code)" 只能包含 ASCII 字母 (五笔为 a-z, 拼音同), 不可能在编码中混入汉字。所以"在触发码后面跟一段查询词"这种用法 (例如 cobs清风输入法 直接搜"清风输入法") 不成立 —— 应改用 clip() / last() 等数据源。

模板变量需要 $$ 转义

如果短语 / 词库内容中需要字面 $ 字符, 必须用 $$:

# 错误: $M 会被替换为当前月份
text = "工资: $M"

# 正确
text = "工资: $$M"

部分函数尚未实现

下列函数当前是占位实现, 调用后返回原串或空字符串, 计划在未来版本补全:

  • sel() — 读取当前选区
  • t2s(s) / s2t(s) — 繁简转换
  • pinyin(s) — 汉字转拼音

命令直通车候选不污染历史

last() 返回的是"最近一次上屏的文本"。对于命令直通车候选:

  • type() 动作 (有文本上屏): 进入 last() 历史
  • 仅 effect 动作 (如 open / proc.run): 进入历史, 避免 display 文字污染

例如 cozd = $CC("汉典 · {last()}", open(...)) 选中后, 浏览器打开但不会让"汉典 · X"进入历史; 下次再用 cozd 仍然查询真正的上次上屏文本。

数组未展开时的候选行为 (nav)

输入 group 编码的前缀 (例如 zzbd 字符组下输入 zz / zzb), 候选区显示的是"导航条目" (文字是组名, 例如"标点"), 不是可上屏的字符。在 nav 候选高亮时:

  • 空格 / 数字键选中 → 替换输入为完整 group code (如 zzbd), 候选区展开为 N 个字符成员
  • 标点键 (顶字模式) → 标点被吞掉, 不上屏不出标点, 等用户先选 nav 进入展开
  • 以词定字键 (Tab 等) → 同上, 直接 Consumed

这一行为是为了避免上屏"组名+标点"这种无意义文本。

字符组成员展开顺序

$AA("标点", "、。·...") 中字符的顺序就是候选区展开的顺序 (从左到右)。同 code 多个 group 时, 每个 group 独立排序, 进入 group 后只看到该组的成员。

用户词库 cmdbar marker 仅精确码匹配

cmdbar marker ($CC / $CC1 / $AA / $SS) 写在用户词库中也能识别, 但仅精确码命中触发, 支持前缀导航 ($CC1 的前缀展示在用户词库下也仅精确码)。若需要前缀 nav 体验 (如 zz → "字符数组" 导航), 请把短语写到快捷短语词库 (PhraseLayer) — 该层支持完整的前缀 / 多 group 语义。

临时拼音模式下短语命令被屏蔽

进入临时拼音模式 (五笔方案下按 ` 等触发键、或在快捷输入 ; 之后输字母进入临时拼音子模式) 时, 不会匹配快捷短语 / 用户词库中的 cmdbar marker。例如临时拼音里输 zzbd 看到的是 "祖祖辈辈" 等拼音简拼候选, 而非"标点" / "字符数组" 短语 nav。

这是为了让临时拼音的输入流回归"纯拼音"语义, 避免短语码意外拦截。简拼 (zg → "中国") 仍然保留。

拼音分步确认 + 命令直通车

拼音逐字确认 (例如输 nihaorq 时先选"你好") 累积的已确认段, 在选中后续的 cmdbar 命令时连同命令一起上屏:

  • 选有文本的命令 (rq = $CC("日期", type(date("YYYY-MM-DD")))): 上屏 你好2026-05-19
  • 选纯副作用命令 (cobd = $CC("打开百度", open(...))): 上屏 你好, 然后异步执行打开百度

cmdbar 的 display 文本仍进入历史, 但分步段会进入 (它本身就是用户产出的文本)。

内置示例短语

系统短语包内置了一批以 co 开头的示例命令(打开网页 / 启动程序 / 加词 / 切换中英文·候选窗·简繁·工具栏 / 循环主题 / 打开 Web 版设置等),覆盖各类典型场景。用户可在 设置 → 词库 → 短语 中浏览。

完整设计文档见项目仓库 docs/design/2026-05-12-command-bar-design.md

编辑入口

打开 设置 → 词库 → 短语 → "+ 添加" / 选中一条 → "编辑":

  • 类型 下拉: 普通 / 命令·打开 / 命令·手动 / 数组
    • 普通: 单一文本框 (字面 / 模板)
    • 命令·打开: 表单式 (显示名 + URL/程序/文件子类 + 路径 + 参数 + 前缀展开)
    • 命令·手动: 自由写 $CC(...)$CC1(...)
    • 数组: 名称 + 字符列表 (合成 $AA(...))
  • 预览: 输入内容实时显示解析结果 (命令 / 字符组 / 模板 / 字面值 / 错误)
  • 权重: 0 ~ 10000, 默认 1000, 详见 权重系统
  • 连续添加: 添加场景下可勾选, 保存后保留对话框继续加

用户词库的"添加用户词条"对话框使用同样的表单, 额外提供编码自动生成 (拼音方案下根据词语生成拼音编码)。

相关参考

Released under the MIT License.