🟢 [L4] 设置保存错误被忽略 #30

Closed
opened 2026-06-03 13:54:29 +08:00 by dailz · 1 comment
Owner

文件: tui/app.rs:630-633
分类: 错误处理

问题: let _ = self.color_config.save() 忽略保存错误,用户以为已保存但下次启动会回退。

建议修复: 在 UI 显示保存错误消息或保持设置模式打开。

**文件**: `tui/app.rs:630-633` **分类**: 错误处理 **问题**: `let _ = self.color_config.save()` 忽略保存错误,用户以为已保存但下次启动会回退。 **建议修复**: 在 UI 显示保存错误消息或保持设置模式打开。
dailz added the area/tuiseverity/lowbug labels 2026-06-03 13:54:29 +08:00
Author
Owner

修复方案

根因

app.rs:726 使用 let _ = self.color_config.save() 静默丢弃保存错误,用户按 Enter 退出设置后以为已保存,但磁盘写入可能失败。

修复内容

1. 设置保存错误处理 (Oracle 审核)

  • 保存 draft 成功后才提交到 color_config,避免 split-brain(内存已改但磁盘未持久化)
  • 保存失败时留在 Settings 模式,status bar 红色显示错误消息
  • Esc / 进入设置 / 编辑设置项时清除错误状态

2. truncate_to_columns 重写 (附带修复)

  • 原实现复用 wrap_line_chars(O(整行)),违背性能降级初衷
  • 重写为专用 O(prefix) 截断器,逐字符遍历到宽度上限即停
  • 修复 Tab 在宽度边界处的截断行为:Tab 展开会超限则停在 Tab 前
  • 修复预存在的 test_truncate_to_columns_tab 测试失败

改动文件

  • crates/tui/src/app.rs — 错误处理 + truncate 重写 + 10 个新测试
  • crates/tui/src/ui.rs — status bar 红色错误提示
  • crates/tui/Cargo.toml — 添加 unicode-width 依赖

测试

126 tui 测试全部通过(含 4 个 settings 错误处理测试 + 6 个 truncate 边界测试)

commit: c1a9315

## 修复方案 ### 根因 `app.rs:726` 使用 `let _ = self.color_config.save()` 静默丢弃保存错误,用户按 Enter 退出设置后以为已保存,但磁盘写入可能失败。 ### 修复内容 **1. 设置保存错误处理 (Oracle 审核)** - 保存 draft 成功后才提交到 `color_config`,避免 split-brain(内存已改但磁盘未持久化) - 保存失败时留在 Settings 模式,status bar 红色显示错误消息 - Esc / 进入设置 / 编辑设置项时清除错误状态 **2. truncate_to_columns 重写 (附带修复)** - 原实现复用 `wrap_line_chars`(O(整行)),违背性能降级初衷 - 重写为专用 O(prefix) 截断器,逐字符遍历到宽度上限即停 - 修复 Tab 在宽度边界处的截断行为:Tab 展开会超限则停在 Tab 前 - 修复预存在的 `test_truncate_to_columns_tab` 测试失败 ### 改动文件 - `crates/tui/src/app.rs` — 错误处理 + truncate 重写 + 10 个新测试 - `crates/tui/src/ui.rs` — status bar 红色错误提示 - `crates/tui/Cargo.toml` — 添加 unicode-width 依赖 ### 测试 126 tui 测试全部通过(含 4 个 settings 错误处理测试 + 6 个 truncate 边界测试) commit: c1a9315
dailz closed this issue 2026-06-11 16:10:33 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dailz/logViewer#30