Commit Graph
36 Commits
Author SHA1 Message Date
yenharvey b6319013e8 feat: 候选右键菜单:置顶、降权、删除(#749)
macOS、Windows 右键候选(macOS 也可 ⌃ 点按)弹出菜单,菜单由青简自己画:
bamboo-slip 新增 PopupMenu 组件(与设置页下拉菜单同一套样式),
qingjian-render 的 render_menu 出位图,壳只给不抢焦点的弹出窗、管悬停与点击。

- 置顶:给当前输入码加一条比同码短语都高的自定义短语(封顶 999),可在设置里看到、改、删;取消置顶删掉它
- 降权:记进学习数据 user-demoted.tsv,每降一次往后挪一格,词库词也能降;可取消
- 删除:原来 Shift + 数字删候选的那套,挪进菜单;Shift + 数字删候选去掉,回到普通符号
- 菜单项与动作在平台层 candidate_menu,两个壳共用;Esc 只关菜单,敲键、候选窗重画或收起时关
- Linux 候选窗由 Fcitx 画,暂无此菜单
2026-10-22 14:39:00 +08:00
yenharvey a20a38acaf docs(user): 用户文档按用户要做的事重新分组
功能越加越多,原来按早期设置页搭的结构塞不下:几个大页(按键、拼音方案、主题)越写越长,同一功能散在几页。
现在分为开始使用、打字、学语言、个性化、AI 服务、各平台、隐私与帮助、进阶八组,一个功能只在一页讲全,别处一句话加链接。
配置键名、文件路径、文件格式只放进阶组,其他页只写「设置 → 某页 → 某项」,面向普通用户不出现实现词。
设置程序的 ⓘ 链接表、各 README、issue 模板与代码注释里指向旧页面的链接一并改到新地址。
2026-10-21 20:06:25 +08:00
yenharvey d06b75ff30 feat: 辅码方案化(词码规则、同一时间只用一套)并接上 macOS
- schemes/<id>/scheme.toml 写 type = "aux" 即辅码方案,与形码、双拼共用目录、id 规则与元信息;codes/ 导入的 .qj 照旧可用
- [words] 词码规则沿用 Rime encoder 写法:码表只收单字时按词长从各字的码拼出词码,表里写了的词仍用自己的码;AuxCodeLookup 因此返回 Cow
- 同一时间只用一套([aux_code] scheme,设置里是下拉框):几套叠着筛,同一个字母在不同方案里意思不同,筛不干净;没选过或选的没了用第一套没被老 disabled 关掉的
- 两个壳按 AuxCodeSources 装码表,轮询 codes/ 与 schemes/ 的文件快照,导入或改方案不用等配置变
- macOS 接上辅码:按键分流与 Windows 一致、Esc 只清码段、候选上显示码,包里带上笔画表与 CNS 署名
- CLI 的 --aux-table 也收方案目录
2026-10-20 14:17:34 +08:00
yenharvey 3ba586d867 feat: 自定义双拼方案,形码方案 scheme.toml 必填并可在设置里改规则
- Core 的双拼解码挪到 Layout:内置九套仍是编译期常量表,用户方案拼成同一个结构,走同一套解码;Layout::check 报写错的键与打不出来的音节(按全部两键组合实际解出哪些音节算)
- 用户双拼方案放在 schemes/<id>/scheme.toml,写 type = "shuangpin",可拿内置方案当底子按键改;配置里认不出的 scheme 写法能当 id 就是 Scheme::Custom,找不到按全拼
- SchemeSlot 取代 CodeSchemeSlot,两条轴一起装,直接收 &Config;CLI 的 --shuangpin 可给方案目录,回放按 id 认出用户双拼
- 形码方案的 scheme.toml 改为必填,形码与双拼共用 author / version / description / license 元信息
- 设置里单用形码时出现「满码唯一自动上屏」「顶字」开关,存进 [code.<id>]、盖过 scheme.toml(随包方案只读,换码表也不丢),只改规则不重读码表
- Linux 还没接方案目录,设置里不列自定义方案(support 表登记待实现)
2026-10-20 11:34:14 +08:00
yenharvey 84196a8e49 feat: 自定义形码方案,单用形码时顶字、满码唯一自动上屏、标点上屏与空码清除
形码侧从只有 86 五笔扩成方案:Core 的 CodeScheme 是码表加按键规则,平台层 code_schemes 负责找方案。
随包五笔挪成 assets/schemes/wubi86/(scheme.toml + table.tsv),与用户数据目录 schemes/<id>/ 下的方案同一种格式、同一套找法,代码里不再有内置特例。
配置收成 [general] code = "<id>"(off 为关),旧的 wubi = "wubi86" 读取时仍认。
按键规则只在单用形码时生效,混输下满码之后的字母可能是在接着打拼音。
满码长度取码表里最常见的编码长度:极点码表里有条写错的 5 码(TF卡 ttfhh),取最长会让顶字与满码上屏全部失效。
CodeSchemeSlot 在方案与码表文件都没变时不重读码表,配置热加载多半改的是别的设置。
CLI 的 --wubi 换成 --code(旧写法仍可用),收码表或方案目录,回放认任意形码方案键。
设置程序的「五笔」开关换成「形码」下拉;切回窗口与进「输入」页时重扫 schemes/。
bamboo-slip 的下拉框宽度改为最小宽度并可设最大宽度,值过长时截短补「…」,不再把箭头挤出框外。
2026-10-20 10:22:58 +08:00
yenharvey c97ff2b619 feat: 生词本:按天的时间线与词表,整句翻译后一并记下
设置新增「生词本」页,分「时间线」与「词表」两个视图,按学习语言分开
时间线:每次上屏有学习语言说法的中文记一条(vocab-log.tsv),大字的相遇次数、当天第一次见到的生词、连续输入天数、按小时的记忆色带,说法在上中文在下带时刻
整句(一次上屏的,与分几次打完、至少四个汉字的一句)在 macOS / Windows 开着云服务时攒批翻译后记进时间线,「云服务」页可单独关闭「生词本整句翻译」
词表:译词、中文、例句与次数,可筛选、排序、搜索、标认识、删除;之前只有英文的老记录用随包英→中释义补上中文
导出 CSV / Anki / 网页,清空连同时间线
user-vocab.tsv 在原七列后加认识、中文、例句三列,老文件照读;输入法与设置程序写前互相合并删除与「认识」
读音一列先只有日语假名,留给以后的音标;发音以后接系统朗读

Closes #570
2026-10-16 16:43:19 +08:00
Wenjie Zou ebc476a820 feat(linux): 完善云联想与选区翻译,适配 Ubuntu 22.04 的 Fcitx4 (#351) 2026-10-16 12:41:13 +08:00
toolsfox 9bb6b2a382 feat(learning): 学习数据时间衰减(牛顿冷却) (#654) 2026-10-16 09:51:47 +08:00
yenharvey 482dd65827 feat(learning): 输入统计按小时记,每次上屏当场追加
以前攒在内存里每分钟落一次盘,进程被杀或关机会丢最近一分钟;现在每次上屏往 usage-hourly.tsv 追加一行,最多丢正在写的半行,读时跳过。
文件里重复的时段多了或追加失败过才整理重写(原子写)。老的按天 usage.tsv 照读不写,降级回老版本两份不冲突。
2026-10-15 18:07:41 +08:00
yenharvey f8b1167434 chore: 合并 main 到 refactor/render-engine
- 菜单编号:macOS 设置 5、符号面板 6;Windows 符号面板 7、旧版设置 8
- Linux 打包带上设置程序与 hicolor 八档图标
- 用户文档里的设置指路改成新设置的页名,内容取 main 的
2026-10-15 15:20:10 +08:00
jacklaoz 584c8297fa fix(macos): 装完菜单里没有青简时先提示注销重登 (#626)
macOS 27 上 --register 与系统设置里的添加都只让输入模式半启用,注销重登后才正常,安装器、postinstall 与文档改成先提示重登。
bundle.sh 用完即删 target 与 pkg 暂存目录里的 .app 并从 LaunchServices 注销,免得同一 bundle id 登记两份。
2026-10-15 11:00:47 +08:00
LING 31f3da0c97 feat(windows): 整句候选显示云端译文 (#510)
本地整句候选旁异步显示一条学习语言译文,设置「云服务」页开关,缺省关;不加候选、不改顺序,空格仍上屏原首选。
翻译与组句联想分开请求、各自返回,清空输入时撤掉还没发出的请求。

Closes #452
Closes #32
2026-10-15 10:59:27 +08:00
yenharvey f325ddad78 feat(settings): 换掉旧设置程序,旧版留一个版本作回退
- macOS:设置程序作为独立 .app 装进 Qingjian.app/Contents/Applications,菜单「设置…」打开它,包里没有时退回旧版;原偏好设置改名「旧版设置…」
- Windows:qingjian-settings.exe 换成新程序(状态条齿轮、开始菜单「青简设置」),旧 WinUI 程序改名 qingjian-settings-legacy.exe,开始菜单「青简旧版设置」,互斥体与窗口标题分开以便同时开
- Linux:安装与预编译包带上 qingjian-settings 与应用菜单项
- 新程序:Windows 不弹控制台、嵌图标、只开一个;日志另写一份到输入法日志目录,按天留 7 天;随包数据按各平台安装布局找
- 测试 config_keys 离屏点遍每页控件,写了的键用输入法的 Config 读回核对;补上「英文模式也给候选」漏掉的 ⓘ
- ⓘ 点了打开官网文档对应的一段,测试核对锚点在 docs/user 里真有、行在那页上真有 ⓘ
- 用户文档按新的页重写设置一页,各处「偏好设置 → 通用」这类指路改成新页名;contributing「控件面原生」一条改为设置程序自绘
2026-10-12 10:07:26 +08:00
yenharvey 8a33dd6929 feat: 英文模式候选改成按应用白名单
Photoshop 画布上的 W / H / V 被英文组词吞掉;设计、3D、CAD、视频剪辑、游戏都靠单键快捷键,
黑名单列不完,英文补全又只在写成段文字的地方有用。
- [apps] english_candidates_on:缺省浏览器 / 聊天 / 办公 / 笔记,三平台各一份;["*"] 处处都给
- english_candidates_off 缺省改空,留作从白名单里排除;认不出应用时只有 "*" 给
- 偏好设置的勾选框改成「只在浏览器、聊天和文档类应用里给」:勾上写缺省白名单,去掉写 ["*"]
2026-10-10 11:03:21 +08:00
yenharvey c2b96c2977 Merge branch 'main' into feat/theme
冲突处理:
- ThemeMode 在本分支已改为 Appearance,main 新增的 import 随之去掉 ThemeMode
- Windows 候选窗口 sync_theme:保留 main 按显示器取 DPI 的逻辑,深浅读 appearance
- main 对内联 config 测试的改动(SwitchKeys::default())搬到 config/tests.rs
- macOS 设置项 tag 52 两边撞号:main 的 ShuangpinRawPreedit 保持 52,HorizontalGrid 改为 57
2026-10-09 12:23:09 +08:00
yenharvey 795a0c70d2 feat(update): 检查更新(只提示)与版本索引的 ed25519 签名
新 crate qingjian-update:读官网的 releases.json、验签名、按平台 / CPU / 渠道挑比当前新的版本,结果写 update.json;
[update] check / channel 配置;macOS 输入法菜单、Windows 任务栏「中 / 英」图标的右键菜单与两端「关于」页提示,
点开下载页,不下载不安装;-dev 本地包不检查(QINGJIAN_UPDATE_VERSION 可顶替版本号来测)。
发版侧 tools/release-sign 给索引签名,release.yml 没配 QINGJIAN_INDEX_SIGNING_KEY 时门禁失败。设计见 docs/design/update.md。

macOS 菜单里「有新版本」这一行必须放在普通条目那一组:放在最后一条分隔线之后时 IMK 每次按键都新建会话、打不了字
(对照构建逐个验过,见 update.md)。
2026-09-23 16:56:17 +08:00
yenharvey 464c2599cd fix(windows): 中英模式所有应用共用一份,切换键可多选并适配系统 Ctrl+Space
- 中英模式存在 Server、所有应用共用一份(与搜狗一致):用户在某个应用里切了用 ModeChanged 报上去,
  激活、线程得到焦点、轮询时用 SyncMode 取回跟上;悬浮状态条上点「中 / 英」直接改这一份。
  之前各应用各记一份,后台线程激活时报的模式会盖掉前台的,新打开的程序偶尔一打开就是英文。
- 只在前台窗口属于本进程时轮询:后台进程会一直以为自己在前台,它们来取模式会让悬浮条在切走输入法后
  又冒出来;真在前台的应用有时收不到「得到焦点」,启动后悬浮条要等打开设置程序才出现。
- 切换键改成勾选、可多选:单击 Shift(缺省)/ 单击 Ctrl / Ctrl+Alt+Space,配置写成列表,老配置的单个值照读,
  ctrl+space 转成 ctrl+alt+space。
- 系统的「输入法/非输入法切换」(缺省 Ctrl+Space)不进勾选项但照微软拼音适配:它翻的输入法开关
  关 = 英文、开 = 中文;我们切模式时把开关写成一致,按一下就切;开关一变作废被截走 Space 的那次「单击 Ctrl」。
- 会话号改用线程 id:TSF 的 client id 各进程都是同样那几个值,不同应用在 Server 那边撞成同一个会话。
- 协议版本保持 7:一个版本周期里只升一次。
- 任务栏点中 / 英触发的 compartment 回调里不再回写转换模式:在它自己的 OnChange 里写会报 0x8000FFFF。
2026-09-23 16:29:51 +08:00
yenharvey 69be71c710 Merge branch 'main' into feat/theme
main 这段时间的 24 个提交(辅码、智能 ABC、笔画码表、Linux 第一阶段、横排矩阵等)合进主题分支。

渲染器:主题分支已把手算坐标的 horizontal / vertical / top_line 换成场景树 + theme.json,main 加在旧文件上的功能按新结构重做:
- 辅码:候选词后面的 `[kf]`(模板 `word` 组件加 `code` 绑定,与译文同色、同一条基线)与拼音行里带下划线的码段(PreeditStyle::AuxCode),加 aux-code 两个快照场景,原有基准图未变。
- 横排矩阵:main 的 renderer/matrix.rs 建在旧渲染器上,随旧渲染器删掉,场景树这边还没有矩阵窗口;移植之前 mac 壳只在系统绘制下展开矩阵(Host::grid_keys 多一个 !uses_bitmap() 条件)。见 docs/notes/crate-notes.md。

其余:ThemeMode 已改名 Appearance,main 新进来的 Linux Server 与 Windows 的辅码显示开关跟着改;mac 设置项编号 51 撞了,HorizontalGrid 改 52;Windows 热加载里主题目录戳与 codes/ 目录快照两段并存。
2026-09-21 19:16:40 +08:00
Shiyuhai2023 f3ad110958 feat(core): 辅码:拼音后补码筛候选(码段状态机 / 码表 / 候选过滤 + CLI) (#51)
拼音打完整后按触发键进辅码态,补码逐键筛候选;码表是词 → 码的 .qj(AuxCodeTable),缺省关闭。
只含 Core 与 CLI,Windows 壳与随包笔画码表在 PR #152 / #153。
2026-09-20 09:19:46 +08:00
yenharvey be87aa9d39 feat(render): 用户主题目录,保存即热加载
ThemeLibrary 合并内置主题与 <用户数据目录>/themes/<id>/theme.json:目录名须等于 meta.id,不能与内置主题重名或用外观词,读不进来的跳过并记警告
热加载按目录戳(各 theme.json 的修改时间与大小):mac 在激活期间每秒的配置检查里 refresh,Windows Server 在热加载轮询里比戳后重发设置让 UI 线程重读
mac 偏好设置与 Windows 设置程序的主题下拉列出内置 + 用户主题;platform 加 dirs::themes_dir,mac 加 paths::themes_dir
用户文档新增「设置 → 主题」,数据与日志页加 themes/
2026-09-18 18:16:14 +08:00
yenharvey 8bf0afd863 docs: 用户文档、设计记录与工程笔记跟上 Shift 字母进组句与中英切换键 (#96) 2026-09-18 11:15:21 +08:00
YIMING LI 8e16d0fc82 fix(windows): 拼音显示位置生效、DLL 自拉 Server、简拼联想只问整句 (#122)
拼音显示位置的设置随帧下发给 DLL;Server 没起来时 DLL 在 Medium 完整性级别下自己拉起;安装完成页加提示;简拼下云联想只请求整句。
2026-09-18 00:04:22 +08:00
ym lee b8af4c3ef4 文档:同步用户文档、设计记录与工程笔记
按键与快捷键、英文模式、安装、偏好设置:中英混杂词、Shift 大写、中英切换键(含 Ctrl+Space 与关闭内置英文模式)、重启应用的说明。
设计记录:architecture.md / candidate-ui.md 补 Shift 大写、切换键与 Ctrl+Space 的系统热键占用、msctf 激活后写回转换模式、- = 自己插入;
工程记录 crate-notes.md 补词库源文件、平台配置项与 TSF 设置读取。
计划:todo 标出 - = 非组句行为的处置,roadmap 记下中英切换键可配置(#81)。故障排查补「装了新版行为没变」「Ctrl+Space 没反应」两条。
2026-09-17 22:26:59 +08:00
yenharvey a0c918092e feat(macos): 偏好设置新增「打包日志到桌面」,与 Windows 对齐
日志目录加 config.toml 用系统 zip 打成桌面上的 qingjian-logs-<日期>.zip 并在访达里选中;关于页与高级页各一个按钮。
2026-09-17 11:06:30 +08:00
yenharvey 4739d7d3e9 feat(core): 「学习输入习惯」开关,两端「高级」页可关
[general] learning 缺省开。关掉后不再记词频、用户词、个人 n-gram 与敲错表,已学的仍参与排序;
输入日志有自己的开关,不受影响。MutedLearner 从一个 muted 拆成 private / disabled 两个标志,
私密输入与关闭学习互相独立;Engine::set_learning 两端热加载即生效。
2026-09-16 11:39:34 +08:00
yenharvey bf17b818c8 feat(windows): 三进程日志统一到 %LOCALAPPDATA%\Qingjian\logs,设置程序加文件日志与「打包日志到桌面」
- 新增 qingjian_platform::dirs(用户目录 / 配置路径 / 日志目录)与 qingjian_platform::logs::daily
  (按天分文件的命名与清理),Server、TSF DLL、设置程序三处共用;Server 日志前缀 qingjian-server → server,
  AppContainer 的写权限改授到 logs 目录。
- 设置程序有了自己的文件日志(GUI 子系统没有控制台,之前 eprintln 的字全丢),启动失败弹框提示;
  「关于」「高级」页加「打包日志到桌面」:日志目录 + config.toml 打成 zip 放桌面并选中,反馈问题发一个附件。
- 用户文档、README、architecture 与 CHANGELOG 同步日志路径。
2026-09-16 10:59:04 +08:00
yenharvey 390eb24ec7 文档:软件管理等安全软件反注入拦第三方输入法,记入已知问题
腾讯软件管理 / 电脑管家的进程自我保护(QMAntiInject / RefuseInject)会阻止
第三方输入法的 TIP DLL 加载进其进程,青简与其他第三方输入法均无法在其中输入,
仅系统自带的微软拼音例外。输入法一侧无法修复,记入「遇到问题 → 常见情况」。
2026-09-15 23:54:07 +08:00
yenharvey e4cdb97b66 文档:Windows 安装目录保持默认(uiAccess 只在 %ProgramFiles% 生效);两平台日志路径与文件名
候选窗口盖过开始菜单 / 任务栏搜索靠 Server 的 uiAccess,系统只对装在 %ProgramFiles% 里的签名程序启用,
装到别的盘会静默失效、表现为候选窗被系统界面盖住。反馈页与数据页补上 macOS / Windows 各自的日志目录和文件名。
2026-09-15 23:38:49 +08:00
BROX_Lighters. 4984832f31 Core:增加会话状态隔离并修复私密词汇记录 (#89)
新增 EngineSession / swap_session / discard_input,让多个输入上下文共用一个 Engine 而各存组句、历史与学习链;私密输入不再写入词汇记录(曝光与提交两个入口都跳过)。
2026-09-15 23:20:09 +08:00
yenharvey 8eee4fad54 仓库:README 只留项目介绍,加官网 / 下载 / 文档 / QQ 群链接
安装、基本用法、隐私正文挪到官网文档(本来就有对应页),隐私留三行摘要;随包数据许可清单挪到 docs/design/landscape.md,
README 留 GPL 与商标一句。docs/user/help/feedback.md 加 QQ 群,「装后没出现」那条补上重启后仍没有就提 issue。
2026-09-14 10:09:12 +08:00
yenharvey bcb189f4b5 仓库:issue 表单模板(报告问题 / 功能建议 / 使用疑问);反馈文档补 GitHub Issues 入口 2026-09-13 20:00:05 +08:00
yenharvey 5aff7ae03f Windows 密码框按 TSF 规范:KEYBOARD_DISABLED 整键放行,私密输入范围让 Engine 不学不记不发云端
查微软文档 / SampleIME / Chromium 源码后定:密码框的机制不是 IS_PASSWORD(文档明说它只是标注、密码框应禁用文本服务),
而是上下文 compartment GUID_COMPARTMENT_KEYBOARD_DISABLED;Chromium 给密码框设的正是它,输入范围报 IS_PRIVATE(含义「别学」)。

- DLL:com/context.rs 查 KEYBOARD_DISABLED / EMPTYCONTEXT,OnTestKeyDown / OnKeyDown / 保留键没在组句时先查,非零整键放行不组句
  (与 macOS Secure Input 同义);起组句那次编辑会话里 input_context 判私密(IS_PRIVATE / 密码 / PIN)再读前文,
  私密不读前文并随 ClientMessage::Privacy 报给 Server(客户端只在变化时发);协议版本 4
- Server:SessionInfo.private,焦点切换时重设,Router::is_private
- Core:Engine::set_private——学习器与输入日志各套一层 Muted 包装(写吞掉、读照常,排序不变),
  联想 / 翻译 / 释义兜底在私密时不发;tests/privacy.rs 两个用例,engine_loop 加 privacy_follows_the_focused_session
- box 实测:Edge 密码框放行不组句;Edge InPrivate 网页文本框报 IS_SEARCH 不报 IS_PRIVATE,私密路径只靠单测,用户文档措辞按此收窄
2026-09-12 17:08:06 +08:00
yenharvey 3b085d6186 输入日志 v1:日志当评测基础设施,新增 session / retype / passthrough / prediction / break 事件与 rescored / app / pages / ms 字段
- docs/plan/model-eval.md:每个模型假设先写指标、字段、基线;日志格式说明
- Core:退格快照记重打(组句内与跨上屏)、直通与全角标点攒成一条、联想记请求时作用域、上文断开带应用、
  会话行记版本与模型开关;空的原样上屏不再记(旧日志一半是它);候选记一页 9 条
- 两端壳:每键更新应用标识、翻页计数、启动与模型上线记会话行、组句外回车进文本流
- 回放:旧空行仍断链只不计数;报告加重打、联想接受率、隐式信号、重排 / 未重排两组命中
- 用户文档与 todo / roadmap 同步
2026-09-12 00:47:01 +08:00
yenharvey a07685a781 Windows DLL 日志按天分文件、只留 7 天,与 Server 一致
原来单文件 tsf.log 一直追加,每个键一行、所有宿主进程共写,会无限长。改成
tsf.<YYYY-MM-DD>.log,每个进程首次写与跨天时清掉 7 天前的自家日志;仍是每行开文件追加。
2026-09-11 23:58:19 +08:00
yenharvey 4c7888bd47 用户文档:改成说明书体,补齐 Windows,新增按键与快捷键总表
- 全部 16 页按说明书体重写:陈述句、不用口语助词、不拟人,术语固定;事实不变
- 安装 / 卸载 / 数据与日志 / 遇到问题 / 偏好设置补齐 Windows 一侧;首页不再写只有 macOS 版
- 新增 getting-started/keys.md:切换、输入拼音、英文模式、译词与删候选、云联想、前缀键六张表,两个平台并列
- 按键统一为键帽写法(Space / Enter / Backspace / ← → ↑ ↓),macOS 修饰键用符号、Windows 用单词
- 已知问题:Windows 测试版无签名,候选窗口在任务栏搜索、设置等系统应用中可能被遮挡
- README 写法约定同步
2026-09-11 20:12:45 +08:00
yenharvey 7a2ccc7691 v0.1.0:首个版本
青简(Qingjian):用 Rust 写的拼音输入法,候选词旁多一条正在学的那门语言的译词,一次只学一种。
核心引擎平台无关(crates/),macOS 输入法(apps/macos)已可用,CLI 测试工具(apps/cli),
产品数据生成工具(tools/),设计文档、计划与用户文档在 docs/,发版流程见 docs/notes/release.md。
2026-09-07 19:17:46 +08:00