feat(windows): 工作台布局与 Git Log 体验调整(参考 IDEA),Core 提交日期携带时区偏移 - #1013
Merged
Merged
Conversation
- Windows 标题栏在搜索(放大镜)按钮后新增设置齿轮按钮,点击打开设置对话框 - 活动栏移除设置项,右键「在活动栏中显示」列表不再包含设置 - settings 移出活动栏 ID 集合,旧设置文件中遗留的排序/隐藏条目在归一化时自动清理 - 同步更新 item-order 与 git-log keymap 测试断言,新增 settings 不属于活动栏的防回归断言 - 平台功能矩阵新增 workbench-settings-entry 行并重新生成 md/csv 视图
豁免正则以 "/" 开头会被 Git Bash (MSYS) 当作路径改写,加上 ripgrep 在 Windows 上输出反斜杠分隔路径,导致 core/lithe-core-client 与 platform/tauri-core 两个合法豁免文件被误判为违规。改为字符类开头并 兼容两种分隔符;已在 Windows 验证干净树通过、植入违规文件能被捕获。
- 终端/底部面板默认宽度模式由 editor 改为 full,与 IDEA 默认一致 - 两条活动栏提到最外层保持通高,通栏面板只位于活动栏之间, 左侧底部按钮不再被面板顶上去;editor 模式布局不变 - 新增 terminal.store 默认值与切换的单测 - 更新 terminal-sessions 矩阵验证描述并重新生成矩阵视图
- 侧边栏、编辑区、底部面板去掉外圈描边,仅靠内容区/间隔区纯色区分 - 新增 --lithe-sidebar-gap(6px),左侧侧边栏与编辑区间距及其拖动条使用该值 - Git Log 标题栏、提交表、检查器、引用树的灰色/半透明背景统一为 bg-background, 与编辑区底色一致 - 同步更新 workbench-panel-frame 测试断言,并修正标题栏类名的过期断言
- file-tree-row 的 span:last-child 规则会让末尾的计数/状态 trailing 也参与 剩余宽度分配,与文件名平分空间,导致右侧留白而文件名出现省略号 - 仅对 Commit files 树新增 git-commit-file-tree 作用域规则,使 trailing 不再伸展, 文件夹/文件名占满剩余宽度;文件浏览器等其他树不受影响 - 新增回归测试
- 单击提交后编辑区预览该提交文件树中的第一个文件 diff;仅用户点击触发, 刚打开 Git Log 不会自动抢占编辑区 - 单击或双击 Commit files 中的文件只显示该文件 diff,不带提交说明, 不再打开整个提交的多文件页面 - 所有预览复用同一个 diff://commit-file-preview 标签,快速连点时丢弃过期请求 - MultiFileDiff 新增 hideFileList,单文件预览不显示已更改文件列表及其切换按钮 - 检查器记录文件所属的选择,避免新提交加载期间误用上一提交的文件做预览 - 新增 getFirstCommitFilePath、findCommitFileDiff、createCommitFileDiffPreview 及测试 - 更新 git-history 矩阵验证描述并重新生成矩阵视图
Extensions 标签页为当前活动标签时,点击右侧活动栏的扩展按钮会关闭该标签页; 未打开或位于后台时仍按原行为打开/切换。同步更新源码断言测试。
- 活动栏、侧边栏/AI 面板、底部面板、编辑区分屏、文件导航侧边栏的分隔条 悬停与拖动时不再显示蓝色背景和蓝色竖线,保留调整光标与拖拽行为。 - 左右分隔条光标由 col-resize 改为 ew-resize(上下分屏 row-resize 改为 ns-resize),避免 Windows 上箭头中间出现竖线,并与底部面板保持一致。
工作区干净时侧边栏保持空白,移除空状态的勾选图标与文字, 并清理不再使用的 git.workingTreeClean 文案。
- 文件行右侧不再显示 A/M/D 状态字母(文件名颜色仍保留状态区分) - 文件夹的改动文件数量从右侧移到文件夹名旁,并附带 file/files 单位 - 新增 git.log.fileCountOne 文案处理单数;中文保持“N 个文件” - 移除仅为右侧 trailing 列存在的 :last-child CSS 覆盖,并同步更新测试
- 移除提交列表上方的列标题行 - 删除不再使用的 git.log.commit / git.log.author / git.log.date 文案
- 1 小时内的提交显示 "N minutes ago"(不足 1 分钟显示 "Just now") - 今天和昨天的提交显示 "Today / Yesterday + h:mm AM/PM" - 更早的提交显示 "YYYY/MM/DD h:mm AM/PM",不再使用 24 小时制 - 新增 git.log.date* 中英文文案;日期列加宽以容纳 AM/PM - 新增 formatGitLogDate 及单元测试,无法解析的日期原样显示
- 较早提交的日期顺序由文案决定:英文 DD/MM/YYYY,中文 YYYY/MM/DD - 作者和日期列去掉等宽字体与 11px 字号,颜色改为 text-foreground,与提交说明一致
- 表头去掉后,每一行的 Author、Date 列左边缘都有拖动手柄,拖动即可调整整列宽度 - 宽度通过滚动容器上的 CSS 变量下发:拖动中按帧直接写 DOM,不触发虚拟列表重渲染, 松手后才写入 git-log-preferences 持久化,下次打开沿用 - 列宽有最小/最大限制,行最小宽度随列宽动态计算,避免提交说明被挤没 - 光标使用 ew-resize,无蓝色高亮,与其他面板分隔条一致;拖动遮罩防止松手触发行选中 - startDocumentResizeSession 挪到 src/utils 共享(run 侧保留 re-export), 新增 direction(反向拖动)和 cursor 选项 - 新增列宽钳制、拖动会话选项、拖动手柄交互(happy-dom)的单元测试
- Core 提交日期改用 --date=format:%Y/%m/%d %H:%M %z,parse_commit 拆出作者 UTC 偏移, 新增 dateUtcOffsetMinutes 字段(date 显示格式不变),更新契约文档与共享 fixture - Windows 仅在作者时区与本机一致时显示 刚刚/N 分钟前/今天/昨天,否则显示日期 - AM/PM 进入 i18n,中文显示 上午/下午 - 日期单元格在鼠标移入所在行时刷新相对时间
CI 的 write-stable-tests 检查(--platform windows/all)拒绝测试中的真实 setTimeout。 useGitLogColumnResize 新增可选 frameScheduler 参数透传给拖动会话,测试用手动帧队列确定性地刷新宽度。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
Windows 工作台与 Git Log 一组 UI 调整(主要参考 IDEA),外加一处 Core 契约扩展,用于判断提交是否与本机同一时区。
改动点
工作台布局
settings从SIDEBAR_ACTIVITY_ITEM_IDS移除,旧设置文件里的排序/隐藏条目由现有归一化逻辑清理。矩阵新增workbench-settings-entry行。TerminalWidthMode默认值改为full。面板位于左右两条活动栏之间,横跨侧边栏和编辑器下方;活动栏保持通高;仍可切回“编辑器宽度”。--lithe-sidebar-gap)。ew-resize/ns-resize(ResizablePane、BottomPane、PaneResizeHandle、活动栏、文件导航侧栏)。这是 Windows 端有意的视觉差异:mac 的SplitHandleView仍保留悬停高亮;已同步更新resizable-ui-performance-boundariesAgent Note,保留尺寸限制、无障碍和拖动生命周期约束。Source Control
Git Log
MultiFileDiff.hideFileList),并复用同一个预览标签diff://commit-file-preview。刚打开 Git Log、还没点过提交时不会自动打开 diff。预览使用独立 hook 管理 generation,并绑定仓库、选中提交和 Git Log 可见状态;取消选择、隐藏面板、切换仓库或卸载会使旧请求失效,失败只记日志。非连续多选且同一路径被多个提交修改时,保留全部匹配 diff 区段及各提交标识,不只取第一份。GitLogDateCell),不靠定时器刷新整张表。git-log-preferences,有最小/最大宽度限制。拖动会话抽成共享的utils/document-resize-session.ts(Run 配置列表原地 re-export,保持兼容)。git-commit-file-tree类名。bg-background。Core 契约(影响双端)
GitCommitResponse新增dateUtcOffsetMinutes: Option<i32>(东为正,未知时为null)。Core 的四处提交日期参数统一为常量GIT_COMMIT_DATE_ARGUMENT(--date=format:%Y/%m/%d %H:%M %z);parse_commit把%z拆出来,date字段格式保持YYYY/MM/DD HH:MM不变,mac 端解码会忽略新字段,显示不受影响。shared/contracts/rust-core-api.md,以及history-response-v1/history-page-response-v1/push-preview-v1三个 fixture;新增parse_commit时区拆分的单测。测试与 CI
脚本
verify-windows-boundaries.sh:豁免路径的正则兼容反斜杠分隔符,并避免 Git Bash 把开头的/改写成 Windows 路径。与 macOS 的差异(有意为之,已记入矩阵)
验证
tsc --noEmit通过。针对修改文件的 lint 无错误(保留原有Button未使用导入 warning)。tsc --noEmit、vp lint .通过bun test(git / layout / platform / terminal / keymaps / utils / run / window):799 个通过,0 个失败cargo test(lithe-core:shared fixture、parse_commit、graph)通过;cargo checkwindows/tauri/src-tauri 通过verify-platform-feature-matrix(-change).sh、verify-windows-boundaries.sh/.ps1、verify-test-stability.sh通过verify-runtime-bundle-immutability.sh、verify-shared-contracts.sh(需要 zsh)和verify-rust-core-comments.sh(需要 ruby),请以 CI 结果为准。本分支没有改动运行时资源。cargo test tests::git::git_history_rewrite*/git_write_*共 5 个用例超时失败;在未改动的基线上同样失败,属于本机环境问题,与本 PR 无关。