feat: 新增 TUI 对话模式基础脚手架#14
Conversation
实现基于 Elm 架构的基础对话界面
|
目前有个问题,目前bubbletea无法简单的完成同时支持鼠标滚轮滑动窗口和鼠标选择来复制对话内容,原因是MouseModeCellMotion虽然可以完成鼠标滚轮滑动窗口,但是会导致tui接管鼠标输入以至于无法进行鼠标选择复制对话和输入框内容。 我查看了crush的解决方案,发现Crush 不是同时保留终端原生选择 + 应用滚轮事件,而是启用鼠标模式,然后自己实现选择和复制。 如果是这样的话那么会加入大量代码,我怕对于教学项目来说代码量在这边偏重不太好。 详情见view.go |
- 支持鼠标左键拖拽多行选区,实时反白高亮 - 有选区时 ctrl+c 复制纯文本到剪贴板,无选区时走退出确认 - 窗口 resize / 发送消息 / 流式输出时自动清除选区,防止坐标错乱 - refreshViewport 改为仅在已滚到底部时自动跟进,不再强制置底
该问题已在 b155721 中解决,其中ANSI/CJK/emoji处理逻辑借鉴了Crush项目,自己实现了鼠标的选择复制。 此外解决了之前 bug:由于macOS 上 cmd+c 被终端模拟器在 OS 层面拦截,用于复制终端自己的选中内容,永远不会传递给里面运行的程序。所以在update.go中case 里写 |
这下算是知道为啥opencode要弄成选择后自动复制了,bubbletea本身设计缺陷来着😂 |
这里的截图未能正常显示 |




增加了4个文件
我自己进行了部分优化操作已达到与claudecode对齐的效果,如果超出了该feat的目的请通知我更改,详情如下:
Welcome to nano-claude-code写的时候由于是简单tui实现于是不少地方没有详细处理,但是写的时候看到了我就在这里写一下,之后需要进行补充或修复,一下是需要改进的地方:
style.go来进行对话样式调整,以达到美观效果E2E测试截图:



Related to #6