since2006
|
e5f8790dba
|
Merge branch 'sqlite-session-persistence' of https://github.com/since2006/shellr into sqlite-session-persistence
|
2026-09-12 09:34:02 +08:00 |
|
since2006
|
13afe7fc67
|
chore: gpui-kit skills
|
2026-09-12 09:33:59 +08:00 |
|
Xuz
|
05e05709f0
|
实现真实 SSH 客户端并支持多连接
|
2026-09-12 09:27:14 +08:00 |
|
 since2006andClaude Opus 5
|
5459fe0378
|
SFTP 标签页激活时接管焦点
中间区一次只渲染激活的那个标签页。会话的终端标签失活后不再渲染,焦点却
还留在它身上,句柄于是不在这一帧的派发树里——「×」用 window.dispatch_action
派发 CloseTerminal / CloseExplorer,动作没有落点就被丢掉,两个标签的关闭
按钮一起失效,⌘W 和其它快捷键同理。
ExplorerPanel::set_active 漏了接管焦点,TerminalPanel 和 LocalTerminalPanel
都有。补上,三个面板一致。
回归测试 both_tabs_of_one_session_stay_closable:连上 db-01,开 SFTP,先关
SFTP 再关终端,两次都得真的关掉。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TChp1yPThAzy3UcdXZcZA9
|
2026-09-11 23:42:39 +08:00 |
|
 since2006andClaude Opus 5
|
b0cb99f2bc
|
修复右键树节点时的无障碍焦点崩溃
gpui-component 的 ContextMenu 在 request_layout 里就把焦点抢给弹出菜单,
而树行是 uniform_list 在 prepaint 阶段才渲染布局的,于是焦点在一帧的中途
易主:树容器(被右键点击聚焦,且带无障碍角色)在这一帧更早的 prepaint 里
已经报告过自己是焦点节点,弹出菜单再报告一次就撞上 gpui 的断言
「set_focus called more than once in a single frame」。只在开了辅助功能的
调试构建里 panic,release 构建打警告。
把 .context_menu(..) 从每行挪到 #session-tree 容器上,容器走正常布局阶段,
焦点在 prepaint 开始前就定下来了。指针下的节点用 Rc<Cell<Option<SessionNode>>>
传递:容器在捕获阶段先清空,被命中的行在冒泡阶段写回自己——所有捕获处理器
都先于任何冒泡处理器,顺序有保证。gpui-kit 自带的 Table 也是这么挂的,所以
SFTP 文件列表一直没崩。
顺带:在行下方的空白处右键现在会出根菜单,以前没反应。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TChp1yPThAzy3UcdXZcZA9
|
2026-09-11 23:16:51 +08:00 |
|
 since2006andClaude Opus 5
|
6bec390ecd
|
用 SQLite 持久化会话与分组
会话和分组不再只活在进程里。`SessionStore` 带 `Context` 的 mutator 现在
「改内存 → 写库 → notify」,落到 `~/Library/Application Support/shellr/
shellr.db`(`SHELLR_DATA_DIR` 可覆盖目录)。内存仍是唯一事实来源:写库
失败只丢持久化、不丢用户的编辑,store 发 `PersistFailed`,工作区据此弹
错误通知,绝不静默吞掉。
分组从只读的种子数据变成真正的配置项:任意层级嵌套,可新建 / 重命名 /
改上级 / 删除,删除按外键 `ON DELETE CASCADE` 连同子分组和里面的会话一起
带走,确认框写明数量。会话因此可以不属于任何分组,渲染在树的根层级——
首次启动是空库,第一个会话必须能在还没有任何分组时建出来。
- rusqlite 0.40(bundled):同步写、WAL、外键、`PRAGMA user_version` 迁移
- `app/paths.rs` 解析数据目录;`dirs` 6 已在依赖树里,不增加编译量
- `Workspace::new` 改为外部注入 store:`main.rs` 从库加载,测试注入 seed
- `ConnectionState` 不入库;`last_connected_at` 入库,最近连接跨启动保留
- 新增 5 个 UI 测试,其中一个走真实写路径后用第二个连接读回同一个文件
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcMDBhETbHS7rEucBMAVvv
|
2026-09-11 22:32:10 +08:00 |
|
Xuz
|
3bceb8879d
|
初始化 shellr 项目
|
2026-09-11 20:41:07 +08:00 |
|