C5.16.2Mode switch must preserve content and caret设计研究
切换输入方式不应丢失已完成部分的内容或光标位置
别名: 切换丢字 · 光标保持 · input mode switch · caret persistence
概念解释
从笔切到键盘、或反向,已经进文档的字和墨、以及插入符所在的那一处,都必须还在。切换是换效应器,不是换一篇空文档,也不是把未提交的那一块当垃圾丢掉。丢失表现为:软键盘弹起后手写候选消失、焦点跳到框首、未认完的字被清空。
机制
两种输入法常是两套焦点与组成区。软键盘弹出改视口,可能重挂输入连接,IME 的 composition 被提交或丢弃。手写面板若是另一个窗口,切走时它的临时墨只活在面板里,没写回字段就没了。插入符若按“新输入法默认在末尾”重置,人在中间改一个词的动作被打断。正确切换是:提交或保留 composition、把同一文档位置交给新效应器、视口滚动以继续看见该位置(软键盘遮挡时尤其要滚)。未完成手写应在切走前认一次或明确变成墨块。系统级输入法切换(地球键)和应用内“笔/键盘”按钮都要走同一条保存路径,否则一条路径安全、另一条丢字。
怎么研究
在句中、在未完成组成、在软键盘即将遮住插入符时切换。记录内容差分和插入符索引。
自变量:切换触发(系统 / 应用按钮 / 笔靠近)、有无未完成组成、键盘是否改视口。 因变量:字符/墨丢失、插入符跳转距离、是否需要人重新找位置。
边界
故意“新建便笺”的按钮可以清空,但那不是输入方式切换。崩溃恢复另说。密码框禁止手写时,切到笔应拒绝并保持已打的掩码,而不是清空。
怎么落地
- 切换前提交或冻结 composition;插入符索引不变。
- 软键盘弹出后滚动插入符进可见区,不要让人以为字没了。
- 系统切换与应用内按钮共用保存逻辑。
- 验证:在句中停着未完成的手写字,弹出键盘,该字应出现在原处或作为已认字符插入,插入符仍在其后。反向:打到一半拿起笔,已打字不得回到框首。差分自动化比对切换前后 DOM/文档。