feat: 修复终端换行错乱根因 + 顶带重设计 + 移除移动端分屏
- 换行错乱根因:tmux 客户端格子改以 ghostty 实测为权威(像素除法 偏大 1 行/列 → 远端按更宽排版、本地自动换行掉字符),单 pane 实测 格子直发 refresh-client;kickoff 用 raw surface 真实格子;顶栏 格子数 tmux 模式读 clientGrid(模拟器连本机 sshd 端到端验证) - 顶带落地为真实 chrome 行:✕/⌄ 独立按钮组 + 弱化标题 + TmuxWindowTabGroup window tab 组,pane 不再被悬浮胶囊遮内容 - 放弃移动端分屏:删 SplitMenu/分屏入口,tmux window 切换上移顶部 tab,侧边栏改列活动会话;底部动作条合并状态行 - Info.plist 补 NSLocalNetworkUsageDescription(LAN 直连必需, 缺失时 socket 静默超时) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -32,13 +32,11 @@ enum SidebarState: Equatable {
|
||||
}
|
||||
}
|
||||
|
||||
/// 终端页上的模态浮层。放在 router 而不是视图 `@State`:⌘W/⌘D 快捷键与无头 URL 驱动
|
||||
/// 终端页上的模态浮层。放在 router 而不是视图 `@State`:⌘W 快捷键与无头 URL 驱动
|
||||
/// 都要能打开它,视图内部状态触达不到。
|
||||
enum AppModal: Equatable {
|
||||
/// 关闭确认(3c)
|
||||
case closeConfirm
|
||||
/// 分屏菜单(3b)。`vertical` = 竖分(⌘D)/ 横分(⌘⇧D)
|
||||
case splitMenu(vertical: Bool)
|
||||
}
|
||||
|
||||
/// 导航状态持有者。视图只读它、只经方法改它。
|
||||
@@ -46,13 +44,13 @@ enum AppModal: Equatable {
|
||||
final class AppRouter: ObservableObject {
|
||||
@Published var route: AppRoute = .home
|
||||
@Published var sidebar: SidebarState = .collapsed
|
||||
/// 当前模态浮层(关闭确认 / 分屏菜单)。
|
||||
/// 当前模态浮层(关闭确认)。
|
||||
@Published var modal: AppModal?
|
||||
|
||||
/// 状态切换动效统一走 `TX.Motion.standard`(设计定稿 200–260ms easeOut,响应「减弱动态」)。
|
||||
///
|
||||
/// **路由 / 侧边栏 / 浮层的每一次变更都必须包在这条曲线里**,否则视图上的 `transition`
|
||||
/// 拿不到动画事务就退化成硬切 —— 首页 ⇄ 终端、关闭确认、分屏菜单曾都是这么"啪"地跳出来的。
|
||||
/// 拿不到动画事务就退化成硬切 —— 首页 ⇄ 终端、关闭确认曾都是这么"啪"地跳出来的。
|
||||
/// 收在 router 里的另一个好处:点击、⌘ 快捷键、无头 URL 三条入口天然同一手感。
|
||||
private func animated(_ change: () -> Void) {
|
||||
withAnimation(TX.Motion.standard, change)
|
||||
@@ -76,7 +74,7 @@ final class AppRouter: ObservableObject {
|
||||
animated { sidebar = sidebar == .collapsed ? .pinned : .collapsed }
|
||||
}
|
||||
|
||||
/// 打开/关闭模态浮层(红点、⌘W、⌘D、⌘⇧D 与无头 URL 共用同一入口)。
|
||||
/// 打开/关闭模态浮层(红点、⌘W 与无头 URL 共用同一入口)。
|
||||
func present(_ modal: AppModal) { animated { self.modal = modal } }
|
||||
func dismissModal() { animated { modal = nil } }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user