2.1 KiB
2.1 KiB
项目讨论记录
需求确认
- 双列布局: 左侧笔记列表,右侧编辑器/预览
- SQLite 存储: 使用 libsql 客户端
- Markdown 支持: 渲染 Markdown 内容
- 类似 Glow 效果: 终端 Markdown 渲染
技术问题与解决方案
OpenTUI Markdown 组件问题
问题: OpenTUI 的 <markdown> 组件无法正确渲染样式(尝试多种方式均失败)
解决方案: 实现手动 Markdown 解析器,用 OpenTUI 的 <text> 组件手动渲染样式
Textarea 换行问题
问题: textarea 默认 wrapMode 在 React 类型中缺失
解决方案: 通过设置 focused 属性让 textarea 可用,使用 EditBufferRenderable 的 wrapMode 选项(需要通过底层访问)
预览模式换行问题
问题: 编辑模式下输入的换行在预览时不显示
解决方案: 在 renderMarkdown 函数中处理空行,添加 <text>{" "}</text>
代码块渲染
问题: ``` 代码块里的缩进渲染有问题
解决方案: 实现代码块检测和渲染逻辑,每行代码单独渲染
多选功能
问题: OpenTUI 的 onMouseDown 事件不包含 ctrlKey/shiftKey 修饰键信息,且 useKeyboard 无法捕获修饰键
解决方案:
- 尝试使用
useKeyboard监听修饰键但失败(终端可能不发送单独的修饰键事件) - 改用双击进入"选择模式"的方案:双击任意笔记切换选择模式,在选择模式下点击可多选
数据库跨平台路径
问题: 硬编码的数据库路径在不同平台不兼容
解决方案: 实现 getDbPath() 函数,根据 os.platform() 判断系统类型
- Windows:
%APPDATA%/mio/cache.db - Mac:
~/Library/Application Support/mio/cache.db - Linux:
~/.config/mio/cache.db
待解决问题
- 多选功能: 双击选择模式的体验不够理想,键盘修饰键方案未能实现
- TypeScript 类型错误: NoteEditor 中存在一些类型错误(bold 属性不存在等)
构建说明
npm run dev # 开发模式
npm run build # 编译成 mio.exe
数据库位置:~/.config/mio/cache.db(所有平台统一)