yenharvey
9c1e856305
feat: 组句中可切到只列单字(Windows Ctrl + D,安卓展开面板「单字」)
...
之前候选里单字、词、整句、emoji、英文混在一起,第一页找不到想要的字时只能往后翻页找单字。
现在组句中可以切到单字模式,候选只留单字,再切一次恢复。
- 只管这一段组句:分几次选字时剩下的拼音接着只出单字;上屏完、清空或删空就回到正常候选,不会忘了切回。
- 表达式、问字这类本来没有单字的输入不筛,候选窗不会变空。
- Windows:`[shortcut] single_chars`,缺省 Ctrl + D,设置程序「快捷键」页可改可关。只在打字时拿走这个组合,
没在打字时应用照常收到(书签、复制行不受影响);跟翻译、AI、剪贴板、简繁、全半角或译词键撞了时不用。
- 安卓:候选展开面板顶上加「全部 / 单字」,收起面板回到全部。
- macOS、Linux 在设置程序的平台表里登记为待实现。
取舍:做成一段组句内的状态,不做跨组句的常驻模式,免得忘了切回、以为词库坏了;不改排序,不开单字模式时候选与之前完全一样。
测试:Windows 记事本里 nihao 按 Ctrl + D 只剩单字、再按恢复、选字后剩余拼音仍是单字、没在打字时 Ctrl + D 照常给应用;安卓真机展开面板切「单字 / 全部」与收起;Core、Server、配置与设置程序有单元测试。
Closes #848
2026-11-06 20:18:19 +08:00
yenharvey
af9d3def2d
fix(core): 简拼第一页就有单字,全拼选过的词简拼也排在前面
...
之前打简拼时:ss 读得出几万个两字词,排序前按结构与词频预选会把首字母的单字全部砍掉,前 500 条里一个单字都没有;
其余的词一直排到五十多页之后单字才出来。用全拼选过的词,打它的简拼不算选过;
低主词库一档的词(知意词表里的 屎山)即使在 ss 下选过几次,也排在几千个主词库两字词后面被截掉。
同一个词连打几遍(屎山 屎山)还会被合成新词 屎山屎山。
现在:
- 多音节输入的首音节单字单独排、单独留 100 个(FIRST_SYLLABLE_CHARS_KEPT),简拼也是几个词之后就是单字。
- 单字之前的词封顶 30 个(WORDS_BEFORE_ALL_SINGLE_CHARS),再多的排到全部单字之后。按输入日志定:
冻结日志与一份本机日志共一万四千条多音节选词,没有一条选在第 30 位以后。
- 这串键下选过的词不进预选,并和主词库的词一起比选择次数。
- 全拼选一个多音节词时,选择按简拼另记一份(键 ^ss),下次打简拼排在没选过的词前面;
排在真在这串键下选过的词后面,判断中英文谁在前也不看它。
- 前后两个相同的词不自动合成。
取舍:简拼另记的选择和真选择分开,是因为混在一起时冻结回放里 cd / kl / qq 的英文被全拼选过的
才对 / 看来 / 全球 挤到第二。仍有少量回退:长输入里单字偶尔后挪一两位(woshishi 的 我 2 → 5)。
测试:冻结回放三组(无模型 / 知意 / 通变)词首选 8203 → 8199、8301 → 8300、8188 → 8184,整句与英文首选不变,
知意整句平均名次 2.11 → 2.35;开发集、回归集不变。本机学习数据副本加知意词表与通变模型实测 ss 首选 屎山、cd 首选英文 cd。
2026-11-06 15:57:16 +08:00
yenharvey
fe883bb7c4
fix(core): 记住的整句用简拼打时排在生成的整句前面
...
之前记住的整句或自造词要在当前这串键下选过,才排到整句前面:全拼选出的 晓铭去了学校,
开着通变时打简拼 xmqlxx,排在生成的 下面请来学习、下面全力学习 后面(第 3 位)。
现在词级排第一、盖住整段的用户词排在词图与生成的整句前面,除非排第一的那条整句在这串键下选得更多;
比较的是最终排第一的整句,生成的整句也算在内。
取舍:只对用户词这样。词库里的词仍由上下文决定整句和词谁在前,冻结回放里同一串键这次要词还是要整句常随上下文变。
测试:冻结回放三组(无模型 / 知意 / 通变)、开发集、回归集与改前完全一致;CLI 开通变模型逐字选出 晓铭去了学校 后,
xmqlxx 与全拼首选都是这句,shishan / ss 首选都是 屎山。
2026-11-06 13:38:34 +08:00
yenharvey
8b15c02d15
feat(core): 分几次选完的整句也记住,下次全拼与简拼直接出
...
之前一段拼音分几次选完时,合起来超过 4 个字就不记整段的答案:逐字选出「晓铭去了学校」后,
下次全拼靠词和个人搭配还能拼回来,整句简拼 xmqlxx 却排在第 155 位。
现在合起来不超过 20 个字(BUFFER_PHRASE_MAX_CHARS)的都记成用户词,按用户词的规则
下次同样的全拼或整句简拼直接排第一,只打前半句时也会作为补全出现。前后两个词自动合成的仍限 4 个字。
取舍:整句和自造词放在一起,设置里的自造词列表会列出这些句子,长按候选同样可以删除;
再长的多半是一大段话,一字不差再打一遍的机会小,不记。
测试:冻结回放三组(无模型 / 知意 / 通变)、开发集、回归集与改前完全一致。
CLI 实测 xiaomingqulexuexiao 逐字选出 晓铭去了学校 一次后,全拼与 xmqlxx 首选都是这句。
2026-11-06 11:17:41 +08:00
yenharvey
e52eb3f487
feat(core): 逐字选一次就造词,下次整段与简拼都排第一
...
之前同一段拼音逐字选(shishan 先选 屎 再选 山)要选两次才造词;造出来的词在整段输入时排在整句「是山」后面,
用简拼 ss 时按词频预选几乎沉底(第 486 位),要再选一两次才靠前。
现在同一段拼音逐字选一次就造词,并记一次选择;分两段打的仍要三次,免得 了我 这类虚词接续成词。
盖住整段、不靠拆开音节读出的用户词(自造词、接受过的云端词)weight 至少 1,预选不会砍掉;
其中按选过次数取头 5 个(USER_WORDS_BEFORE_SINGLES)当作在这串键下选过,不占词的名额、排在没选过的词前面,
其余照常排,简拼能对上十几个自造词时单字也不被挤后。这串键下选过的用户词排在整句前面,除非整句选得更多。
取舍:选错造出的词只在敲同样的音时出现,可以删掉。整句让位只对用户词:
试过对词库里选过的词也这样,冻结回放整句首选少十几条(shiyong 选过 使用、这次要 是用),没有采用。
测试:冻结回放三组(无模型 / 知意 / 通变)词首选不变,整句首选 2769 → 2770、2661 不变、2705 → 2706;
开发集、回归集不变。CLI 实测 shishan 逐字选一次后,shishan / ss / shis 首选都是 屎山。
2026-11-06 10:22:01 +08:00
yenharvey
ad51a4e059
fix(core): 读音对不上的拆读候选排到首音节单字之后
...
之前输入能读成完整音节时(nihao、shishui),另一种切法把完整音节拆成「声母简拼 + 后面的音节」
(ni h… ao、shi s… hui),简拼按声母通配,捞出 你会 你回 霓虹、食肆 失散 这类几十条读音对不上的词。
它们排在首音节第 9 个单字之后、其余单字之前,数量不限,单字被挤到好几页之后。
现在这类拆读只留读音与敲的同样长的开头只差一个字母的,至多 3 条(SPLIT_READINGS_BEFORE_SINGLES),
当敲错音的兜底(nishui 的 你说、duizhao 的 对着);其余排到首音节全部单字之后。
没有词的读音正好是敲的音节时(wodei 的 我的)拆读照旧按词排,切分器不动(xian 的 西安、kf 的 咖啡 不受影响)。
取舍:靠拆读兜底、读音差两个字母以上的敲错会更靠后(anzhao 的 按着 第 25 → 193 位、faban 的 发布 20 → 67)。
edit_distance 从上屏重打挪到 correction,两处共用。
测试:冻结回放三组(无模型 / 知意 / 通变)词与整句首选条数不变,词平均名次 1.45 → 1.48、1.43 → 1.49、1.48 → 1.51,
整句平均名次 1.57 → 1.49、2.05 → 2.11、1.64 → 1.56;开发集、回归集不变。CLI 查 shishui:史 第 13 位、食肆 第 292 位。
Closes #854
2026-11-05 20:00:40 +08:00
yenharvey
aa3ee8c545
feat(android): 上屏后联想下一个词
...
之前安卓选完词,候选条就空了,接着打下一个词要从头敲拼音(#861)。
- 中文词上屏、组句结束后,候选条接着给可能跟在后面的词,最多 8 个;点了直接上屏,再给下一批,可以一路点下去
- 先列个人 n-gram 里用户在这个词后面接过的,再补随包二元语言模型里的常见接续;只给 1–4 个字的汉字词
- 全在本机:二元模型按前词分组,取后继只排前 N 个,常见词也在 0.2 ms 内
- 点过的联想词照常记词频与转移,推进上文;输入日志与统计的来源记为 follow_up,不算选词、不计键数
- 只在候选条上点选:空格、回车、数字、标点照常交给应用,接着打字、挪光标、删字就收起,删除键不先收联想
- 「设置 → 输入 → 上屏后联想」可关,缺省开
取舍:桌面端不做,数字键选词会和联想冲突。三元模型没实现取后继,安卓也不用它。
Closes #861
测试:真机(小米 14 Pro)支付宝淘宝闪购搜索框打 women 空格出 的 都 一起…,点 一起 接着出 去 加油 吃…,删除键照常删字;Core、语言模型、Android 会话加了测试
2026-11-05 18:19:23 +08:00
yenharvey
4f85f36e66
docs: 主题列表补上墨岩与玻璃,crate-notes 理顺 apps/macos 一节
2026-11-05 17:38:12 +08:00
Hanson
b079e02e01
feat(macos): 新增回车优先上屏译词开关 ( #899 )
...
组句时回车上屏高亮候选的第一条非中文译词,空格仍上屏中文;缺省关闭,配置键 [shortcut] enter_translation。
2026-11-05 17:18:20 +08:00
yenharvey
0cacc9ecaf
fix(tools): 英文词表同编码优先全小写写法
...
之前同一文件内同编码先到先得,数据包把大写写法排在小写前面,约 300 个常用写法出成缩写或专名:
or 出 OR、may 出 May、brown 出 Brown、god 出 God、单字母 b 出 B。
- 同一文件内同编码优先全小写;多于一个字母且常见度级别严格更常见的大写写法才留(Java、HTML)
- 展示写法补充表加 I、China、Japan、Shanghai 等普通词义很少用的专名
取舍:Google、Amazon 这类两种写法级别相同的出小写,要专名写法的再进补充表。
词表在产品数据里,用户要等下一版数据(data-v10)才拿到。
测试:dict-convert 加测试;本地重新生成 english.tsv,CLI 英文模式 or、may 首选是小写
2026-11-05 16:41:29 +08:00
yenharvey
7e76aba542
feat: 九宫格点拼音行挪光标,按住拼音行拖动挪光标
...
之前点拼音行挪光标(#881)只支持全拼与双拼,九宫格点了拼音行没有反应,只能用左栏选音节;
拼音行能点的范围也只有字的高度(十几 dp),不容易点中。
- 九宫格:读出的拼音一个字母对一个键,点在第几个字母后就停在第几个键后,选定的音节也一样;
接着打的数字插在光标处,候选只按光标前的键给
- 挪光标时记下挪之前拼音行的读法:光标前的候选仍按它排、光标后的键仍按它显示
(ni'hao 点在 ni 后,前面还是 ni、后面还是 hao,不换成单独查时的 mi、gao);只挪光标时一直用最早那份
- 光标前是选定的音节时,退格先退回成数字(同末尾);在中间删键时记着的读法跟着删,前后两段读法不变
- 光标在中间时在拼音列选音节只改光标前的键,光标后的原样留着
- Android 候选条:按住拼音行左右拖,光标跟着手指一格一格挪,每过一格轻震一下;候选行以上整条都能点
- 按在拼音行上不再弹候选的译词气泡(长按与拖动冲突:长按一触发就收不到拖动)
取舍:没做放大镜。拼音行在输入法窗口最上沿,放大镜画在手指上方会出窗口,画在下方会被手指挡住;
改为拖动时光标在拼音行上跟着走、每格震动。
测试:真机(小米,MIUI)九宫格打 64426(ni'hao):点 ni 后光标停在 ni|hao、首选 你;按住拼音行左右拖到开头再拖回来,
读法不变;左栏选 ni 后点在 ni 后按两次退格,先退回成数字、再删一个键,显示 ni|hao → n|hao;Core 加了 6 个测试
2026-11-05 15:05:18 +08:00
yenharvey
31aa4abe5e
refactor(android): 游戏键盘与云端服务配置从输入法服务里拆出
...
之前 QingjianInputMethodService 有 820 行,超过单文件 800 行的上限;游戏键盘的判断、浮层与按钮,
以及云联想、释义兜底、快捷翻译、语音识别的配置下发都写在服务里。
- GameMode:哪个应用用游戏键盘、建浮层、触摸区、拖动栏按钮与横屏应用登记;服务经 GameMode.Host 提供包名、写设置与重建键盘
- CloudServices:云端与语音识别配置交给引擎,配置页改了跟着换(与剪贴板的局域网同步无关)
- 服务里「写设置时不重建键盘」统一成 writeSettings,服务现在 726 行
不改行为;拖动栏「换回普通键盘」重建前也先收起面板,与功能面板里的开关一致。
测试:真机(小米,MIUI)试打框弹键盘正常;浏览器里功能面板开、关游戏键盘,设置里的应用列表随之增删、勾选状态正确;横屏浮层没在游戏里验
2026-11-05 13:59:39 +08:00
yenharvey
f2f430d47f
fix(android): 按住删除键连删时往上偏不再触发上划清空
...
之前按住删除键连删的过程中,手指只要往上偏过上滑距离,抬手就会清掉光标前的全部文字。
现在连删一开始(按下 400 ms 后),这一笔就不再算上划清空,只有按下后、连删前往上划才清空。
测试:真机按住删除键 0.7 秒后上移,只连删、不清空,候选条不出「撤销」。
2026-11-05 12:44:34 +08:00
yenharvey
71d60c38b3
feat(android): 九宫格已选音节加下划线、退格整段退回,删除键上划清空可撤销
...
之前九宫格在拼音列选定的音节与没定的看起来一样;退格把选定的音节一个字母一个字母地拆,退回成数字后还会换成默认读法(ni 变成 mi)。之前也没有一次删掉已上屏文字的办法,上屏联系人名字后按删除会连名字一起删,按重输不起作用。
- 九宫格:拼音行上选定的音节画下划线(渲染器新增 `PreeditStyle::Pinned`)
- 九宫格退格:先撤回已选的字,末尾是选定的音节就取消选定、整个退回成按键,可以重选,之后再逐个删键;删完它后面的键时自动接的分隔符一起去掉
- 退回成按键后,候选与拼音行仍按用户选过的写法排,`64` 还读 ni;打了新键就不再偏向
- 在拼音列选音节不再清掉前面选好还没上屏的词
- 删除键上划(「设置 → 键盘 → 手势 → 上划删除键清空」,缺省开)删掉光标前的全部文字,最多 5000 字;候选条给「撤销」,点了原样放回,包括按下那一下删掉的字;打拼音时上划只清拼音
- 候选条上放着联系人的电话邮箱或「撤销」时,删除键、重输键的第一下只收起它们,不删已上屏的字
测试:Core、会话层单元测试;真机(Android 16)九宫格 64426 选 ni、hao 后逐次退格;上划清空后撤销;上屏联系人后按重输、删除只收起号码。
2026-11-05 12:37:19 +08:00
yenharvey
d26e404abb
feat(android): 通讯录里的名字进候选,上屏后接着给电话、邮箱
...
之前只能靠导入词库或自定义短语打人名,Android 读不了系统通讯录。
- 「设置 → 词库 → 通讯录」打开时才申请读取联系人的权限,缺省关;Kotlin 在后台读名字、电话、邮箱,整份交给会话,通讯录变了自动重读
- Core 把 2–6 个汉字的名字收成一张小词库并进查词,全拼、简拼、双拼、九宫格都能打;整段对得上的名字排在第一页第二位,不压过原本的首选;与词库词重名时只出一个候选
- 名字读音先看多音字姓(曾、单、解、尉迟……),再看整词在词库里的读音,否则逐字取常见读音
- 候选右上角画人头,由壳画,所有主题都有
- 上屏名字后候选条接着给这个人的电话、邮箱(可单独关),点了才上屏;接着打字、按空格或光标前不再是这个名字就收起,空格、回车的含义不变
- 名字和号码只在内存里:上屏不记学习、不写输入日志,云联想请求里去掉名字,关掉开关即清掉
- 只给「仅在使用中允许」时 MIUI 在输入法后台启动那次返回空结果,读到零个时在键盘弹出时重读
测试:Core 与会话层单元测试;真机(Android 16,MIUI)九宫格 zengxiaoxian 出「曾小贤」排第二带人头,上屏后给出号码与邮箱,点号码上屏、按空格收起;在系统设置的搜索框里同样能打出。
Closes #876
2026-11-05 11:37:35 +08:00
yenharvey
c97ad80558
fix(android): 候选条里的 emoji 只画一份
...
- 渲染器能画出彩色 emoji 的系统上(报在 Android 17),位图里的 emoji 和壳用 Canvas 补画的那份上下错开,看起来像重影
- 位图里 emoji 候选改成全角空格占位,点击区域和宽度不变,彩色 emoji 只由壳画一次
Closes #902
2026-11-05 10:26:43 +08:00
yenharvey
ec1bb853a9
feat(android): 上滑按扇形判定、可选长按出大写,点拼音行挪光标
...
- 上滑只看方向不看列:离开按下点后一路在往上约 50° 的扇形里、往上过 18dp 就算,出的总是按下的键;中途偏出扇形作废,交给滑行或点按
- 手指一进扇形就撤掉等着的长按:慢慢斜着划时长按先弹气泡、手指再一歪就选上左边的大写,这是误触大写的来由
- 新设置「长按出大写」(缺省关):长按不滑抬手出大写;上滑仍是角标,两条手势各管各的,不随状态换含义
- 点拼音行挪光标:渲染器给出拼音行各字之间的位置(PreeditHit),Core 的 move_cursor_to_marked 换回缓冲区光标,全拼按字母、双拼按音节;纠错、辅码、注音、九宫格对不上就不挪
- 光标在开头时退格先挪到末尾再删:屏幕键盘没有方向键,不然退格会卡住
Closes #881
Closes #882
2026-11-04 20:33:39 +08:00
yenharvey
279ef4fb6e
fix(render): Windows 加载 Segoe UI Symbol,➤ 这类符号不再画成方块
...
- 自绘的设置页、候选窗、符号面板只加载固定的字体清单;➤(U+27A4)这类装饰符号雅黑、Segoe UI、游ゴシック、宋体扩展都没有,系统里只有 seguisym.ttf 有,不在清单里就成了方块
- 加在汉字与扩展区回退之后;测试机上新旧清单各出一遍 Windows 快照,图片逐张相同,只多了指纹里的这一行
Closes #856
2026-11-04 20:22:02 +08:00
yenharvey
f121eb6a69
feat: Android 日志落盘并能打包发送,各端日志包附系统信息
...
反馈问题时拿不到日志:Android 的日志只进 logcat,用户不接电脑拿不出来;PC 的日志包里没有系统版本,没法排查。
Android:tracing 同时写 files/logs/ime.<日期>.log(按天、留 7 天,不经后台线程,没接住的异常记完再退),Kotlin 经 AppLog 写同一份;
应用一起来补记上回之后的进程退出原因(崩溃、ANR、被系统清理),输入法记弹出、收起、onEvaluateInputViewShown 不显示的原因。
文件缺省只记 info,开了「详细日志」才记 debug(会带打的字),开关存在单独的 prefs,免得触发键盘重建。
「数据 → 日志 → 打包日志」:发送给…(系统分享,QQ / 微信 / 邮件)排第一,手机上存下来的文件多数人找不到;也能存到手机。
包里是日志、设置清单(抹掉像密钥的项)与 device.txt(机型、系统、省电限制与待机分组、已启用输入法、实体键盘、随包数据清单),
每项单独取,读不到写 unknown,不让整包失败。
PC:打包到桌面时多一份 system.txt(版本、系统与 build 号、架构、区域,Windows 的 DPI,macOS 的机型,Linux 的发行版、桌面、会话与输入法框架)。
真机(小米 Android 16)验过打包、发送与存到手机;PC 只在 Windows 上验过 system.txt,macOS 与 Linux 分支没验。
有助于定位 #891(键盘有时候弹不出来),本身不修它。
Refs #891
2026-11-04 19:10:15 +08:00
yenharvey
8501c96cf0
fix(android): 类别为 0 但带文本标志的输入框照常组句,抖音直播间 26 键能打汉字
...
抖音直播间的输入框报 inputType=0x20000(类别 0,只有多行标志),原来非文本类别一律直输,字母原样上屏。
只有 inputType 整个是 0(终端一类要原始按键的)才直输;数字、电话、日期照旧。
九键不看这个判断,所以之前九键正常。真机在抖音直播间验过 26 键出组字串与候选。
Closes #867
2026-11-04 19:10:14 +08:00
yenharvey
8d25a52e87
feat(core): 打「度」时候选后面跟 °
...
- 符号表加「度 → °」,与「摄氏度 → ℃」一致,搜狗、清风也这样出
- 单字词原先一律不收(上、左、角一打就跟符号太吵),改成测试里的白名单:只收单字本身就是这个符号读法的
Closes #900
2026-11-04 17:49:43 +08:00
yenharvey
b105b11b1f
fix(core): 长拼音时首音节的第一个单字保底在第一页
...
arrange 只给词限了 6 个名额,整句(3 条)与词配的 emoji 后插进来不算名额,
shiyanshiqingfanghaoxiangbaozhuang 的 是 排到第 12 位(#769 剩下的缺口,PR 790 碰到的就是这个)。
知意重排、整句截到 3 条之后再看一遍:第一个单字在第 9 位之后就把单字前离它最近的词连同配的 emoji 挪到单字段后面;
整句、英文与这个输入下选过的词不动,辅码筛词时不挪(顺序按码的匹配程度排过)。放在截整句之前数会看到 16 条整句、把词全挪走。
矩阵(无模型 / 知意 / 通变)开发集首选逐句不变、回放首选数不变;回归集 #769 是 / 时 进第一页。
2026-11-04 17:08:29 +08:00
yenharvey
61ca4b4150
feat: 符号面板加「翻译」组,删掉 Windows 的整句候选翻译
...
- 整句候选翻译译的是猜出来的候选,猜错就白发;改成用户在面板的框里自己打一句、停键后再译,整句只发确认过的内容
- 翻译组排在最前,每种目标语言算一个分类([ ] 换),打拼音时按 ↑ 直接落在这组;没在打字时 [shortcut] translate_panel(Ctrl+Alt+Y / ⌃⌥Y)打开
- Core panel/translate:原文带光标,停键 800 ms、两个字以上才发,内容没变不重发,没翻出来 2 秒后自动重试一次、再失败等回车;译文按原文 + 语言缓存在内存(换提供方清空),不落盘
- 译文放进应用的 preedit:Windows 译文靠轮询送到,DLL 记着写进文档的组句文字,变了就补一次编辑会话;行内不显示拼音的设置下也照样放
- 框的排版抽成 bamboo-slip 的 TextFlow,与设置程序的 TextField 共用;面板不是 Ui 搭的,布局后按各字位置给出 PanelHit::Caret
- [predict] sentence_translation 不再认(旧配置里写着不报错),两个设置程序的开关与文档一并去掉;生词本整句翻译保留
- Windows dispatch/composed/mod.rs 超了 800 行,按联想、导航、出帧拆开
- 初音主题当前分组胶囊改纯色
2026-11-04 16:18:39 +08:00
yenharvey
671560d054
refactor(android): 改版与游戏键盘收尾
...
- 删掉改版后没人用的单选行 SettingsWidgets.choice 与字符串 stats_days、game_keyboard_title
- 游戏键盘设置页回到前台时重画:透明度、勾选在游戏里也能改
- GameFrame 算可触摸区域不再每次新建数组
- 注释跟上现状:App 深浅色按「外观」走、顶栏不再滚动后浮起
- crate-notes 的内置主题列表补上素笺
2026-11-04 13:20:34 +08:00
yenharvey
697d93eea6
build(clipboard): 青简剪贴板 macOS 单独包与一起发版
...
单独包给不装输入法的人:build.sh 出签好名的 .app 压缩包,assemble.sh 与输入法打包共用,两边的 .app 一致。
单独运行时菜单栏多一项「开机启动」(SMAppService),随输入法拉起时不显示。
发版工作流改成 Windows 与 macOS 并行打包,两边都成功才转正 Release。
2026-11-04 10:53:35 +08:00
Joelee
e1f3ba47c9
feat(core): 支持越南语 Telex 第三输入法 ( #841 )
...
Windows 与 macOS 加越南语 Simple Telex 第三输入法,双击 Shift 在中英与越南语之间切换,候选旁显示中文译词。
Closes #835
2026-11-04 10:32:54 +08:00
yenharvey
97dde30112
feat(release): 加 Gitee 发行版脚本
...
官网下载页链到 Gitee 上的同名发行版,发版后用 tools/release/gitee-release.sh 照搬 GitHub Release 的标题与说明,不传安装包;--all 按发布时间补齐旧版本。
2026-11-03 18:32:48 +08:00
yenharvey
b5a33d7ac8
build(clipboard): 独立安装包与 clipboard-v 发版流程
...
只要剪贴板的人不必装整个输入法:按用户安装、不要管理员。
推 clipboard-v<版本> 标签在 Windows 上打包,发到 qingjian-clipboard 的 Release,说明取自剪贴板自己的更新日志。
Windows CI 加上剪贴板:它只在 Windows 上有实现,Linux 的 core job 只编到占位的 main。
2026-11-03 10:49:04 +08:00
yenharvey
1b6166ca46
refactor(clipboard): 按约定整理目录与注释
...
一个类型一个文件,同前缀的收进目录;app 按职责拆成几个 impl。
霓虹灯的窗口与动画分开,安卓同步相关的类进 clipboard/sync。
待办里的同步一项移出平台缺口列表,那个列表要和设置程序的表一一对应。
2026-11-03 10:09:25 +08:00
yenharvey
d764441eda
feat(clipboard): 局域网同步,Windows 与 Android 互传文字和图片
...
不想再靠聊天软件在设备之间传内容,也不经过任何服务器。
配对输 6 位码(SPAKE2 + Noise),PC 之间没法扫码;合并按内容取 id、比修改时刻,手动删除才同步,裁掉和清空只影响本机。
安卓读不到网卡标志,mDNS 库用不了,改走系统的 NsdManager;有的路由器不转发组播,再加同网段扫描兜底。
连接状态只看实际连接结果:mDNS 看不见时同步照样通,显示不在线会被当成配对失败。
收内容时边缘亮霓虹灯,颜色随速度,成功转绿、失败转红。
调试版可用 -PsideBySide 并排装,不用卸发版签名的包。
2026-11-03 10:09:25 +08:00
yenharvey
383b721b63
feat(clipboard): 青简剪贴板 Windows 版
...
记录复制过的内容,快捷键从屏幕一边弹出卡片面板,选中后粘贴回原窗口,也能编辑、搜索和筛选。
随输入法内置且默认关闭,也能单独运行,所以配置键由它自己读,不依赖输入法的配置库。
有暂停、程序黑名单、清空和大小上限;存储一开始就留好全局 id 与删除标记,给同步用。
2026-11-03 10:09:25 +08:00
yenharvey
3d5fd2df43
ci(release): 发版时打 deb / rpm、装一遍自检后挂到 Release
...
- 0.2.1 到 0.3.2 的 Release 都只有 Linux tar.gz:apps/linux/packaging/build.sh 早就能打 deb / rpm,但 release.yml 没调用它
- 新的 linux-packages job 与各平台并行:容器里打两种包,在 Debian 13、Ubuntu 26.04、Fedora 42 的干净容器里装一遍自检,再传到草稿 Release;publish 等它成功才转正
- 不进 releases.json:每种格式两个包(qingjian 与 qingjian-fcitx5),检查更新与官网下载页仍按 tar.gz 认 Linux
- 自检里先在配置打开本地整句模型:0.3.2 起缺省关,不开就验不到随包的含章·通变能加载
- 用户文档(中英)加 deb / rpm 一节,发版流程与打包记录同步
- 在个人仓库用同样的步骤试跑过,三个发行版都装上、出候选、模型加载、卸载干净
2026-10-30 15:11:13 +08:00
Haoyu Xi
8fd2de3e29
feat(core): 双拼方案可同时接受全拼,同一输入里两种打法可混用 ( #825 )
...
双拼方案下打全拼没有候选;加开关(缺省关),开着时一段键同时按双拼与全拼读,两种打法可在同一输入里混用。
Closes #374
2026-10-30 15:03:35 +08:00
yenharvey
684231b67a
fix(android): 换了手势 / 三键导航后键盘底边跟着重量,不被导航栏盖住
...
底边让出的导航栏高度只在建视图时量一次;换导航方式时输入法进程不一定重建视图,
从手势换到三键后,三键导航栏盖住最下一排键的下半截,要杀掉输入法进程才恢复。
每次弹键盘时重量一次,变了就重建视图。
小米 14 Pro(Android 16):改前手势 → 三键复现了遮挡;改后同一进程里三键 → 手势跟着重排,反方向没在改后再切一次。
Ref #771
2026-10-29 19:40:21 +08:00
yenharvey
59555b20fd
fix(android): 语音、快捷翻译没配好时在工具栏位置提示,点了进设置页
...
没填识别服务或云端大模型时点话筒、翻译,原来只弹一个 toast,一闪就过,用户反馈像点了没反应。
改成在工具栏的位置放一行提示,点它打开「语音识别」或「键盘设置」;5 秒后或出候选时收起。
键盘还没建起来时仍退回 toast。
2026-10-29 19:40:21 +08:00
yenharvey
1fdc98c0fe
feat(android): 键面字号与按键震动强度可在键盘设置里调
...
键面字号与候选字号分开,同样小 / 标准 / 大 / 特大四档,键上的字与按键气泡一起缩放;放不下的双拼韵母照旧按宽度缩。
震动强度分轻 / 标准 / 重,标准保持原来的预置效果;预置效果不能缩放,轻一档用合成振动缩小 tick,旧机器退回小振幅短震。
震动关着时不显示强度一项。
Closes #826
Closes #775
2026-10-29 19:40:20 +08:00
yenharvey
d6eacf2c09
feat(android): 键盘设置加拼写纠错开关,与 PC 同名同缺省
...
名字用 PC 的 [general] spelling_correction,缺省开;整份 InputOptions 交会话时调 Engine::set_spelling_correction。
放在「输入」里模糊音下面,说明文字与 PC 设置程序一致。
2026-10-29 19:40:20 +08:00
yenharvey
1b7fd5701d
feat(android): 空格滑动移动光标加开关,只认横向,组句中不响应
...
参考小米「全面屏键盘优化」的快捷移动光标:按住空格左右滑,每 14dp 挪一个字,缺省开,可在键盘设置关掉。
起判要求横向位移大于竖向,起手在空格上,与字母键起手的滑行输入、上滑输入分开。
组句中不响应:Core 有按字母挪拼音光标的能力,但安卓会话没接、候选条也不画拼音光标,接上要动会话、帧与渲染,不在这次范围;
原来的做法是先把拼音原样上屏再挪,会把没选的字母落进输入框,不如不动。
2026-10-29 19:40:20 +08:00
yenharvey
56c99635c8
feat(android): 电话、数字、日期时间输入框弹出直接是数字键盘
...
原来这类输入框也弹 26 键,要再点「123」;按 inputType 的类别判断,换输入框时照旧回到字母页,所以离开后是原来的键盘。
数字键盘仍有「返回」,需要字母(如带分机号的备注)还能换回去。
2026-10-29 19:40:20 +08:00
yenharvey
9309ec1cdd
feat(android): 工具栏可定制,功能面板「定制工具栏」里勾选要放的工具
...
工具栏中间一排按用户勾选的先后排,存 ToolbarTool 名字;没定制过仍是原来七个,「恢复默认」回到这七个。
全部工具比原来多常用语、切换输入法、设置,都是现有入口,不新增行为。
两头的 logo 与收起键盘固定不动,进功能面板与收起的位置不随定制变。
少于五个时平分中间那段,多于五个照旧横滑。
Closes #777
2026-10-29 19:40:20 +08:00
yenharvey
fd5d73edfb
feat: 设置程序与候选菜单支持七种界面语言
...
- 新 crate bamboo-slip-i18n:各 crate 的 locales/*.toml 编译时嵌入,tr 按进程级的界面语言查,缺的文案退到英文再退到中文;各文案表有测试核对废键与参数
- 设置程序、core、platform 里给用户看的文字都进了文案表,简体、繁体、英、日、西、越、德七种齐全;日志与报错类型不翻
- 界面语言放在设置侧栏左下角(文A 加当前语言自己的叫法),看不懂当前界面的人也找得到;配置是 [general] ui_language,缺省简体中文(不少中文用户的系统首选语言是英文),system 跟随系统
- 数字、日期跟着语言写:中日按万 / 亿,其余按 K / M,小数点与千位分隔按语言;统计页的数字卡片放不下时两张一排
- 生词本里的整句译词与原句换行,不再冲出卡片、压住右边的时间
Closes #823
2026-10-29 18:24:57 +08:00
yenharvey
aac39240b1
feat(android): 符号面板改偶数列,加「左手便捷」布局把分类列放左边
...
符号一行改成偶数格(一字一格六格,网格窄了排四格;宽的四格或两格):目录里成对的括号引号都从偶数位起,偶数列就不会把【】《》“” 拆到两行。只是排列,不动位置语义,直接改默认。
分类放左边、返回挪左下是改按键位置,按用户定的原则不动默认(肌肉记忆),做成另一套键位排法 Settings.Arrangement:「默认」与「左手便捷」,在键盘设置的「按键 → 布局」和功能面板常用功能的「左手布局」里切。
左手便捷的符号面板:分类竖排成左边一列(Tabs 加 COLUMN 样式,可竖着拖),左下角是返回;右上的返回和右下的键盘图标是同一个功能,两个都去掉,右列只剩删除与锁定,也不再要底排。表情面板不变。
功能面板要就地改一个选项设置,PanelActions 加 setChoice(同 setToggle,写字符串值)。
2026-10-29 17:21:58 +08:00
yenharvey
cab2e498fa
feat(android): Shift 双击锁定、上滑输入角标、英文敲字母串、双拼键面可关、微软双拼 ; 占 Shift 位
...
用户群反馈的一批键盘问题,都直接改在默认键盘上(不动已有键的位置,微软双拼按用户定的跟方案走)。
Shift 改成三态:点一下单次,350 ms 内再点锁定(键亮着再加右上角一个品牌色小点,与只大写一次分开;微软双拼的 ; 同样显示),锁定时点一下解锁;单次的出过一个字母就熄。拼音、日语组句中 Shift 仍不响应,英文组句中可以,好敲大小写混着的串。
上滑输入(缺省开,可关):在键上往上划过 18dp、不偏出本列就上屏长按不滑直接抬手的那一项(字母键角标、九宫格数字)。要求起终点同列,与跨键的滑行区分;两者都成立时上滑优先,竖着相邻两键的滑行词很少。
英文模式之前敲验证码卡在:数字、标点会顶首选,首选是补全或纠错出的词,字母串被换掉。现在空格、数字、标点前都原样落下敲的字母,要词点候选;不改 Core 的英文候选,只改壳里这几个键怎么结束组句。
双拼键上的声韵母小字加开关(缺省显示)。
微软双拼照手机键盘的习惯把 ; 放到 Shift 位、二排回到九个键:点按永远是 ;,上滑是 Shift(快速上滑两次锁定)。没做成搜狗那样按组句状态换含义的键,同一个动作在什么时候都是同一个意思;其他用 ; 的方案键盘不变。
2026-10-29 17:21:58 +08:00
yenharvey
937b3ae119
fix(android): 删掉的剪贴板记录不再被收回来
...
键盘每次弹出都会读一遍系统剪贴板(监听在输入法没起来时收不到),用户删掉的那条若还是系统剪贴板的当前内容,下次弹键盘又被记回历史,看起来就是删除没生效。
同一份剪贴板按 ClipDescription 的时间戳只记一次;时间戳存在 prefs 里,输入法进程被杀重起后也认得。
用户再复制一次(时间戳变了)才重新记,与「删了就是不要」的预期一致;不去改 Rust 侧的历史存储,删除本来就落盘了。
2026-10-29 17:21:58 +08:00
Joelee
c5c74ed897
fix(core): 模型生成候选译文时补全词性 ( #834 )
...
右键「模型重新生成译文」时让模型一并给出词性;没给或认不出时仍保留译词,重新生成只换第一条释义,读音与后续释义保留,德语提示补回名词大写与正写规则。
2026-10-29 17:06:19 +08:00
yenharvey
a6916d8089
feat(core): 自定义短语支持时间变量
...
- 短语里写 {year} {month} {day} {hour} {minute} {second} {weekday},出候选时按当时的本地时间换掉,候选窗显示的就是上屏的,同一条每次出候选都重新取时间
- 月、日、时不补零(3月8日、9时);分、秒补到两位(9:05);{weekday} 只给「一」到「日」,前面写星期、周都行;{{ }} 是花括号本身,认不出的 {…} 原样留着,已有短语不受影响
- 置顶 / 取消置顶按名次找回带变量的原文,不然换过时间的候选对不上配置里那条
- macOS 系统文本替换并进短语后同样会换;设置编辑框的占位文字与配置模板提一句写法
Closes #800
2026-10-29 16:04:56 +08:00
yenharvey
6e9d6a9f58
feat(settings): 设置与短语各自导入导出,短语导入也认 Rime 的文本
...
- 「高级」页加「导入、导出设置」(#746 的设置部分):导出去掉自定义短语、云服务密钥与状态条位置,导入时这几样保留本机原值;先当配置读一遍,读不通什么都不改,写之前把原配置另存成 config.before-import.toml
- 用户要求设置与短语分开搬:短语导入不再收整份 config.toml,认出是配置文件时指去「高级」页
- 短语导入读不成 TOML 时按「文字<Tab>输入码[<Tab>权重]」读(Rime custom_phrase.txt),方便从别的输入法搬;权重夹到 1–999,TSV 存不了换行,所以导出仍是 TOML
2026-10-29 16:04:56 +08:00
yenharvey
ac8b2ca986
feat: 上屏候选与上屏字母的键可以在设置里换
...
- [shortcut] commit_candidate(缺省空格)与 commit_raw(缺省回车):用户反馈想让回车上屏候选,又不想要「展开后回车才上屏」那种看状态变含义的混合规则,于是两项各自做成可录的键
- 只收空格、回车(可带 Shift)与一个符号键:Windows 的 TSF DLL 组句时只把不带 Ctrl / Alt / Win 的键送进 Server,配了也收不到;字母、数字、单引号用来打字选词
- 设置程序录键时查冲突:两项互相、翻页键(主与额外)、辅码触发键;辅码触发键录的时候反过来也查上屏键
- 分派规则 CommitKeys::route 放在 qingjian-platform,Windows 与 Linux 的 Router 共用;缺省的那个键照原路径走(直输段、只剩一个 ? 的细节都在那里),换过的键直接上屏,让出去又没配的空格 / 回车组句中吃掉、不漏进应用
- 注音的空格是一声、回车有自己的规则,不参与;macOS 的空格与回车走另一套事件,登记待实现
2026-10-29 16:04:56 +08:00
yenharvey
4828b60fd2
feat: 横排时翻页键也能展开成多行
...
- 新开关 [general] grid_page_keys,缺省关(#805):右手不用离开主键盘区去按方向键也能展开矩阵
- 打开后横排时翻页键(主翻页键、额外翻页键、PageUp / PageDown、Tab、点翻页箭头)在单行时也展开并换到下一行,与 ↓ 走同一个 move_rows;展开后翻页键照旧一次翻一屏
- 只管展开、不碰回车:回车上屏什么另做成可自定义的上屏键,不按展没展开换含义
- 展开状态归壳,与现有 ↑ / ↓ 展开同一处:Windows Router::page、macOS turn_page;矩阵一旦展开方向键就按矩阵走,不然没勾 horizontal_grid 时方向键按单行移会走出视口
- 设置程序外观页加勾选框,支持表登记 macOS / Windows 支持、Linux 待实现(Linux 还没有矩阵);macOS 只做了 darwin 类型检查,没上真机
Closes #805
2026-10-29 16:04:56 +08:00
yenharvey
ba299ac14e
feat(settings): 自定义短语导入导出,长短语截断显示、编辑框折行
...
- 短语页加「导入、导出」:文件就是配置里 [[custom_phrases]] 的写法;导入接在已有短语后面、保留权重与开关,同码同文本的不重复加,写错的跳过并计数(#746 的短语部分;安卓的短语另存一处,列进 todo)
- 候选窗截断在共用渲染器里做,三平台都生效:多行画成一行(↵),超过 30 字宽截尾加「…」;30 字宽约是横排一页常见候选的总宽,整句候选要敲上百个字母才到,上屏仍是全文
- bamboo-slip 多行输入框按框宽折行(非 ASCII 一字一单位、ASCII 连串最多 16 个),可设最多几行高,超出时内容上推露出光标所在行;短语内容框限 12 行,免得长短语把卡片撑出窗口
- 输入框点哪里光标就挪到哪里,长短语不用只靠方向键找位置:正文按排版单位分节点,每个单位登记点击,按点在单位里的横向位置落到最近的字符边界(汉字一字一单位,所以是准的;英文单词里按字符数均分);行尾后面的空白落到行尾,最后一行下面落到末尾;单行输入框也按单位排
- 折行单位不拆开组合字符:零宽连接的 emoji、肤色、国旗、附加符号跟着前一个字,不然会被拆成几个字画
- 截图脚本多一步:在短语卡片里粘一段长文字看折行
2026-10-29 16:04:55 +08:00