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:
kid
2026-07-26 11:11:20 +08:00
parent 5707d70dff
commit 5d1abdc7ac
13 changed files with 411 additions and 693 deletions

View File

@@ -225,14 +225,6 @@ final class TerminalSession: ObservableObject, Identifiable {
/// tmux `tmuxSummary`
private var injectedTmuxSummary: TmuxSummary?
/// tmux detached controller.sessions
private(set) var injectedTmuxSessions: [TmuxSessionInfo] = []
/// controller list-sessions
var tmuxSessionList: [TmuxSessionInfo] {
if let c = tmuxController, !c.sessions.isEmpty { return c.sessions }
return injectedTmuxSessions
}
/// tmux controller
var tmuxSummary: TmuxSummary? {
@@ -579,10 +571,9 @@ final class TerminalSession: ObservableObject, Identifiable {
/// // UIPreviewFixture
/// `gate` `session.receive` surface attach flush
func injectFixture(host: SavedHost, lines: [String], link: LinkState, mosh: Bool,
tmux: TmuxSummary? = nil, tmuxSessions: [TmuxSessionInfo] = []) {
tmux: TmuxSummary? = nil) {
isSyntheticFixture = true
injectedTmuxSummary = tmux
injectedTmuxSessions = tmuxSessions
self.host = host
connectionTitle = host.name
isLive = true