feat: 业务逻辑对齐 + 首页/弹框七项减法 + 终端页四项体验修复
业务逻辑(用户定稿): - 点主机总是新建会话(会话:主机=多:1);activate 选中断线会话自动重连 - 「直接输入」凭据保存时自动落 Keychain(去重复用),主机只存引用 - 主机编辑页可就地新建 Tailscale 连接;删无人引用的旧 HostsListView 首页/弹框减法: - 删侧边栏「连接新主机」、无 tmux 横幅与安装引导、页头「新建连接」 - 搜索移到「全部主机」行;添加主机虚线卡与主机卡等高(骨架复刻) - 会话卡加 ✕ + 复用终端页同款二次确认 - 会话选择器 sheet → 项目风格居中弹框(去手柄/Header/最近) 终端页修复: - 侧边栏会话列表改创建顺序,切换不再重排抖动 - 焦点高亮上移到 pane 容器边框(四边完整,去负 padding) - 软键盘双重让位修复:画布忽略键盘 + TXKeyboardObserver 显式让位一次 - 自动聚焦:focusTick 脉冲强制翻转 FocusState + surface 就绪补聚焦; vendor 补 iPadOS 触摸板 indirectPointer 的 becomeFirstResponder Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -70,16 +70,11 @@ final class SessionManager: ObservableObject {
|
||||
|
||||
// MARK: - 开 / 关
|
||||
|
||||
/// 打开一台主机的会话:**已有该主机的活会话则复用**(对标设计「回到刚才那个会话」),否则新建并连接。
|
||||
/// 打开一台主机:**已有该主机的活会话则直接复用并进终端**;否则新建会话开始连接,
|
||||
/// 但**先不进终端** —— 等 tmux 探测/用户选择完成后由 `enterRequest` 通知视图层。
|
||||
/// 打开一台主机:**总是新建会话**(用户定稿:会话与主机不是一对一,再点同一主机 =
|
||||
/// 再开一条并行会话;回到已有会话走侧边栏行 / 首页会话卡,即 `activate`)。
|
||||
/// 新会话**先不进终端** —— 等 tmux 探测/用户选择完成后由 `enterRequest` 通知视图层。
|
||||
@discardableResult
|
||||
func open(host: SavedHost) -> TerminalSession {
|
||||
if let existing = sessions.first(where: { $0.host?.id == host.id }) {
|
||||
focus(existing)
|
||||
enterRequest = existing.id // 复用的会话没有连接过程,立刻进
|
||||
return existing
|
||||
}
|
||||
let s = makeSession()
|
||||
sessions.append(s)
|
||||
focus(s)
|
||||
@@ -88,6 +83,15 @@ final class SessionManager: ObservableObject {
|
||||
return s
|
||||
}
|
||||
|
||||
/// 选中**既有**会话(侧边栏行 / 首页会话卡 / ⌘n / 无头 URL):聚焦,且**已断开的自动重连**
|
||||
/// (用户定稿:点选未连接的会话 = 重新连接并重新判定 tmux/原生,不必再进终端找「重试」按钮)。
|
||||
/// 连接中 / 重连中 / 已连接的不打扰 —— 只有明确死掉(失败 / 已关闭)才触发。
|
||||
func activate(_ s: TerminalSession) {
|
||||
focus(s)
|
||||
guard !s.isSyntheticFixture else { return }
|
||||
if s.phaseText == "已关闭" || s.phaseText.hasPrefix("失败") { s.retry() }
|
||||
}
|
||||
|
||||
/// 会话状态变化后判断是否该进终端了。
|
||||
///
|
||||
/// 就绪 = 不需要用户选择,且(已建立 / 探测确认无 tmux / 用户选了原生 / 连接失败)。
|
||||
|
||||
Reference in New Issue
Block a user