Skip to content

[R2][C++基础] 建立双缓冲状态与文档世代隔离 #130

Closed

Description

@JavaZeroo

用户结果

为已确认的自主C++终端核心补齐可独立验证的双缓冲存储基础,后续按原版合同接入1049等模式。现有Parser::screen对象及默认行为保持兼容,避免终端模式、历史与选区状态互相污染。

前置与范围

#115及原有Screen/TextDocument/Selection/Search/HistoryViewport公共接口已具备,原版#118已证明主屏文本/光标需要往返保存。该工程基础不等待#129颜色取证:只做状态拥有、激活和句柄失效,不接线任何private CSI,不选择未知原版样式、清空或历史浏览策略,也不宣称#27行为对比通过。

工程验收(不是原版语义声明)

  • Screen保留稳定对象地址和现有主屏公共接口,私有保存另一缓冲的文字、cursor/style/wrap/attachment及历史状态;切换以容器move/swap移交所有权,不复制整份保留历史,行ID分配器独立且全局单调。
  • 两缓冲状态互不覆盖,主屏原容量不变、备用存储有明确界限;物理resize复用现有策略并同时维护隐藏缓冲的尺寸,失败不产生半更新,不把该工程策略当原版reflow验收。
  • 缓冲世代防止主屏返回后旧TextPosition/selection/search/viewport句柄复活;普通未切换场景与现有JSON/ABI保持兼容,Parser/transport/Qt不改。
  • 在既有公开Screen、TextDocument/Selection/Search/HistoryViewport边界逐条红→绿验证值/稳定ID/版本/状态恢复、宽字/软硬行与resize交叉、历史界限及跨缓冲失效;已有核心回归通过,两平台CI与双轴审查后合入。

父项#27。协议接线、原版样式/重复进入清空/原生运输/完整模式仍由#27及相关调查任务验收;本项完成不能关闭R2或宣称备用屏已在产品中支持。

限定完成与主线身份

PR #134已合入 main 4f34146ab81f5b156537b080df2156f484793cc4,运行代码 63589fa21b68c3029501772b7bb415e66aa99e97与后续仅文档 head 8350945f007d507069975c5f3342dd369c9184de均已核对可达。固定证据:VS2022 x64 Release、Qt/candidate OFF,完整构建 exit0、CTest50/50/exit0,完整 LastTest 的12条内部skip逐条保留。最终head六条PR/push default、Qt、reference CI各自首次success,Spec0、Standards0硬违规,字段重复已简化并复核。

本项仅完成存储、稳定ID、双帧resize事务和公共文档世代;没有接入CSI,不验收原版样式策略、产品备用屏、Qt完整工作流或#27/R2。不同配置与历史失败仍独立,数值性能预算未确认。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions