feat: 实现模块1 - TUI基础框架 (bubbletea)
This commit is contained in:
83
memory.md
83
memory.md
@@ -505,4 +505,85 @@ db.SetMaxIdleConns(1)
|
||||
1. 测试缓存与Translator的集成
|
||||
2. 测试配置文件的正确加载
|
||||
3. 测试缓存命令的正确执行
|
||||
4. 测试错误情况的正确处理
|
||||
4. 测试错误情况的正确处理
|
||||
|
||||
---
|
||||
|
||||
## TUI界面开发策略
|
||||
|
||||
### 分模块实现策略
|
||||
**决策**: TUI界面分6个小模块逐步实现,每次只做一个模块
|
||||
**原因**:
|
||||
1. 减少Token消耗和上下文负担
|
||||
2. 便于逐步测试和验证
|
||||
3. 适应free模式的限流约束
|
||||
|
||||
**模块列表**:
|
||||
1. TUI框架搭建 - bubbletea基础App结构
|
||||
2. 输入组件 - 文本输入框
|
||||
3. 翻译显示区 - 结果展示、滚动
|
||||
4. 状态栏/主题 - 底部状态栏、配色
|
||||
5. 快捷键系统 - 操作快捷键
|
||||
6. 集成翻译 - 对接Translator、加载动画
|
||||
|
||||
### 技术选型
|
||||
**决策**: 使用charmbracelet生态
|
||||
- `bubbletea` - Elm架构的TUI框架
|
||||
- `lipgloss` - 样式和主题
|
||||
- `bubbles/textinput` - 输入框组件
|
||||
|
||||
**原因**:
|
||||
1. Go生态最流行的TUI框架
|
||||
2. Elm架构清晰,易于分模块实现
|
||||
3. 组件化设计,便于复用
|
||||
|
||||
### 文档管理规范
|
||||
**决策**: 不再创建新的md文件
|
||||
**原因**: 保持项目文档简洁,避免碎片化
|
||||
**规则**:
|
||||
- 讨论内容 → `taolun.md`
|
||||
- 版本更新 → `changelog.md`
|
||||
- 经验教训 → `memory.md`
|
||||
- 项目初衷 → `why.md` (仅用户编辑)
|
||||
|
||||
---
|
||||
|
||||
## Bubble Tea TUI框架经验
|
||||
|
||||
### 版本信息
|
||||
**当前版本**: v1.3.10
|
||||
**API风格**: v1版本风格(Init返回tea.Cmd)
|
||||
|
||||
### 基础结构
|
||||
```go
|
||||
type model struct {
|
||||
// 状态字段
|
||||
}
|
||||
|
||||
func (m model) Init() tea.Cmd {
|
||||
return nil // 初始化命令
|
||||
}
|
||||
|
||||
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||
return m, nil // 更新逻辑
|
||||
}
|
||||
|
||||
func (m model) View() string {
|
||||
return "视图内容" // 返回渲染内容
|
||||
}
|
||||
|
||||
func NewApp(cfg, translator) *tea.Program {
|
||||
return tea.NewProgram(model{...})
|
||||
}
|
||||
```
|
||||
|
||||
### 关键点
|
||||
- `tea.NewProgram()` 创建程序实例
|
||||
- `program.Run()` 返回 `(model, error)`
|
||||
- model的字段可以是config、translator等依赖
|
||||
- View方法返回string,使用lipgloss样式
|
||||
|
||||
### main.go集成注意
|
||||
- 版本检查(--version)需要在interactive模式检查之前
|
||||
- 避免interactive模式在非TTY环境启动
|
||||
- Run()需要两个返回值: `_, err := app.Run()`
|
||||
Reference in New Issue
Block a user