Skip to content

[R2][Qt输入] 将基础 Unicode 按键文本精确传给固定 ConPTY 子进程 #147

Closed

Description

@JavaZeroo

当前实现与验证(2026-10-29)

PR153已推送,HEAD 0bdcfb2d81b61ea0a91efd02be99a84935840187,已以 a0aed8a643a0a99b09e16c7836e5a4e3ad26daed 合入main,最终两轴审查完成,各配置CI结果见下方结项记录。合入main05f动态尺寸后,执行源码独立绑定 2b6d988914b04a2a05520f0b67c08c30b6e2b43b,旧red8adc256、Return反例39e3c2c、focused2bdcea3及原件分别保留。

公开Qt事件→固定ConPTY→独立ReadConsoleW接收端的五组场景通过:中文/NFD/非BMP整与跨事件/固定ZWJ与keycap、未配对单元、焦点/隐藏/两标签/关闭/不可用目标、1024B接受/1025B整包拒绝和NUL。两个实际联合运行各有六个自然结束接收文件和一个取消目标空文件,全部字面匹配;Qt总16KiB队列饱和未强迫,实际Qt单包拒绝与已有InputQueue总容量夹具分列,不增生产测试钩子。

联合源码Qt针对性3/3后唯一完整CTest61/61、exit0、307.06s:正式Qt3与其余58项既有/独立诊断分列,13内部skip保留(包括private station OpenClipboard5)。7397冻结输入/运行文件post零变化、27旧原件零变化;公开身份与边界和四份运行时清单已发布。专用Qt CI已纳入Unicode目标和身份,无额外完整矩阵/native/guest运行。

本项按键盘文本传输切片已限定关闭;不是真实OS IME、物理键盘、字素/glyph/fallback、原版一致性、真实DPI、CF或性能验收。原生resize只保留原0ff源身份,#80/#81/#144/#145旧根因仍未知。

用户结果与真实前置

开工前正式Qt终端在keyPressEvent拒绝所有非ASCII text,无法迁移R1已有基础Unicode字符传输。#115/#117/#124/#135已合入,Qt/固定ConPTY真实启动与回收可测,基础按键文本切片无未解除硬前置,可独立开始。父项#30;与#143动态尺寸在最终源码合并验证,不把它设为基础编码的硬前置。

独立实施边界

复用本项目既有 experiments/shell/keyboard.hpp 的有界UTF-16→UTF-8编码与每目标状态,不引入外部核心/Unicode库。Qt QKeyEvent.text经该适配路径发送,保留原有ASCII、Return/Tab/Backspace/Ctrl-C和方向键正常模式行为。整QString和跨事件的合法surrogate pair均处理,不用toLatin1或对半个surrogate直接toUtf8替换原字符;焦点/隐藏/关闭/退出后半个标量不能串入其他标签。未配对单元的既有replacement策略明确为当前TermForge策略,不宣称原版已对照。

沿既有InputQueue单消息1024B、总有界队列;输入包过限或目标已不可用必须明确反馈、不能部分发送/截断原文或污染后续编码状态。空字节使用有长度字符串;不改应用键盘/鼠标模式或bracketed paste。只在已批准的Session/Qt应用和原始receiver边界TDD,不为helper内部调用计数写镜像测试。

限定验证

  • 先保留public Qt事件→独立子进程接收端的ASCII外字符被拒绝红例,固定source/EXE/依赖和原等待/Job边界后修复。
  • 明确字面UTF8预期:中文、NFD标量序列、固定单个非BMP字符、跨事件代理项、合法ZWJ/keycap输入字节;只验证原始字节不丢失,不据此声明字素宽度/渲染已正确。
  • 未配对单元、焦点/隐藏/切换/关闭、无可用session/队列拒绝、过限包和两个标签交叉接收有精确反例;接收端独立ReadConsoleW/UTF8导出或已有raw receiver,不能用输入回显或主进程send成功当证据。保留实际退出、stderr与Job回收。
  • Qt既有cmd/resize合同与适当核心回归保持;最终源码/配置只跑必要一次完整矩阵并双轴审查,公开仅合成字节/身份摘要,更新FEATURES和EVIDENCE后合入main。

本项不启用或验收真实OS IME/preedit/候选窗口,不实现完整应用键盘模式、所有Unicode宽度/字素/glyph/fallback、CF复制粘贴、真实跨DPI或完整#30/R2。后续IME必须独立核对组合/提交/取消与候选、原始接收和跨会话状态,不由人工QKeyEvent文本替代。原版未知行为继续调查,重要实际差异须用户确认。

main整合与限定结项

PR153已以 a0aed8a643a0a99b09e16c7836e5a4e3ad26daed 合入main,已核对旧focused实现2bdcea3、联合执行2b6d988和发布0bdcfb2均为main祖先。最终Standards硬违规/heuristic0、Spec P1/P2 0。本地61/61与13skip、Qt3/其余58分列;7397输入/运行文件、27原件及两次各7份receiver精确核对。PR默认Windows58/58、276.88s/Linux38/38、20.26s,Qt/参考4工作流success;push/default的PS51原10s准备超时(产品CTest未运行)已记#81,未重跑,旧根因未知。仅#147键盘文本传输切片完成,#30/IME/glyph/真实DPI/性能及R2继续开放。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestready-for-agent范围明确且真实阻塞已解除,可开始实施

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions