按 Claude Design 定稿(归档在 docs/design/)重做 UI,并把 tmux 从 「从不自动进」修成「连接前探测 → 让用户选会话」。 设计令牌与导航地基 - Theme 拆三层:TXAccent(恒定 blurple) / TXChrome(中性阶×4 表) / TXFlavor(Catppuccin 终端) - vendor JetBrains Mono 四权重(附 OFL 许可) - AppRouter + SessionManager:多会话并存,路由与会话生命周期解耦 - SessionCanvas 常驻挂载会话 surface(摘除即丢内容,也是缩回动画的前提) 按设计稿落地的屏 - 沉浸轨道页:56pt 轨道 + 浮起标题/状态胶囊 + 侧边栏三态(遮罩不 resize、Pin 各一次) - 首页:活动会话卡(readViewportText 文本镜像)+ 主机网格 + 筛选 chips - 关闭二次确认(tmux 仅断开 / 原生窗口两套文案)、分屏菜单、pane 拖拽条 - 空状态:首次运行 / 无会话 / 搜索无命中 / 连接中·失败·已关闭 tmux 真实链路(真机查出并修掉 4 个 bug) - 全代码库从来没人发起 attach → 连接前探测 + 会话选择器(接回 / 新建 / 原生终端) - format 分隔符 tab 经 PTY 变成下划线 → 改用 |:| - controller 变化不冒泡到 session → Combine 转发(否则数据解析对了 UI 不刷新) - 当前会话名不能靠 session_attached 反推 → 改用 display-message 传输层:SSH connect 加超时(原来阻塞到系统 TCP 超时 75s+) 无头验证设施:假会话 fixture · terminalx://ui/* 驱动 · 横屏截图脚本 · 对拍走查法 TXCore 45 tests 绿(新增 5 个会话探测单测) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
811 lines
212 KiB
HTML
811 lines
212 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<script src="./support.js"></script>
|
||
</head>
|
||
<body>
|
||
<x-dc>
|
||
<helmet data-dc-atomics><meta name="design_doc_mode" content="canvas">
|
||
<!-- Nocturne design-system bundle omitted from this handoff copy; all values are inline hex (see README Design Tokens) -->
|
||
<link rel="stylesheet" href="https://unpkg.com/@phosphor-icons/web@2.1.1/src/regular/style.css">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap">
|
||
<style>
|
||
body{margin:0;background:#0e0f18;font-family:'JetBrains Mono',ui-monospace,monospace;color:#e9e9ed}
|
||
a{color:#b5abfc}a:hover{color:#d2cefd}
|
||
.dv-turn{padding:48px 52px 40px;border-bottom:1px solid rgba(233,233,237,.09);scroll-margin-top:16px}
|
||
.dv-thd{display:flex;align-items:baseline;gap:10px;margin:0 0 24px}
|
||
.dv-tid{font:600 10px ui-monospace,Menlo,monospace;padding:3px 7px;background:#e9e9ed;color:#161826;border-radius:4px;text-decoration:none}
|
||
.dv-tname{font:500 14px/1.2 'JetBrains Mono',monospace;color:#e9e9ed}
|
||
.dv-opts{display:flex;flex-wrap:wrap;gap:40px;align-items:flex-start}
|
||
.dv-opt{flex:none;display:flex;flex-direction:column;gap:10px;scroll-margin-top:16px}
|
||
.dv-oid{font:600 10.5px ui-monospace,Menlo,monospace;padding:3px 7px;background:rgba(233,233,237,.12);color:#e9e9ed;border-radius:5px;text-decoration:none}
|
||
.dv-olabel{display:flex;align-items:baseline;gap:9px;font:400 12px/1.4 'JetBrains Mono',monospace;color:rgba(233,233,237,.55);max-width:760px}
|
||
.dv-card{max-width:100%;border-radius:18px;overflow:hidden;box-shadow:0 0 0 1px #3f424d,0 22px 60px rgba(0,0,0,.65)}
|
||
.dv-opt:target .dv-oid{background:#9184d9;color:#161826}
|
||
.dv-next{margin:26px 0 0;font:12px/1.6 'JetBrains Mono',monospace;color:rgba(233,233,237,.5)}
|
||
</style></helmet>
|
||
|
||
<section class="dv-turn" id="t3">
|
||
<div class="dv-thd"><a class="dv-tid" href="#t3">3</a><span class="dv-tname">去掉跨主机分屏 · 新建分屏交互 · 会话标题 · 首页与关闭/最小化</span></div>
|
||
<div style="max-width:1180px;margin:0 0 34px;display:grid;grid-template-columns:repeat(3,1fr);gap:16px">
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">跨主机分屏已移除</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">分屏只发生在同一台主机内,层级回到「主机 → 会话 → window → pane」四层。要同时看两台机器,用轨道或侧边栏一键切换。第 2 轮的 2b 稿已作废删除。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">新建分屏</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">不问方向(竖分/横分本就是两个按钮),只列这台主机的 tmux 会话,末尾追加「原生窗口」,选完立即分屏。见 <a class="dv-oid" href="#3b">3b</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">tmux 会话标题</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">会话行第二行显示当前 window title,window 行显示各自 title(仍是默认 zsh 时退回 cwd),不新增层级。见 <a class="dv-oid" href="#3a">3a</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">首页入口</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">默认遮罩态:288pt 面板盖住轨道(非并排,故无两套入口),点终端即收起;点 Pin 才钉在左侧、终端变窄。栏内仍是上「活动会话」下「TMUX」两段。见 <a class="dv-oid" href="#3a">3a</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">关闭 / 最小化</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">沿用 macOS 红黄圆点:黄点最小化不确认,红点关闭才确认;tmux 默认仅断开,原生窗口明说进程会结束。见 <a class="dv-oid" href="#3c">3c</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">对你方案的两点修改</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">① 最小化后落地页卡片置顶并标「最小化中」,配缩回动画,否则用户不知道东西去哪了;② 关闭的确认按主机能力分成两套文案,tmux 不默认 kill(只有次要按钮才是 kill)。见 <a class="dv-oid" href="#3d">3d</a>。</div></div>
|
||
</div>
|
||
<div class="dv-opts">
|
||
<div class="dv-opt" id="3a">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#3a">3a</a><span><b style="color:#e9e9ed;font-weight:500">侧边栏:遮罩态与 Pin 态</b> 折叠与展开只是同一条栏的两个状态,元素不增不减:折叠 56pt 收成图标(搜索 / 首页 / 主机 / TMUX / 设置 / 展开键),展开 288pt 显示完整标题。左上角 <span style="color:#a29ac8">›</span> 是 App logo,不可点;开合只有一枚按钮——折叠态是轨道底部的 <span style="color:#cfd3e5">»</span>,展开态是标题右侧的 <span style="color:#cfd3e5">«</span>,方向相反不歧义。<b style="color:#b2b6ca;font-weight:400">左=默认遮罩态</b>:288pt 面板盖住 56pt 轨道(不是并排,因此没有两套入口),右侧压一层遮罩,点终端任意处即收起。<b style="color:#b2b6ca;font-weight:400">右=点 Pin 之后</b>:面板钉在左侧、遮罩消失、终端变窄并只 resize 一次;再点一次 Pin 回到遮罩态。栏内布局沿用轨道的分区:上半「活动会话」,下半「TMUX(当前主机的 window 列表)」。</span></div>
|
||
<div style="display:flex;gap:22px;align-items:flex-start">
|
||
<div class="dv-card" style="width:1366px">
|
||
<div data-screen-label="3a 侧边栏-遮罩态" style="width:1366px;height:1024px;background:#11121c;display:flex;position:relative;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="width:56px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;align-items:center;padding:22px 0 12px;gap:8px">
|
||
<div style="width:34px;height:34px;border-radius:11px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 16px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-magnifying-glass"></i></div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-house"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:4px 0"></div>
|
||
<div style="position:relative;width:38px;height:38px;border-radius:11px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#d2cefd">ms<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">nh<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="width:38px;height:38px;border-radius:11px;border:1px dashed #3f424d;display:flex;align-items:center;justify-content:center;font-size:16px;color:#5d5294"><i class="ph ph-plus"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:6px 0"></div>
|
||
<div style="font:600 9px 'JetBrains Mono',monospace;letter-spacing:.1em;color:#5d5294;margin-bottom:2px">TMUX</div>
|
||
<div style="width:34px;height:30px;border-radius:9px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed">0</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">1</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">2</div>
|
||
<div style="margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div style="width:8px;height:8px;border-radius:4px;background:#a6e3a1;margin:2px 0"></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:13px"><i class="ph ph-caret-double-right"></i></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#75798c;font-size:15px"><i class="ph ph-gear-six"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:1;position:relative;display:flex;flex-direction:column;min-width:0;background:#11121c">
|
||
<div style="flex:1;display:flex;flex-direction:column;padding:2px;min-height:0">
|
||
<div style="flex:1.7;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;outline:1px solid #6c5f9e;min-height:0">
|
||
<div style="flex:1;padding:86px 20px 12px;font:400 13.5px/1.55 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git status --short</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/RailSidebar.swift</div><div><span style="color:#a6e3a1">??</span> docs/ui/sidebar-states.md</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
<div style="height:12px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:44px;height:3px;border-radius:2px;background:#3f424d"></div></div>
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;min-height:0">
|
||
<div style="height:26px;flex:none;display:flex;align-items:center;padding:0 14px;font:500 11px 'JetBrains Mono',monospace;color:#6c7086">0.1 · 日志 · log stream --style compact<span style="margin-left:auto;color:#585b70">168×17</span></div>
|
||
<div style="flex:1;padding:2px 20px 12px;font:400 12px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms<span style="background:#a6adc8;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;right:16px;display:flex;align-items:center;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:5px 6px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>tsnet</div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca">mosh<span style="color:#a6e3a1">41ms</span></div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">tmux<span>dev</span></div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;left:16px;display:flex;align-items:center;gap:10px;background:rgba(27,29,43,.9);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:7px 13px 7px 11px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:7px"><div style="width:13px;height:13px;border-radius:7px;background:#ff5f57;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25)"></div><div style="width:13px;height:13px;border-radius:7px;background:#febc2e;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25)"></div></div>
|
||
<div style="width:1px;height:18px;background:#3f424d"></div>
|
||
<span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>
|
||
<span style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</span>
|
||
<span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">运行测试 · ~/src/terminalx</span>
|
||
</div>
|
||
<div style="height:34px;flex:none;display:flex;align-items:center;gap:16px;padding:0 18px;background:#161826;border-top:1px solid #2c2f3d;font:400 11.5px 'JetBrains Mono',monospace;color:#75798c"><span>遮罩态 · 点终端任意处收起</span><span style="margin-left:auto;display:flex;gap:14px"><span><b style="color:#b2b6ca">⌘\</b> 收起</span><span><b style="color:#b2b6ca">Pin</b> 钉在左侧</span><span><b style="color:#b2b6ca">⌘⇧H</b> 回首页</span><span><b style="color:#b2b6ca">⏎</b> 切换会话</span></span></div>
|
||
<div style="height:14px;flex:none;display:flex;align-items:center;justify-content:center;background:#161826"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
</div>
|
||
<div style="position:absolute;inset:0;left:288px;background:rgba(10,11,18,.5)"></div>
|
||
<div style="position:absolute;top:0;bottom:0;left:0;width:288px;background:#1b1d2b;border-right:1px solid #3f424d;box-shadow:24px 0 60px rgba(0,0,0,.55);display:flex;flex-direction:column;padding-top:16px">
|
||
<div style="padding:0 12px 10px;display:flex;align-items:center;gap:8px">
|
||
<div style="width:30px;height:30px;border-radius:10px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 15px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<span style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">terminalX</span>
|
||
<div style="margin-left:auto;display:flex;gap:6px">
|
||
<div style="width:30px;height:30px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:13px"><i class="ph ph-push-pin"></i></div>
|
||
<div style="width:30px;height:30px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:13px"><i class="ph ph-caret-double-left"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="padding:0 12px 8px"><div style="height:32px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;gap:7px;padding:0 10px;font:400 12.5px 'JetBrains Mono',monospace;color:#75798c"><i class="ph ph-magnifying-glass"></i> 搜索主机 · 会话</div></div>
|
||
<div style="padding:0 8px 2px"><div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px"><span style="width:26px;text-align:center;color:#b5abfc;font-size:15px"><i class="ph ph-house"></i></span><span style="font:500 13px 'JetBrains Mono',monospace;color:#e9e9ed">首页</span><span style="margin-left:auto;font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">⌘⇧H</span></div></div>
|
||
<div style="padding:10px 16px 5px;display:flex;align-items:baseline"><span style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">活动会话</span><span style="margin-left:auto;font:400 10px 'JetBrains Mono',monospace;color:#5d5294">3</span></div>
|
||
<div style="padding:0 8px;display:flex;flex-direction:column;gap:2px">
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;"><div style="position:relative;width:26px;height:26px;flex:none;border-radius:8px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 11px 'JetBrains Mono',monospace;color:#d2cefd">ms<span style="position:absolute;right:-2px;top:-2px;width:7px;height:7px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="flex:1;min-width:0"><div style="font:500 13px 'JetBrains Mono',monospace;color:#e9e9ed;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">mac-studio · dev</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">运行测试 · 3 windows</div></div><span style="font:500 10px 'JetBrains Mono',monospace;color:#75798c;flex:none"> 41ms</span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px;"><div style="position:relative;width:26px;height:26px;flex:none;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 11px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-2px;top:-2px;width:7px;height:7px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="flex:1;min-width:0"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">ubuntu-cn2 · build</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">集成测试 · 1 window</div></div><span style="font:500 10px 'JetBrains Mono',monospace;color:#75798c;flex:none">186ms</span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px;"><div style="position:relative;width:26px;height:26px;flex:none;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 11px 'JetBrains Mono',monospace;color:#9397ab">nh<span style="position:absolute;right:-2px;top:-2px;width:7px;height:7px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="flex:1;min-width:0"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">nas-home</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">原生窗口 · ~</div></div><span style="font:500 10px 'JetBrains Mono',monospace;color:#fab387;flex:none">重连中</span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px"><span style="width:26px;text-align:center;color:#5d5294;font-size:14px"><i class="ph ph-plus"></i></span><span style="font:400 12.5px 'JetBrains Mono',monospace;color:#75798c">连接新主机…</span></div>
|
||
</div>
|
||
<div style="height:1px;margin:12px 16px;background:linear-gradient(to right,transparent,#2c2f3d 20px,#2c2f3d calc(100% - 20px),transparent)"></div>
|
||
<div style="padding:0 16px 5px;display:flex;align-items:baseline"><span style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">TMUX · mac-studio · dev</span></div>
|
||
<div style="padding:0 8px;display:flex;flex-direction:column;gap:2px">
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;"><span style="width:26px;height:22px;flex:none;border-radius:7px;background:#2b2741;display:flex;align-items:center;justify-content:center;font:500 10.5px 'JetBrains Mono',monospace;color:#d2cefd">0</span><div style="flex:1;min-width:0"><div style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">运行测试</div><div style="font:400 10px 'JetBrains Mono',monospace;color:#75798c">~/src/terminalx · 2 panes</div></div><span style="width:5px;height:5px;border-radius:3px;background:#a6e3a1;flex:none"></span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px;"><span style="width:26px;height:22px;flex:none;border-radius:7px;background:#1e1f2c;display:flex;align-items:center;justify-content:center;font:500 10.5px 'JetBrains Mono',monospace;color:#5d5294">1</span><div style="flex:1;min-width:0"><div style="font:400 12.5px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">日志</div><div style="font:400 10px 'JetBrains Mono',monospace;color:#75798c">~/src/terminalx</div></div></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px;"><span style="width:26px;height:22px;flex:none;border-radius:7px;background:#1e1f2c;display:flex;align-items:center;justify-content:center;font:500 10.5px 'JetBrains Mono',monospace;color:#5d5294">2</span><div style="flex:1;min-width:0"><div style="font:400 12.5px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">nvim Theme.swift</div><div style="font:400 10px 'JetBrains Mono',monospace;color:#75798c">packages/TXCore</div></div></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px"><span style="width:22px;text-align:center;color:#5d5294;font-size:13px"><i class="ph ph-plus"></i></span><span style="font:400 12.5px 'JetBrains Mono',monospace;color:#75798c">新建 window ⌘T</span></div>
|
||
</div>
|
||
|
||
<div style="margin-top:auto;border-top:1px solid #2c2f3d;padding:9px 12px;display:flex;align-items:center;gap:9px"><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span><div style="flex:1"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5">Tailscale 已连接</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">ipad-pro · 100.92.14.7</div></div><span style="color:#75798c;font-size:13px"><i class="ph ph-gear-six"></i></span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="dv-card" style="width:1366px">
|
||
<div data-screen-label="3a 侧边栏-Pin 态" style="width:1366px;height:1024px;background:#11121c;display:flex;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="width:288px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;padding-top:16px">
|
||
<div style="padding:0 12px 10px;display:flex;align-items:center;gap:8px">
|
||
<div style="width:30px;height:30px;border-radius:10px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 15px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<span style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">terminalX</span>
|
||
<div style="margin-left:auto;display:flex;gap:6px">
|
||
<div style="width:30px;height:30px;border-radius:8px;background:#2b2741;border:1px solid #5d5294;display:flex;align-items:center;justify-content:center;color:#d2cefd;font-size:13px"><i class="ph ph-push-pin"></i></div>
|
||
<div style="width:30px;height:30px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:13px"><i class="ph ph-caret-double-left"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="padding:0 12px 8px"><div style="height:32px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;gap:7px;padding:0 10px;font:400 12.5px 'JetBrains Mono',monospace;color:#75798c"><i class="ph ph-magnifying-glass"></i> 搜索主机 · 会话</div></div>
|
||
<div style="padding:0 8px 2px"><div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px"><span style="width:26px;text-align:center;color:#b5abfc;font-size:15px"><i class="ph ph-house"></i></span><span style="font:500 13px 'JetBrains Mono',monospace;color:#e9e9ed">首页</span><span style="margin-left:auto;font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">⌘⇧H</span></div></div>
|
||
<div style="padding:10px 16px 5px;display:flex;align-items:baseline"><span style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">活动会话</span><span style="margin-left:auto;font:400 10px 'JetBrains Mono',monospace;color:#5d5294">3</span></div>
|
||
<div style="padding:0 8px;display:flex;flex-direction:column;gap:2px">
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;"><div style="position:relative;width:26px;height:26px;flex:none;border-radius:8px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 11px 'JetBrains Mono',monospace;color:#d2cefd">ms<span style="position:absolute;right:-2px;top:-2px;width:7px;height:7px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="flex:1;min-width:0"><div style="font:500 13px 'JetBrains Mono',monospace;color:#e9e9ed;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">mac-studio · dev</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">运行测试 · 3 windows</div></div><span style="font:500 10px 'JetBrains Mono',monospace;color:#75798c;flex:none"> 41ms</span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px;"><div style="position:relative;width:26px;height:26px;flex:none;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 11px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-2px;top:-2px;width:7px;height:7px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="flex:1;min-width:0"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">ubuntu-cn2 · build</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">集成测试 · 1 window</div></div><span style="font:500 10px 'JetBrains Mono',monospace;color:#75798c;flex:none">186ms</span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px;"><div style="position:relative;width:26px;height:26px;flex:none;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 11px 'JetBrains Mono',monospace;color:#9397ab">nh<span style="position:absolute;right:-2px;top:-2px;width:7px;height:7px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="flex:1;min-width:0"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">nas-home</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">原生窗口 · ~</div></div><span style="font:500 10px 'JetBrains Mono',monospace;color:#fab387;flex:none">重连中</span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:8px 9px;border-radius:9px"><span style="width:26px;text-align:center;color:#5d5294;font-size:14px"><i class="ph ph-plus"></i></span><span style="font:400 12.5px 'JetBrains Mono',monospace;color:#75798c">连接新主机…</span></div>
|
||
</div>
|
||
<div style="height:1px;margin:12px 16px;background:linear-gradient(to right,transparent,#2c2f3d 20px,#2c2f3d calc(100% - 20px),transparent)"></div>
|
||
<div style="padding:0 16px 5px;display:flex;align-items:baseline"><span style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">TMUX · mac-studio · dev</span></div>
|
||
<div style="padding:0 8px;display:flex;flex-direction:column;gap:2px">
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;"><span style="width:26px;height:22px;flex:none;border-radius:7px;background:#2b2741;display:flex;align-items:center;justify-content:center;font:500 10.5px 'JetBrains Mono',monospace;color:#d2cefd">0</span><div style="flex:1;min-width:0"><div style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">运行测试</div><div style="font:400 10px 'JetBrains Mono',monospace;color:#75798c">~/src/terminalx · 2 panes</div></div><span style="width:5px;height:5px;border-radius:3px;background:#a6e3a1;flex:none"></span></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px;"><span style="width:26px;height:22px;flex:none;border-radius:7px;background:#1e1f2c;display:flex;align-items:center;justify-content:center;font:500 10.5px 'JetBrains Mono',monospace;color:#5d5294">1</span><div style="flex:1;min-width:0"><div style="font:400 12.5px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">日志</div><div style="font:400 10px 'JetBrains Mono',monospace;color:#75798c">~/src/terminalx</div></div></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px;"><span style="width:26px;height:22px;flex:none;border-radius:7px;background:#1e1f2c;display:flex;align-items:center;justify-content:center;font:500 10.5px 'JetBrains Mono',monospace;color:#5d5294">2</span><div style="flex:1;min-width:0"><div style="font:400 12.5px 'JetBrains Mono',monospace;color:#cfd3e5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis">nvim Theme.swift</div><div style="font:400 10px 'JetBrains Mono',monospace;color:#75798c">packages/TXCore</div></div></div>
|
||
<div style="display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:9px"><span style="width:22px;text-align:center;color:#5d5294;font-size:13px"><i class="ph ph-plus"></i></span><span style="font:400 12.5px 'JetBrains Mono',monospace;color:#75798c">新建 window ⌘T</span></div>
|
||
</div>
|
||
|
||
<div style="margin-top:auto;border-top:1px solid #2c2f3d;padding:9px 12px;display:flex;align-items:center;gap:9px"><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span><div style="flex:1"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5">Tailscale 已连接</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">ipad-pro · 100.92.14.7</div></div><span style="color:#75798c;font-size:13px"><i class="ph ph-gear-six"></i></span></div>
|
||
</div>
|
||
<div style="flex:1;position:relative;display:flex;flex-direction:column;min-width:0;background:#11121c">
|
||
<div style="flex:1;display:flex;flex-direction:column;padding:2px;min-height:0">
|
||
<div style="flex:1.7;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;outline:1px solid #6c5f9e;min-height:0">
|
||
<div style="flex:1;padding:86px 20px 12px;font:400 13.5px/1.55 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git status --short</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/RailSidebar.swift</div><div><span style="color:#a6e3a1">??</span> docs/ui/sidebar-states.md</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
<div style="height:12px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:44px;height:3px;border-radius:2px;background:#3f424d"></div></div>
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;min-height:0">
|
||
<div style="height:26px;flex:none;display:flex;align-items:center;padding:0 14px;font:500 11px 'JetBrains Mono',monospace;color:#6c7086">0.1 · 日志 · log stream --style compact<span style="margin-left:auto;color:#585b70">132×17</span></div>
|
||
<div style="flex:1;padding:2px 20px 12px;font:400 12px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms<span style="background:#a6adc8;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;right:16px;display:flex;align-items:center;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:5px 6px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>tsnet</div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca">mosh<span style="color:#a6e3a1">41ms</span></div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">tmux<span>dev</span></div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;left:16px;display:flex;align-items:center;gap:10px;background:rgba(27,29,43,.9);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:7px 13px 7px 11px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:7px"><div style="width:13px;height:13px;border-radius:7px;background:#ff5f57;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25)"></div><div style="width:13px;height:13px;border-radius:7px;background:#febc2e;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25)"></div></div>
|
||
<div style="width:1px;height:18px;background:#3f424d"></div>
|
||
<span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>
|
||
<span style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</span>
|
||
<span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">运行测试 · ~/src/terminalx</span>
|
||
</div>
|
||
<div style="height:34px;flex:none;display:flex;align-items:center;gap:16px;padding:0 18px;background:#161826;border-top:1px solid #2c2f3d;font:400 11.5px 'JetBrains Mono',monospace;color:#75798c"><span>Pin 态 · 终端变窄,仅在钉住/解除时各 resize 一次</span><span style="margin-left:auto;display:flex;gap:14px"><span><b style="color:#b2b6ca">Pin</b> 解除钉住</span><span><b style="color:#b2b6ca">⌘\</b> 收起为轨道</span><span><b style="color:#b2b6ca">⌘⇧H</b> 回首页</span></span></div>
|
||
<div style="height:14px;flex:none;display:flex;align-items:center;justify-content:center;background:#161826"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="dv-opt" id="3b">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#3b">3b</a><span><b style="color:#e9e9ed;font-weight:500">新建分屏:只问"分到哪个会话"</b> 竖分 / 横分本来就是两个不同的按钮(⌘D / ⌘⇧D,触控是轨道 + 的两枚小图标),所以菜单不再问方向。菜单只列出<b style="color:#b2b6ca;font-weight:400">这台主机上的 tmux 会话</b>(含当前会话、可接管的 detached 会话、新建会话),最后追加一项<b style="color:#b2b6ca;font-weight:400">原生窗口</b>。选完立即分屏——此稿右侧就是选中「dev(当前会话)」后竖分的结果。</span></div>
|
||
<div class="dv-card">
|
||
<div data-screen-label="3b 新建分屏菜单" style="width:1366px;height:1024px;background:#11121c;display:flex;position:relative;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="width:56px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;align-items:center;padding:28px 0 12px;gap:8px">
|
||
<div style="width:34px;height:34px;border-radius:11px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 16px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-magnifying-glass"></i></div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-house"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:6px 0"></div>
|
||
<div style="position:relative;width:38px;height:38px;border-radius:11px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#d2cefd">ms<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">nh<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="width:38px;height:38px;border-radius:11px;border:1px dashed #796cbf;display:flex;align-items:center;justify-content:center;font-size:16px;color:#b5abfc"><i class="ph ph-plus"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:8px 0"></div>
|
||
<div style="font:600 9px 'JetBrains Mono',monospace;letter-spacing:.1em;color:#5d5294;margin-bottom:2px">TMUX</div>
|
||
<div style="width:34px;height:30px;border-radius:9px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed">0</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">1</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">2</div>
|
||
<div style="margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div style="width:8px;height:8px;border-radius:4px;background:#a6e3a1;margin:3px 0"></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:13px"><i class="ph ph-caret-double-right"></i></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#75798c;font-size:15px"><i class="ph ph-gear-six"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:1;position:relative;display:flex;flex-direction:column;min-width:0;background:#11121c">
|
||
<div style="flex:1;display:flex;gap:12px;padding:2px;min-height:0">
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;outline:1px solid #6c5f9e;min-width:0">
|
||
<div style="flex:1;padding:86px 18px 12px;font:400 13px/1.55 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift package resolve</div><div><span style="color:#6c7086">Fetching TXCore … resolved</span></div><div><span style="color:#6c7086">Fetching swift-log 1.6.1 … resolved</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodebuild -showsdks | head -2</div><div><span style="color:#6c7086">iOS SDKs: iOS 26.2 (iphoneos26.2)</span></div><div><span style="color:#6c7086">macOS SDKs: macOS 26.2 (macosx26.2)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swiftformat --lint Sources</div><div><span style="color:#a6e3a1">✓ 0 issues in 84 files</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcrun simctl list devices booted</div><div><span style="color:#6c7086">-- iOS 26.2 --</span></div><div><span style="color:#6c7086"> iPad Pro 13-inch (M4) (Booted)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift package resolve</div><div><span style="color:#6c7086">Fetching TXCore … resolved</span></div><div><span style="color:#6c7086">Fetching swift-log 1.6.1 … resolved</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodebuild -showsdks | head -2</div><div><span style="color:#6c7086">iOS SDKs: iOS 26.2 (iphoneos26.2)</span></div><div><span style="color:#6c7086">macOS SDKs: macOS 26.2 (macosx26.2)</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git status --short</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/RailSidebar.swift</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/SessionRouter.swift</div><div><span style="color:#a6e3a1">??</span> docs/ui/home-and-close.md</div><div> </div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
<div style="width:1px;flex:none;background:linear-gradient(to bottom,transparent,#3f424d 12%,#3f424d 88%,transparent);position:relative;display:flex;align-items:center;justify-content:center"><div style="position:absolute;width:5px;height:56px;border-radius:3px;background:#4a4d5e"></div></div>
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;min-width:0">
|
||
<div style="height:26px;flex:none;display:flex;align-items:center;padding:0 14px;font:500 11px 'JetBrains Mono',monospace;color:#6c7086">0.1 · 日志 · log stream --style compact</div>
|
||
<div style="flex:1;padding:2px 18px 12px;font:400 12px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:06:41</span> terminalx: tmux %window-renamed 0</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:06:41</span> terminalx: tmux %window-renamed 0</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:06:41</span> terminalx: tmux %window-renamed 0</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:06:41</span> terminalx: tmux %window-renamed 0</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"<span style="background:#a6adc8;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;right:16px;display:flex;align-items:center;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:5px 6px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>tsnet</div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca">mosh<span style="color:#a6e3a1">41ms</span></div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">tmux<span>dev</span></div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;left:16px;display:flex;align-items:center;gap:10px;background:rgba(27,29,43,.9);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:7px 13px 7px 11px;box-shadow:0 10px 30px rgba(0,0,0,.55);">
|
||
<div style="display:flex;align-items:center;gap:7px"><div style="width:13px;height:13px;border-radius:7px;background:#ff5f57;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center;font:700 8px 'JetBrains Mono',monospace;color:transparent">✕</div><div style="width:13px;height:13px;border-radius:7px;background:#febc2e;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center;font:700 8px 'JetBrains Mono',monospace;color:transparent">–</div></div>
|
||
<div style="width:1px;height:18px;background:#3f424d"></div>
|
||
<span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>
|
||
<span style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</span>
|
||
<span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">运行测试 · ~/src/terminalx</span>
|
||
</div>
|
||
<div style="height:34px;flex:none;display:flex;align-items:center;gap:16px;padding:0 18px;background:#161826;border-top:1px solid #2c2f3d;font:400 11.5px 'JetBrains Mono',monospace;color:#75798c"><span>竖分屏 · 选择分到哪个会话</span><span style="margin-left:auto;display:flex;gap:14px"><span><b style="color:#b2b6ca">⌘D</b> 竖分</span><span><b style="color:#b2b6ca">⌘⇧D</b> 横分</span><span><b style="color:#b2b6ca">↑↓</b> 移动</span><span><b style="color:#b2b6ca">⏎</b> 立即分屏</span></span></div>
|
||
<div style="height:14px;flex:none;display:flex;align-items:center;justify-content:center;background:#161826"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
<div style="position:absolute;inset:0;background:rgba(10,11,18,.42)"></div>
|
||
<div style="position:absolute;left:20px;top:150px;width:360px;background:#1b1d2b;border:1px solid #595d6c;border-radius:14px;box-shadow:0 30px 80px rgba(0,0,0,.7);overflow:hidden">
|
||
<div style="padding:12px 14px;border-bottom:1px solid #2c2f3d;display:flex;align-items:center;gap:9px"><span style="color:#b5abfc;font-size:14px"><i class="ph ph-columns"></i></span><span style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed">竖分屏到…</span><span style="margin-left:auto;font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">mac-studio</span></div>
|
||
<div style="padding:6px">
|
||
<div style="padding:6px 12px 4px;font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#5d5294">tmux 会话</div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:9px;background:#2b2741;">
|
||
<span style="width:20px;flex:none;display:flex;align-items:center;justify-content:center"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span></span>
|
||
<div style="flex:1;min-width:0"><div style="font:500 13px 'JetBrains Mono',monospace;color:#e9e9ed">dev</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">运行测试 · 3 windows · 4 panes</div></div>
|
||
|
||
<span style="font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">当前</span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:9px;">
|
||
<span style="width:20px;flex:none;display:flex;align-items:center;justify-content:center"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span></span>
|
||
<div style="flex:1;min-width:0"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">scratch</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">zsh · 1 window · detached</div></div>
|
||
|
||
<span style="font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">3 天前</span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:9px;">
|
||
<span style="width:20px;flex:none;display:flex;align-items:center;justify-content:center"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span></span>
|
||
<div style="flex:1;min-width:0"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">deploy</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">部署脚本 · 2 windows · detached</div></div>
|
||
|
||
<span style="font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">昨天</span>
|
||
</div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:9px"><span style="width:20px;text-align:center;color:#75798c;font-size:13px"><i class="ph ph-plus"></i></span><div style="flex:1;font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">新建 tmux 会话…</div></div>
|
||
<div style="height:1px;margin:6px 12px;background:#2c2f3d"></div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:9px"><span style="width:20px;text-align:center;color:#75798c;font-size:13px"><i class="ph ph-terminal-window"></i></span><div style="flex:1;min-width:0"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">原生窗口</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">不经 tmux · 关 App 即结束</div></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="dv-opt" id="3c">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#3c">3c</a><span><b style="color:#e9e9ed;font-weight:500">关闭 / 最小化:红黄两枚圆点</b> 标题胶囊左侧沿用 macOS 语汇:<span style="color:#ff8b85">红</span> = 关闭,<span style="color:#ffd479">黄</span> = 最小化,悬停/触摸才显出符号。黄点<b style="color:#b2b6ca;font-weight:400">不确认</b>,直接回首页、会话继续跑(卡片置顶标「最小化中」)。红点弹一次确认:tmux 默认<span style="color:#cfd3e5">仅断开</span>,结束会话是次要按钮;原生窗口的文案换成"前台进程会结束"。</span></div>
|
||
<div class="dv-card">
|
||
<div data-screen-label="3c 关闭确认" style="width:1366px;height:1024px;background:#11121c;display:flex;position:relative;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="width:56px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;align-items:center;padding:28px 0 12px;gap:8px">
|
||
<div style="width:34px;height:34px;border-radius:11px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 16px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-magnifying-glass"></i></div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-house"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:6px 0"></div>
|
||
<div style="position:relative;width:38px;height:38px;border-radius:11px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#d2cefd">ms<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">nh<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="width:38px;height:38px;border-radius:11px;border:1px dashed #3f424d;display:flex;align-items:center;justify-content:center;font-size:16px;color:#5d5294"><i class="ph ph-plus"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:8px 0"></div>
|
||
<div style="font:600 9px 'JetBrains Mono',monospace;letter-spacing:.1em;color:#5d5294;margin-bottom:2px">TMUX</div>
|
||
<div style="width:34px;height:30px;border-radius:9px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed">0</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">1</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">2</div>
|
||
<div style="margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div style="width:8px;height:8px;border-radius:4px;background:#a6e3a1;margin:3px 0"></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:13px"><i class="ph ph-caret-double-right"></i></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#75798c;font-size:15px"><i class="ph ph-gear-six"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:1;position:relative;display:flex;flex-direction:column;min-width:0;background:#11121c">
|
||
<div style="flex:1;display:flex;flex-direction:column;padding:2px;min-height:0">
|
||
<div style="flex:1.7;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;outline:1px solid #6c5f9e;min-height:0">
|
||
<div style="flex:1;padding:86px 20px 12px;font:400 13.5px/1.55 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git status --short</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/RailSidebar.swift</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/SessionRouter.swift</div><div><span style="color:#a6e3a1">??</span> docs/ui/home-and-close.md</div><div> </div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
<div style="height:12px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:44px;height:3px;border-radius:2px;background:#3f424d"></div></div>
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;min-height:0">
|
||
<div style="height:26px;flex:none;display:flex;align-items:center;padding:0 14px;font:500 11px 'JetBrains Mono',monospace;color:#6c7086">0.1 · 日志 · log stream --style compact<span style="margin-left:auto;color:#585b70">80×17</span></div>
|
||
<div style="flex:1;padding:2px 20px 12px;font:400 12px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"</div><div><span style="color:#6c7086">12:06:41</span> terminalx: tmux %window-renamed 0</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:20</span> terminalx: window title → "运行测试"<span style="background:#a6adc8;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;right:16px;display:flex;align-items:center;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:5px 6px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>tsnet</div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca">mosh<span style="color:#a6e3a1">41ms</span></div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">tmux<span>dev</span></div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;left:16px;display:flex;align-items:center;gap:10px;background:rgba(27,29,43,.9);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:7px 13px 7px 11px;box-shadow:0 10px 30px rgba(0,0,0,.55);z-index:4;">
|
||
<div style="display:flex;align-items:center;gap:7px"><div style="width:13px;height:13px;border-radius:7px;background:#ff5f57;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center;font:700 8px 'JetBrains Mono',monospace;color:rgba(0,0,0,.55)">✕</div><div style="width:13px;height:13px;border-radius:7px;background:#febc2e;box-shadow:inset 0 0 0 .5px rgba(0,0,0,.25);display:flex;align-items:center;justify-content:center;font:700 8px 'JetBrains Mono',monospace;color:transparent">–</div></div>
|
||
<div style="width:1px;height:18px;background:#3f424d"></div>
|
||
<span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>
|
||
<span style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</span>
|
||
<span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">运行测试 · ~/src/terminalx</span>
|
||
</div>
|
||
<div style="height:34px;flex:none;display:flex;align-items:center;gap:16px;padding:0 18px;background:#161826;border-top:1px solid #2c2f3d;font:400 11.5px 'JetBrains Mono',monospace;color:#75798c"><span>关闭当前会话 · 等待确认</span><span style="margin-left:auto;display:flex;gap:14px"><span><b style="color:#b2b6ca">⌘W</b> 关闭</span><span><b style="color:#b2b6ca">⌘M</b> 最小化</span><span><b style="color:#b2b6ca">⏎</b> 仅断开</span><span><b style="color:#b2b6ca">esc</b> 取消</span></span></div>
|
||
<div style="height:14px;flex:none;display:flex;align-items:center;justify-content:center;background:#161826"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
<div style="position:absolute;inset:0;background:rgba(10,11,18,.5);z-index:2"></div>
|
||
<div style="position:absolute;left:20px;top:62px;width:436px;background:#1b1d2b;border:1px solid #595d6c;border-radius:15px;box-shadow:0 30px 80px rgba(0,0,0,.7);overflow:hidden;z-index:4">
|
||
<div style="padding:17px 18px 14px">
|
||
<div style="font:500 14.5px 'JetBrains Mono',monospace;color:#e9e9ed;margin-bottom:6px">关闭 mac-studio · dev?</div>
|
||
<div style="font:400 11.5px/1.65 'JetBrains Mono',monospace;color:#9397ab">tmux 会话(3 windows / 4 panes)。仅断开后服务端继续跑,下次原样接回。</div>
|
||
</div>
|
||
<div style="padding:0 14px 14px;display:flex;align-items:center;gap:8px">
|
||
<span style="font:400 11.5px 'JetBrains Mono',monospace;color:#f5a0ac">结束会话</span>
|
||
<div style="margin-left:auto;display:flex;gap:8px">
|
||
<span style="padding:7px 14px;border-radius:8px;border:1px solid #3f424d;font:400 12px 'JetBrains Mono',monospace;color:#9397ab">取消</span>
|
||
<span style="padding:7px 16px;border-radius:8px;border:1px solid #796cbf;background:rgba(145,132,217,.12);font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">仅断开 ⏎</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;left:480px;top:62px;width:404px;background:#1b1d2b;border:1px solid #3f424d;border-radius:15px;box-shadow:0 24px 60px rgba(0,0,0,.6);overflow:hidden;z-index:4">
|
||
<div style="padding:10px 15px;border-bottom:1px solid #2c2f3d;display:flex;align-items:center;gap:9px"><span style="padding:2px 8px;border-radius:5px;background:#232532;font:400 10px 'JetBrains Mono',monospace;color:#9397ab">对照</span><span style="font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">原生窗口(无 tmux)</span></div>
|
||
<div style="padding:15px 16px 14px">
|
||
<div style="font:500 13.5px 'JetBrains Mono',monospace;color:#e9e9ed;margin-bottom:6px">关闭 nas-home · 窗口 1?</div>
|
||
<div style="display:flex;gap:9px;align-items:flex-start"><span style="color:#fab387;font-size:13px;margin-top:1px"><i class="ph ph-warning"></i></span><div style="font:400 11.5px/1.65 'JetBrains Mono',monospace;color:#9397ab">没有 tmux 兜底,<span style="color:#f5c99b">前台进程会随之结束</span>。想留着就点黄点最小化。</div></div>
|
||
</div>
|
||
<div style="padding:0 16px 14px;display:flex;gap:8px;justify-content:flex-end">
|
||
<span style="padding:7px 14px;border-radius:8px;border:1px solid #3f424d;font:400 12px 'JetBrains Mono',monospace;color:#9397ab">取消</span>
|
||
<span style="padding:7px 16px;border-radius:8px;border:1px solid #8d5560;background:rgba(92,58,63,.35);font:500 12px 'JetBrains Mono',monospace;color:#f5a0ac">关闭窗口</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="dv-opt" id="3d">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#3d">3d</a><span><b style="color:#e9e9ed;font-weight:500">首页 ⇄ 终端:四条路径与返回规则</b> 把两屏之间所有出入口画在一起。<b style="color:#b2b6ca;font-weight:400">进入</b>只有两种(恢复已有会话 / 新建会话),<b style="color:#b2b6ca;font-weight:400">离开</b>有三种(首页键、最小化、关闭),三者都落到同一张落地页——差别只在会话的去向:继续跑 / 后台 detach / 结束。换会话不必回首页,侧边栏里点一下即可。</span></div>
|
||
<div class="dv-card">
|
||
<div data-screen-label="3d 页面跳转关系" style="width:1366px;height:1024px;background:#11121c;display:flex;flex-direction:column;padding:34px 40px;gap:20px;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div>
|
||
<h2 style="margin:0 0 4px;font:500 24px 'JetBrains Mono',monospace;letter-spacing:-.02em;color:#e9e9ed">首页(主机管理) ⇄ 终端主界面</h2>
|
||
<div style="font:400 12.5px 'JetBrains Mono',monospace;color:#75798c">App 冷启动永远落在首页;终端是"进入某个会话"的结果,不是独立 tab。</div>
|
||
</div>
|
||
<div style="flex:1;min-height:0;display:flex;gap:18px;align-items:stretch">
|
||
<div style="flex:1;min-width:0;background:#161826;border:1px solid #423a6a;border-radius:13px;overflow:hidden;display:flex;flex-direction:column">
|
||
<div style="height:32px;flex:none;display:flex;align-items:center;gap:8px;padding:0 13px;border-bottom:1px solid #2c2f3d;background:#1b1d2b"><span style="width:6px;height:6px;border-radius:3px;background:#968ae0"></span><span style="font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed">首页 · 主机管理(落地页)</span></div>
|
||
<div style="flex:1;padding:12px 13px;display:flex;flex-direction:column;gap:8px"><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">活动会话(最上排)</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">三张缩略卡:前台运行 / 后台 detach / 重连中,点卡片即进终端</div></div><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">全部主机(下排)</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">点主机 → 若有会话则列出可接管的,否则直接新建</div></div><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">从最小化回来</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">卡片右上角标「最小化中」,点一下瞬间恢复,光标位置不变</div></div><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">冷启动 / ⌘⇧H</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">都停在这里,不自动进任何会话</div></div></div>
|
||
</div>
|
||
<div style="width:300px;flex:none;display:flex;flex-direction:column;gap:9px;justify-content:center">
|
||
<div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c;padding-left:2px">进入终端</div>
|
||
<div style="display:flex;align-items:flex-start;gap:11px;padding:11px 13px;background:#1b1d2b;border:1px solid #423a6a;border-radius:10px">
|
||
<span style="font-size:15px;color:#b5abfc;margin-top:1px"><i class="ph ph-arrow-right"></i></span>
|
||
<div style="flex:1"><div style="font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed;margin-bottom:3px">恢复已有会话</div><div style="font:400 10.5px/1.55 'JetBrains Mono',monospace;color:#9397ab">点活动会话卡 / 主机下的会话行 → 直接进终端,恢复到上一个焦点 pane</div></div>
|
||
</div>
|
||
<div style="display:flex;align-items:flex-start;gap:11px;padding:11px 13px;background:#1b1d2b;border:1px solid #423a6a;border-radius:10px">
|
||
<span style="font-size:15px;color:#b5abfc;margin-top:1px"><i class="ph ph-arrow-right"></i></span>
|
||
<div style="flex:1"><div style="font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed;margin-bottom:3px">新建会话</div><div style="font:400 10.5px/1.55 'JetBrains Mono',monospace;color:#9397ab">点「新建连接」或主机上的 + → 建好即进终端,侧边栏同步出现该会话</div></div>
|
||
</div>
|
||
<div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c;padding-left:2px;margin-top:6px">离开终端</div>
|
||
<div style="display:flex;align-items:flex-start;gap:11px;padding:11px 13px;background:#1b1d2b;border:1px solid #2c2f3d;border-radius:10px">
|
||
<span style="font-size:15px;color:#75798c;margin-top:1px"><i class="ph ph-arrow-left"></i></span>
|
||
<div style="flex:1"><div style="font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed;margin-bottom:3px">首页键(侧边栏第一行)</div><div style="font:400 10.5px/1.55 'JetBrains Mono',monospace;color:#9397ab">会话完全不动,随时切回;用于"去看看别的主机"</div></div>
|
||
</div>
|
||
<div style="display:flex;align-items:flex-start;gap:11px;padding:11px 13px;background:#1b1d2b;border:1px solid #2c2f3d;border-radius:10px">
|
||
<span style="font-size:15px;color:#75798c;margin-top:1px"><i class="ph ph-arrow-left"></i></span>
|
||
<div style="flex:1"><div style="font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed;margin-bottom:3px">最小化(黄点)</div><div style="font:400 10.5px/1.55 'JetBrains Mono',monospace;color:#9397ab">等同首页键,但明确表达"我待会儿还回来",卡片置顶并标记</div></div>
|
||
</div>
|
||
<div style="display:flex;align-items:flex-start;gap:11px;padding:11px 13px;background:#1b1d2b;border:1px solid #5c4a35;border-radius:10px">
|
||
<span style="font-size:15px;color:#fab387;margin-top:1px"><i class="ph ph-arrow-left"></i></span>
|
||
<div style="flex:1"><div style="font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed;margin-bottom:3px">关闭(红点)· 二次确认</div><div style="font:400 10.5px/1.55 'JetBrains Mono',monospace;color:#9397ab">tmux 默认 detach(后台跑);原生窗口会结束进程,文案单独写</div></div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:1;min-width:0;background:#161826;border:1px solid #2c2f3d;border-radius:13px;overflow:hidden;display:flex;flex-direction:column">
|
||
<div style="height:32px;flex:none;display:flex;align-items:center;gap:8px;padding:0 13px;border-bottom:1px solid #2c2f3d;background:#1b1d2b"><span style="width:6px;height:6px;border-radius:3px;background:#75798c"></span><span style="font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed">终端主界面 · 沉浸轨道</span></div>
|
||
<div style="flex:1;padding:12px 13px;display:flex;flex-direction:column;gap:8px"><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">侧边栏第一行:首页</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">折叠态显示为图标,展开态显示完整标题;同一条栏、同一个位置,⌘⇧H 随时可用</div></div><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">标题胶囊左侧:红点 / 黄点</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">红点关闭需二次确认后回首页;黄点最小化不确认,直接回首页、会话继续</div></div><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">活动会话就在侧边栏</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">切会话不必回首页,回首页是"换任务"而不是"切窗口"</div></div><div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:9px;padding:9px 11px"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:3px">Pin 后常驻</div><div style="font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#75798c">侧边栏钉在左侧时,切会话与看终端可同时进行,无需任何中间层</div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:none;display:flex;gap:14px">
|
||
<div style="flex:1;background:#1b1d2b;border:1px solid #2c2f3d;border-radius:11px;padding:13px 15px;display:flex;gap:11px">
|
||
<span style="color:#b5abfc;font-size:14px;margin-top:1px"><i class="ph ph-lightbulb"></i></span>
|
||
<div style="font:400 11.5px/1.65 'JetBrains Mono',monospace;color:#9397ab"><b style="color:#e9e9ed;font-weight:500">建议一:</b>"最小化"在 iPad 上没有 Dock 承接,容易被理解成"藏起来找不到了"。仍保留这枚按钮,但把落点讲清楚——回到首页后该卡片<span style="color:#cfd3e5">置顶并标记「最小化中」</span>,动画从终端缩回卡片,用户就知道东西去哪了。</div>
|
||
</div>
|
||
<div style="flex:1;background:#1b1d2b;border:1px solid #2c2f3d;border-radius:11px;padding:13px 15px;display:flex;gap:11px">
|
||
<span style="color:#b5abfc;font-size:14px;margin-top:1px"><i class="ph ph-lightbulb"></i></span>
|
||
<div style="font:400 11.5px/1.65 'JetBrains Mono',monospace;color:#9397ab"><b style="color:#e9e9ed;font-weight:500">建议二:</b>"关闭"对 tmux 与原生窗口的后果完全不同,别用同一句确认。tmux 默认 <span style="color:#cfd3e5">detach 而非 kill</span>,把 kill 放在第二项;原生窗口则明说"进程会结束"。另外给最小化配下滑手势、关闭配 ⌘W,二次确认支持 ⏎ 直接选推荐项。</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="dv-turn" id="t2">
|
||
<div class="dv-thd"><a class="dv-tid" href="#t2">2</a><span class="dv-tname">沉浸轨道深化 · 无 tmux 主机 / 竖屏降级(跨主机分屏、浮层侧边栏、会话总览三稿已作废)</span></div>
|
||
<div style="max-width:1180px;margin:0 0 34px;display:grid;grid-template-columns:repeat(3,1fr);gap:16px">
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">展开策略(已更新)</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">原「浮层压在轨道旁」的方案已作废(会出现两套入口)。现行方案:遮罩态面板盖住轨道,Pin 后才推挤终端。见第 3 轮 <a class="dv-oid" href="#3a">3a</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">分屏模型(已更新)</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">跨主机分屏已取消,分屏只在同一台主机内:tmux pane 由服务端持有、断线保持;原生窗口不经 tmux。新建交互见第 3 轮 <a class="dv-oid" href="#3b">3b</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">无 tmux 主机</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">轨道隐藏 TMUX 段,换成客户端「窗口」段;胶囊第三格写"无 tmux"。可随时新建与 tmux 无关的窗口。见 <a class="dv-oid" href="#2c">2c</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">竖屏降级</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">iPad 竖屏:轨道 48pt,pane 改上下堆叠,最多两层,多余折成段控。iPhone:轨道下沉为底部主机条,单 pane + 轻扫。见 <a class="dv-oid" href="#2d">2d</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">会话总览(已取消)</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">「⌘O 缩放成卡片」的总览层已去掉,轨道底部相应按钮也移除。切会话直接用侧边栏,换任务用「首页」。跳转关系见第 3 轮 <a class="dv-oid" href="#3d">3d</a>。</div></div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:16px 18px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:9px">保持不变</div><div style="font:400 12px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">状态徽标顺序(tsnet → mosh RTT → tmux/窗口)、Nocturne chrome + Catppuccin 终端、硬件键盘时附加行自动收起——五张新稿全部沿用。</div></div>
|
||
</div>
|
||
<div class="dv-opts">
|
||
<div class="dv-opt" id="2c">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#2c">2c</a><span><b style="color:#e9e9ed;font-weight:500">主机没有 tmux:轨道收起 TMUX 段</b> 轨道下半段不再显示 tmux window 数字条,改为客户端「窗口」段(每个窗口 = 一条独立 SSH channel / mosh 会话),可随意新建。状态胶囊第三格显示「无 tmux」而不是报错。若探测到装了 tmux 但没会话,才在终端顶部给一条可忽略的行内提示——不弹窗、不强推。</span></div>
|
||
<div class="dv-card">
|
||
<div data-screen-label="2c 无 tmux 主机" style="width:1366px;height:1024px;background:#11121c;display:flex;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="width:56px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;align-items:center;padding:28px 0 12px;gap:8px">
|
||
<div style="width:34px;height:34px;border-radius:11px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 16px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-magnifying-glass"></i></div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-house"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:6px 0"></div>
|
||
<div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">ms<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#d2cefd">nh<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="width:38px;height:38px;border-radius:11px;border:1px dashed #3f424d;display:flex;align-items:center;justify-content:center;font-size:16px;color:#5d5294"><i class="ph ph-plus"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:8px 0"></div>
|
||
<div style="font:600 9px 'JetBrains Mono',monospace;letter-spacing:.1em;color:#5d5294;margin-bottom:2px">窗口</div><div style="width:34px;height:30px;border-radius:9px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed">1</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">2</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:#4a4d5e;font-size:13px"><i class="ph ph-plus"></i></div>
|
||
<div style="margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:7px">
|
||
<div style="width:8px;height:8px;border-radius:4px;background:#a6e3a1;margin:3px 0"></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:13px"><i class="ph ph-caret-double-right"></i></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#75798c;font-size:15px"><i class="ph ph-gear-six"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:1;position:relative;display:flex;flex-direction:column;min-width:0">
|
||
<div style="flex:1;display:flex;flex-direction:column;padding:2px;min-height:0">
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;outline:1px solid #6c5f9e;min-height:0">
|
||
<div style="flex:1;padding:122px 20px 12px;font:400 13.5px/1.55 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> zfs get compressratio tank</div><div><span style="color:#6c7086">tank compressratio 1.34x</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> docker stats --no-stream | head -3</div><div><span style="color:#6c7086">NAME CPU % MEM USAGE</span></div><div><span style="color:#6c7086">plex 4.10% 1.21GiB</span></div><div><span style="color:#6c7086">syncthing 0.80% 312MiB</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> zfs get compressratio tank</div><div><span style="color:#6c7086">tank compressratio 1.34x</span></div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> uname -sr</div><div><span style="color:#6c7086">Linux 6.12.9-truenas</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> docker ps --format 'table <span>{</span>{.Names}}'</div><div><span style="color:#6c7086">NAMES STATUS</span></div><div><span style="color:#6c7086">plex Up 6 days</span></div><div><span style="color:#6c7086">syncthing Up 6 days</span></div><div><span style="color:#6c7086">caddy Up 12 hours</span></div><div><span style="color:#6c7086">postgres Up 6 days (healthy)</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> zpool status -x</div><div><span style="color:#6c7086"> all pools are healthy</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> df -h /tank</div><div><span style="color:#6c7086">Filesystem Size Used Avail Use%</span></div><div><span style="color:#6c7086">tank 18T 11T 7.0T 62%</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> zfs list -t snapshot | tail -3</div><div><span style="color:#6c7086">tank/photos@auto-2026-07-24 1.2G</span></div><div><span style="color:#6c7086">tank/docs@auto-2026-07-24 84M</span></div><div><span style="color:#6c7086">tank/vm@auto-2026-07-24 3.4G</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> tail -4 /var/log/syncthing.log</div><div><span style="color:#6c7086"> folder "photos" sync complete</span></div><div><span style="color:#6c7086"> folder "docs" idle</span></div><div><span style="color:#6c7086"> puller: 0 conflicts</span></div><div><span style="color:#6c7086"> scanner: 12,418 files ok</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> smbstatus --shares | head -3</div><div><span style="color:#6c7086">Service pid Machine</span></div><div><span style="color:#6c7086">media 4412 100.92.14.7</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> uptime</div><div><span style="color:#6c7086"> 12:08:03 up 41 days, 3:22, 1 user</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> uname -sr</div><div><span style="color:#6c7086">Linux 6.12.9-truenas</span></div><div> </div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;top:62px;left:16px;right:16px;display:flex;align-items:center;gap:11px;background:rgba(35,37,50,.92);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:10px;padding:9px 13px">
|
||
<span style="color:#b5abfc;font-size:13px"><i class="ph ph-info"></i></span>
|
||
<div style="flex:1;font:400 11.5px 'JetBrains Mono',monospace;color:#9397ab">这台主机上没有 tmux。窗口由 terminalX 客户端维持,mosh 负责断线续传;<span style="color:#cfd3e5">但关掉 App 后不会像 tmux 那样在服务端继续跑</span>。</div>
|
||
<div style="padding:5px 12px;border-radius:7px;border:1px solid #796cbf;font:500 11.5px 'JetBrains Mono',monospace;color:#b5abfc">安装并启用 tmux</div>
|
||
<span style="color:#5d5294;font-size:13px"><i class="ph ph-x"></i></span>
|
||
</div>
|
||
<div style="position:absolute;top:14px;right:16px;display:flex;align-items:center;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:5px 6px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>tsnet</div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca">mosh<span style="color:#a6e3a1">88ms</span></div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#75798c">无 tmux · 客户端窗口</div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;left:16px;display:flex;align-items:center;gap:9px;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:6px 12px;box-shadow:0 10px 30px rgba(0,0,0,.55)"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span><span style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed">nas-home</span><span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">~ · 窗口 1 / 2 · 132×46</span></div>
|
||
<div style="height:34px;flex:none;display:flex;align-items:center;gap:16px;padding:0 18px;background:#161826;border-top:1px solid #2c2f3d;font:400 11.5px 'JetBrains Mono',monospace;color:#75798c"><span>客户端窗口模式 · 每个窗口一条独立通道</span><span style="margin-left:auto;display:flex;gap:14px"><span><b style="color:#b2b6ca">⌘T</b> 新建窗口</span><span><b style="color:#b2b6ca">⌘1…9</b> 切窗口</span><span><b style="color:#b2b6ca">⌘W</b> 关闭窗口</span><span><b style="color:#b2b6ca">⌘K</b> 命令面板</span></span></div>
|
||
<div style="height:14px;flex:none;display:flex;align-items:center;justify-content:center;background:#161826"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="dv-opt" id="2d">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#2d">2d</a><span><b style="color:#e9e9ed;font-weight:500">竖屏 iPad 与 iPhone</b> 竖屏宽度不够并排,规则改为:轨道保留但降到 48pt(拇指可达的左缘),<b style="color:#b2b6ca;font-weight:400">pane 由左右平铺改为上下堆叠</b>,最多两层,第三个 pane 折成顶部段控。状态胶囊压缩成一枚。iPhone 再降一级:轨道变成底部主机条,单 pane 全屏,pane 之间左右轻扫,下拉标题打开会话列表。</span></div>
|
||
<div style="display:flex;gap:22px;align-items:flex-start">
|
||
<div class="dv-card" style="width:1024px">
|
||
<div data-screen-label="2d iPad 竖屏" style="width:1024px;height:1366px;background:#11121c;display:flex;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="width:48px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;align-items:center;padding:22px 0 10px;gap:7px">
|
||
<div style="width:30px;height:30px;border-radius:10px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 14px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-magnifying-glass"></i></div>
|
||
<div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-house"></i></div>
|
||
<div style="width:20px;height:1px;background:#2c2f3d;margin:4px 0"></div>
|
||
<div style="position:relative;width:34px;height:34px;border-radius:10px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 12px 'JetBrains Mono',monospace;color:#d2cefd">ms<span style="position:absolute;right:-1px;top:-1px;width:7px;height:7px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="position:relative;width:34px;height:34px;border-radius:10px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 12px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-1px;top:-1px;width:7px;height:7px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="position:relative;width:34px;height:34px;border-radius:10px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 12px 'JetBrains Mono',monospace;color:#9397ab">nh<span style="position:absolute;right:-1px;top:-1px;width:7px;height:7px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="width:20px;height:1px;background:#2c2f3d;margin:5px 0"></div>
|
||
<div style="width:30px;height:26px;border-radius:8px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;display:flex;align-items:center;justify-content:center;font:500 11px 'JetBrains Mono',monospace;color:#e9e9ed">0</div>
|
||
<div style="width:30px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;font:500 11px 'JetBrains Mono',monospace;color:#75798c">1</div>
|
||
<div style="margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:8px"><div style="width:30px;height:30px;border-radius:9px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:12px"><i class="ph ph-caret-double-right"></i></div><div style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></div><div style="width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:#75798c;font-size:14px"><i class="ph ph-gear-six"></i></div></div>
|
||
</div>
|
||
<div style="flex:1;position:relative;display:flex;flex-direction:column;min-width:0">
|
||
<div style="flex:1;display:flex;flex-direction:column;padding:2px;min-height:0">
|
||
<div style="flex:1.35;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;outline:1px solid #6c5f9e;min-height:0">
|
||
<div style="flex:1;padding:58px 16px 10px;font:400 12.5px/1.55 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swiftformat --lint Sources</div><div><span style="color:#a6e3a1">✓ 0 issues in 84 files</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodebuild -showsdks | head -2</div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div><span style="color:#6c7086">↳ Suite "tmux control mode"</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> %window-add spawns pane tree</div><div><span style="color:#6c7086">↳ Suite "SessionMachine"</span></div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div> <span style="color:#a6e3a1">✔</span> host-key pin survives wipe</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcrun simctl list devices booted</div><div><span style="color:#6c7086">-- iOS 26.2 --</span></div><div><span style="color:#6c7086"> iPad Pro 13-inch (M4) (Booted)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git pull --rebase</div><div><span style="color:#6c7086">From tsnet:athom/terminalx main</span></div><div><span style="color:#a6e3a1">Successfully rebased onto main.</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git status --short</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/ContentView.swift</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/Theme.swift</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
<div style="height:12px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:40px;height:3px;border-radius:2px;background:#3f424d"></div></div>
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;min-height:0">
|
||
<div style="height:24px;flex:none;display:flex;align-items:center;gap:8px;padding:0 12px;font:500 10.5px 'JetBrains Mono',monospace;color:#6c7086">0.1 · log stream --style compact<span style="margin-left:auto;color:#585b70">2/3 pane · 第 3 个已折叠</span></div>
|
||
<div style="flex:1;padding:2px 16px 10px;font:400 11px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#6c7086">12:02:31</span> terminalx: tsnet peer refresh (7)</div><div><span style="color:#6c7086">12:02:58</span> terminalx: mosh heartbeat 38ms</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:02</span> terminalx: ghostty frame 16.4ms</div><div><span style="color:#6c7086">12:06:20</span> terminalx: tsnet peer nas-home <span style="color:#f9e2af">down</span></div><div><span style="color:#6c7086">12:06:41</span> terminalx: retry scheduled in 8s</div><div><span style="color:#6c7086">12:07:03</span> terminalx: tmux %window-add 3</div><div><span style="color:#6c7086">12:01:02</span> terminalx: tmux %output window 0</div><div><span style="color:#6c7086">12:01:19</span> terminalx: mosh heartbeat 41ms</div><div><span style="color:#6c7086">12:01:44</span> terminalx: pane 0.1 resized 60x18</div><div><span style="color:#6c7086">12:02:03</span> terminalx: keychain read host-key</div><div><span style="color:#6c7086">12:02:31</span> terminalx: tsnet peer refresh (7)</div><div><span style="color:#6c7086">12:02:58</span> terminalx: mosh heartbeat 38ms</div><div><span style="color:#6c7086">12:03:12</span> terminalx: ghostty frame 16.7ms</div><div><span style="color:#6c7086">12:03:41</span> terminalx: tmux %layout-change</div><div><span style="color:#6c7086">12:04:02</span> terminalx: <span style="color:#a6e3a1">session dev attached</span></div><div><span style="color:#6c7086">12:04:31</span> terminalx: <span style="color:#f9e2af">link degraded, rtt 210ms</span></div><div><span style="color:#6c7086">12:04:33</span> terminalx: <span style="color:#a6e3a1">mosh resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> terminalx: scrollback trimmed 4k</div><div><span style="color:#6c7086">12:05:44</span> terminalx: pasteboard bridge ok</div><div><span style="color:#6c7086">12:06:02</span> terminalx: ghostty frame 16.4ms</div><div><span style="color:#6c7086">12:06:20</span> terminalx: tsnet peer nas-home <span style="color:#f9e2af">down</span></div><div><span style="color:#6c7086">12:06:41</span> terminalx: retry scheduled in 8s</div><div><span style="color:#6c7086">12:07:03</span> terminalx: tmux %window-add 3<span style="background:#a6adc8;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;top:12px;left:12px;right:12px;display:flex;align-items:center;gap:8px">
|
||
<div style="display:flex;align-items:center;gap:8px;background:rgba(27,29,43,.88);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:10px;padding:5px 11px;font:500 11.5px 'JetBrains Mono',monospace;color:#e9e9ed"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>mac-studio<span style="font-weight:400;color:#75798c">dev</span></div>
|
||
<div style="margin-left:auto;display:flex;align-items:center;gap:6px;background:rgba(27,29,43,.88);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:10px;padding:5px 11px;font:500 11.5px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>41ms</div>
|
||
</div>
|
||
<div style="flex:none;background:#1b1d2b;border-top:1px solid #2c2f3d;padding:8px 10px;display:flex;gap:6px">
|
||
<div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">esc</div><div style="flex:1;height:38px;border-radius:8px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">ctrl</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">tab</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">~</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">/</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">|</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">↑</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">↓</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">←</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">→</div>
|
||
</div>
|
||
<div style="height:20px;flex:none;display:flex;align-items:center;justify-content:center;background:#1b1d2b"><div style="width:160px;height:4px;border-radius:2px;background:#4a4d5e"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="dv-card" style="border-radius:38px;width:393px">
|
||
<div data-screen-label="2d iPhone 竖屏" style="width:393px;height:852px;background:#161826;display:flex;flex-direction:column;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="height:54px;flex:none;display:flex;align-items:flex-end;justify-content:space-between;padding:0 26px 8px;font:600 13px 'JetBrains Mono',monospace;color:#e9e9ed"><span>9:41</span><span style="display:flex;gap:5px;font-size:11px;color:#b2b6ca"><i class="ph ph-wifi-high"></i> <i class="ph ph-battery-high"></i> 78%</span></div>
|
||
<div style="height:40px;flex:none;display:flex;align-items:center;gap:9px;padding:0 14px;border-bottom:1px solid #2c2f3d">
|
||
<span style="color:#b5abfc;font-size:15px"><i class="ph ph-caret-down"></i></span>
|
||
<div style="flex:1;min-width:0"><div style="font:500 13.5px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio · dev</div></div>
|
||
<div style="display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:6px;background:#232532;border:1px solid #3f424d;font:500 11px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:5px;height:5px;border-radius:3px;background:#a6e3a1"></span>41ms</div>
|
||
</div>
|
||
<div style="height:26px;flex:none;display:flex;align-items:center;gap:5px;padding:0 12px;background:#1b1d2b"><span style="width:16px;height:5px;border-radius:3px;background:#968ae0"></span><span style="width:16px;height:5px;border-radius:3px;background:#3f424d"></span><span style="width:16px;height:5px;border-radius:3px;background:#3f424d"></span><span style="margin-left:auto;font:400 10px 'JetBrains Mono',monospace;color:#5d5294">左右轻扫切 pane</span></div>
|
||
<div style="flex:1;min-height:0;background:#1e1e2e;padding:10px 12px;font:400 11.5px/1.5 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swiftformat --lint Sources</div><div><span style="color:#a6e3a1">✓ 0 issues in 84 files</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodebuild -showsdks | head -2</div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div><span style="color:#6c7086">↳ Suite "tmux control mode"</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> %window-add spawns pane tree</div><div><span style="color:#6c7086">↳ Suite "SessionMachine"</span></div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div> <span style="color:#a6e3a1">✔</span> host-key pin survives wipe</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcrun simctl list devices booted</div><div><span style="color:#6c7086">-- iOS 26.2 --</span></div><div><span style="color:#6c7086"> iPad Pro 13-inch (M4) (Booted)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git pull --rebase</div><div><span style="color:#6c7086">From tsnet:athom/terminalx main</span></div><div><span style="color:#a6e3a1">Successfully rebased onto main.</span></div><div> </div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
<div style="flex:none;background:#1b1d2b;border-top:1px solid #2c2f3d;padding:8px 10px;display:flex;flex-direction:column;gap:6px">
|
||
<div style="display:flex;gap:6px"><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">esc</div><div style="flex:1;height:38px;border-radius:8px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">ctrl</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">tab</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">~</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">/</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">|</div></div>
|
||
<div style="display:flex;gap:6px"><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">↑</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">↓</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">←</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">→</div><div style="flex:1.6;height:38px;border-radius:8px;border:1px solid #796cbf;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#b5abfc">⌘K</div></div>
|
||
</div>
|
||
<div style="height:52px;flex:none;display:flex;align-items:center;gap:8px;padding:0 14px;background:#161826;border-top:1px solid #2c2f3d">
|
||
<div style="display:flex;align-items:center;gap:7px;padding:5px 10px;border-radius:9px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;font:500 11.5px 'JetBrains Mono',monospace;color:#d2cefd"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>ms</div>
|
||
<div style="display:flex;align-items:center;gap:7px;padding:5px 10px;border-radius:9px;background:#232532;font:400 11.5px 'JetBrains Mono',monospace;color:#9397ab"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>u2</div>
|
||
<div style="display:flex;align-items:center;gap:7px;padding:5px 10px;border-radius:9px;background:#232532;font:400 11.5px 'JetBrains Mono',monospace;color:#9397ab"><span style="width:6px;height:6px;border-radius:3px;background:#fab387"></span>nh</div>
|
||
|
||
</div>
|
||
<div style="height:22px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:140px;height:5px;border-radius:3px;background:#4a4d5e"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="dv-turn" id="t1">
|
||
<div class="dv-thd"><a class="dv-tid" href="#t1">1</a><span class="dv-tname">terminalX · iPadOS 优先 · 选定方案:1b 沉浸轨道终端 + 1e 会话缩略卡</span></div>
|
||
|
||
<div style="max-width:1080px;margin:0 0 40px;display:flex;flex-direction:column;gap:18px">
|
||
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:20px">
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:18px 20px">
|
||
<div style="font:600 10px/1 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:10px">设计前提</div>
|
||
<div style="font:400 12.5px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">画布尺寸 iPad Pro 13″ 横屏 1366×1024pt(1:1)。App chrome 全部走 Nocturne 令牌;终端内容区保留 Catppuccin Mocha,与 chrome 通过同一深靛蓝底相接。文案简体中文,技术术语(mosh / tmux / tsnet)保留英文。</div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:18px 20px">
|
||
<div style="font:600 10px/1 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:10px">分层状态徽标</div>
|
||
<div style="font:400 12.5px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">三层链路各占一枚徽标,从下到上:<b style="color:#e9e9ed;font-weight:500">tsnet</b>(网络可达)→ <b style="color:#e9e9ed;font-weight:500">mosh RTT</b>(传输健康,数字实时跳动,>200ms 转琥珀)→ <b style="color:#e9e9ed;font-weight:500">tmux 会话名</b>(复用层)。断哪层哪层变色,其余保持中性——避免"全红恐慌"。</div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #3f424d;border-radius:12px;padding:18px 20px">
|
||
<div style="font:600 10px/1 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#968ae0;margin-bottom:10px">iPad 输入取舍</div>
|
||
<div style="font:400 12.5px/1.65 'JetBrains Mono',monospace;color:#b2b6ca">触控时底部常驻 44pt 键盘附加行(Esc/Ctrl/方向/PgUp);检测到硬件键盘则整行收起、只留一条 4pt 提示带,把面积还给终端。pane 分隔线为 12pt 拖拽热区。</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div style="display:flex;flex-direction:column;gap:52px">
|
||
<div><div style="display:flex;align-items:baseline;gap:12px;margin:0 0 16px;padding-bottom:10px;border-bottom:1px solid rgba(233,233,237,.09)"><span style="font:600 11px 'JetBrains Mono',monospace;letter-spacing:.1em;padding:4px 9px;border-radius:6px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;color:#d2cefd">选定</span><span style="font:500 15px 'JetBrains Mono',monospace;color:#e9e9ed">终端主界面 · 沉浸轨道</span><span style="font:400 12px 'JetBrains Mono',monospace;color:rgba(233,233,237,.45)">1b — chrome 全部浮起,终端面积最大</span></div><div class="dv-opts">
|
||
<div class="dv-opt" id="1b">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#1b">1b</a><span><b style="color:#e9e9ed;font-weight:500">终端 · 沉浸轨道</b> 边栏压成 56pt 图标轨道(搜索 · 首页 · 主机 · TMUX window · 设置 · 展开键一应俱全,只是收成图标),chrome 全部浮起为胶囊,终端面积最大。点轨道底部的展开键或 ⌘\ 变成 288pt 完整侧边栏,见 <a class="dv-oid" href="#3a">3a</a>。</span></div>
|
||
<div class="dv-card">
|
||
<div data-screen-label="1b 终端-沉浸轨道" style="width:1366px;height:1024px;background:#11121c;display:flex;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="width:56px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;align-items:center;padding:28px 0 12px;gap:8px">
|
||
<div style="width:34px;height:34px;border-radius:11px;background:#232532;box-shadow:inset 0 0 0 1px #3f424d;display:flex;align-items:center;justify-content:center;font:700 16px 'JetBrains Mono',monospace;color:#b5abfc">›</div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-magnifying-glass"></i></div>
|
||
<div style="width:38px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:16px"><i class="ph ph-house"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:6px 0"></div>
|
||
<div style="position:relative;width:38px;height:38px;border-radius:11px;background:#2b2741;box-shadow:inset 0 0 0 1px #5d5294;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#d2cefd">ms<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">u2<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#a6e3a1;box-shadow:0 0 0 2px #1b1d2b"></span></div><div style="position:relative;width:38px;height:38px;border-radius:11px;background:#232532;display:flex;align-items:center;justify-content:center;font:600 13px 'JetBrains Mono',monospace;color:#9397ab">nh<span style="position:absolute;right:-1px;top:-1px;width:8px;height:8px;border-radius:4px;background:#fab387;box-shadow:0 0 0 2px #1b1d2b"></span></div>
|
||
<div style="width:38px;height:38px;border-radius:11px;border:1px dashed #3f424d;display:flex;align-items:center;justify-content:center;font-size:16px;color:#5d5294"><i class="ph ph-plus"></i></div>
|
||
<div style="width:24px;height:1px;background:#2c2f3d;margin:8px 0"></div>
|
||
<div style="font:600 9px 'JetBrains Mono',monospace;letter-spacing:.1em;color:#5d5294;margin-bottom:2px">TMUX</div>
|
||
<div style="width:34px;height:30px;border-radius:9px;background:#232532;box-shadow:inset 0 0 0 1px #4a4d5e;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#e9e9ed">0</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">1</div><div style="width:34px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#75798c">2</div>
|
||
<div style="margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:10px">
|
||
<div style="width:8px;height:8px;border-radius:4px;background:#a6e3a1"></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca;font-size:13px"><i class="ph ph-caret-double-right"></i></div>
|
||
<div style="width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;color:#75798c;font-size:15px"><i class="ph ph-gear-six"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:1;position:relative;display:flex;flex-direction:column;min-width:0;background:#11121c">
|
||
<div style="flex:1;display:flex;flex-direction:column;padding:2px;min-height:0">
|
||
<div style="flex:1.7;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;outline:1px solid #6c5f9e;min-height:0">
|
||
<div style="flex:1;padding:86px 20px 12px;font:400 13.5px/1.55 'JetBrains Mono',ui-monospace,monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swiftformat --lint Sources</div><div><span style="color:#a6e3a1">✓ 0 issues in 84 files</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div><span style="color:#6c7086">↳ Suite "tmux control mode"</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> %window-add spawns pane tree</div><div><span style="color:#6c7086">↳ Suite "SessionMachine"</span></div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div> <span style="color:#a6e3a1">✔</span> host-key pin survives wipe</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcrun simctl list devices booted</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
<div style="height:12px;flex:none;display:flex;align-items:center;justify-content:center;cursor:row-resize"><div style="width:44px;height:3px;border-radius:2px;background:#3f424d"></div></div>
|
||
<div style="flex:1;display:flex;flex-direction:column;background:#1e1e2e;border-radius:8px;min-height:0">
|
||
<div style="height:26px;flex:none;display:flex;align-items:center;gap:8px;padding:0 14px;font:500 11px 'JetBrains Mono',monospace;color:#6c7086">0.1 · ubuntu-cn2 · journalctl -f<span style="margin-left:auto;color:#585b70">80×14</span></div>
|
||
<div style="flex:1;padding:2px 20px 12px;font:400 12px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#6c7086">12:01:19</span> cn2 mosh-server[891]: heartbeat 41ms</div><div><span style="color:#6c7086">12:01:44</span> cn2 build-runner: job 39 finished</div><div><span style="color:#6c7086">12:02:03</span> cn2 sshd[9931]: session opened for ci</div><div><span style="color:#6c7086">12:02:31</span> cn2 tailscaled: derp hkg 24ms</div><div><span style="color:#6c7086">12:02:58</span> cn2 mosh-server[891]: heartbeat 38ms</div><div><span style="color:#6c7086">12:03:12</span> cn2 systemd: rotated build.log</div><div><span style="color:#6c7086">12:03:41</span> cn2 ninja: 148/148 objects</div><div><span style="color:#6c7086">12:04:12</span> cn2 tailscaled: <span style="color:#a6e3a1">endpoint DIRECT (udp)</span></div><div><span style="color:#6c7086">12:04:31</span> cn2 kernel: <span style="color:#f9e2af">wlan0 rssi -74</span></div><div><span style="color:#6c7086">12:04:33</span> cn2 mosh-server: roaming → :51004</div><div><span style="color:#6c7086">12:04:33</span> cn2 mosh-server: <span style="color:#a6e3a1">resume ok, 0 lost</span></div><div><span style="color:#6c7086">12:05:02</span> cn2 systemd: Started build-runner@42</div><div><span style="color:#6c7086">12:05:44</span> cn2 sshd: Accepted publickey for ci</div><div><span style="color:#6c7086">12:06:02</span> cn2 runner: <span style="color:#a6e3a1">artifact 18.4 MB uploaded</span></div><div><span style="color:#6c7086">12:06:20</span> cn2 tailscaled: peer nas-home <span style="color:#f9e2af">offline</span></div><div><span style="color:#6c7086">12:06:41</span> cn2 cron: rotated /var/log/build.log</div><div><span style="color:#6c7086">12:07:03</span> cn2 systemd: build-runner@42 ok<span style="background:#a6adc8;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;right:16px;display:flex;align-items:center;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:5px 6px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span>tsnet</div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca">mosh<span style="color:#a6e3a1">41ms</span><span style="display:flex;align-items:flex-end;gap:1px;height:10px"><i style="width:2px;height:4px;background:#5d5294;display:block"></i><i style="width:2px;height:7px;background:#796cbf;display:block"></i><i style="width:2px;height:5px;background:#5d5294;display:block"></i><i style="width:2px;height:9px;background:#968ae0;display:block"></i><i style="width:2px;height:6px;background:#796cbf;display:block"></i></span></div>
|
||
<div style="width:1px;height:16px;background:#3f424d"></div>
|
||
<div style="display:flex;align-items:center;gap:6px;padding:3px 10px;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">tmux<span>dev</span></div>
|
||
</div>
|
||
<div style="position:absolute;top:14px;left:16px;display:flex;align-items:center;gap:9px;background:rgba(27,29,43,.86);backdrop-filter:blur(20px);border:1px solid #3f424d;border-radius:11px;padding:6px 12px;box-shadow:0 10px 30px rgba(0,0,0,.55)">
|
||
<span style="width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span><span style="font:500 12.5px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</span><span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">~/src/terminalx · 168×44</span>
|
||
</div>
|
||
<div style="height:34px;flex:none;display:flex;align-items:center;gap:16px;padding:0 18px;background:#161826;border-top:1px solid #2c2f3d;font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">
|
||
<span>已连接妙控键盘 · 附加行已收起</span>
|
||
<span style="margin-left:auto;display:flex;gap:14px"><span><b style="color:#b2b6ca">⌘K</b> 命令面板</span><span><b style="color:#b2b6ca">⌘D</b> 竖分屏</span><span><b style="color:#b2b6ca">⌘⇧D</b> 横分屏</span><span><b style="color:#b2b6ca">⌃⇥</b> 切 window</span><span><b style="color:#b2b6ca">长按 ⌘</b> 全部快捷键</span></span>
|
||
</div>
|
||
<div style="height:14px;flex:none;display:flex;align-items:center;justify-content:center;background:#161826"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div></div>
|
||
<div><div style="display:flex;align-items:baseline;gap:12px;margin:0 0 16px;padding-bottom:10px;border-bottom:1px solid rgba(233,233,237,.09)"><span style="font:600 11px 'JetBrains Mono',monospace;letter-spacing:.1em;padding:4px 9px;border-radius:6px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;color:#d2cefd">选定</span><span style="font:500 15px 'JetBrains Mono',monospace;color:#e9e9ed">主机管理 · 会话缩略卡</span><span style="font:400 12px 'JetBrains Mono',monospace;color:rgba(233,233,237,.45)">1e — 活动会话优先,回到刚才那个会话是首要动作</span></div><div class="dv-opts">
|
||
<div class="dv-opt" id="1e">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#1e">1e</a><span><b style="color:#e9e9ed;font-weight:500">主机 · 会话缩略卡</b> 把「回到刚才那个会话」当作首要动作:上排是活着的会话(真实终端缩略图 + 最后一行输出),下排才是主机网格。适合 2–4 个并行会话来回跳。</span></div>
|
||
<div class="dv-card">
|
||
<div data-screen-label="1e 主机-会话卡" style="width:1366px;height:1024px;background:#161826;display:flex;flex-direction:column;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="height:24px;flex:none;display:flex;align-items:center;justify-content:space-between;padding:0 22px;font:500 12px 'JetBrains Mono',monospace;color:#9397ab"><span>9:41 周五</span><span><i class="ph ph-wifi-high"></i> Wi-Fi · 78%</span></div>
|
||
<div style="padding:22px 40px 14px;display:flex;align-items:flex-end;gap:14px">
|
||
<div>
|
||
<h1 style="margin:0;font:500 34px 'JetBrains Mono',monospace;letter-spacing:-.025em">terminalX</h1>
|
||
<div style="font:400 13px 'JetBrains Mono',monospace;color:#75798c;margin-top:2px">3 个会话在跑 · 7 台主机 · Tailscale athom.ts.net</div>
|
||
</div>
|
||
<div style="margin-left:auto;display:flex;gap:8px">
|
||
<div style="height:36px;width:220px;border-radius:9px;background:#1b1d2b;border:1px solid #3f424d;display:flex;align-items:center;gap:8px;padding:0 12px;font:400 13px 'JetBrains Mono',monospace;color:#75798c"><i class="ph ph-magnifying-glass"></i> 搜索<span style="margin-left:auto;font-size:11px;color:#5d5294">⌘K</span></div>
|
||
<div style="height:36px;padding:0 16px;border-radius:9px;border:1px solid #796cbf;display:flex;align-items:center;gap:7px;font:500 13px 'JetBrains Mono',monospace;color:#b5abfc"><i class="ph ph-plus"></i> 新建连接</div>
|
||
<div style="width:36px;height:36px;border-radius:9px;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;color:#b2b6ca"><i class="ph ph-gear-six"></i></div>
|
||
</div>
|
||
</div>
|
||
<div style="padding:0 40px 6px;display:flex;align-items:baseline;gap:10px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">活动会话</div><div style="flex:1;height:1px;background:linear-gradient(to right,#2c2f3d,transparent)"></div></div>
|
||
<div style="flex:1;min-height:0;padding:12px 40px 26px;display:grid;grid-template-columns:repeat(3,1fr);gap:16px">
|
||
<div style="background:#1b1d2b;border:1px solid #423a6a;border-radius:13px;overflow:hidden;display:flex;flex-direction:column">
|
||
<div style="height:36px;flex:none;display:flex;align-items:center;gap:9px;padding:0 13px;border-bottom:1px solid #2c2f3d"><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span><span style="font:500 13.5px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</span><span style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">tmux dev</span><span style="margin-left:auto;font:500 11px 'JetBrains Mono',monospace;color:#a6e3a1">41ms</span></div>
|
||
<div style="flex:1;min-height:0;position:relative;background:#1e1e2e;padding:10px 12px;font:400 11px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swiftformat --lint Sources</div><div><span style="color:#a6e3a1">✓ 0 issues in 84 files</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div><span style="color:#6c7086">↳ Suite "tmux control mode"</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> %window-add spawns pane tree</div><div><span style="color:#6c7086">↳ Suite "SessionMachine"</span></div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div> <span style="color:#a6e3a1">✔</span> host-key pin survives wipe</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcrun simctl list devices booted</div><div><span style="color:#6c7086">-- iOS 26.2 --</span></div><div><span style="color:#6c7086"> iPad Pro 13-inch (M4) (Booted)</span></div><div> </div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
<div style="height:38px;flex:none;display:flex;align-items:center;gap:8px;padding:0 13px;border-top:1px solid #2c2f3d"><span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">3 windows · 4 panes · 12 秒前</span><span style="margin-left:auto;display:flex;align-items:center;gap:8px"><span style="font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">⌘1</span><span style="font:500 12px 'JetBrains Mono',monospace;color:#b5abfc">回到会话 <i class="ph ph-arrow-right"></i></span></span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:13px;overflow:hidden;display:flex;flex-direction:column">
|
||
<div style="height:36px;flex:none;display:flex;align-items:center;gap:9px;padding:0 13px;border-bottom:1px solid #2c2f3d"><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span><span style="font:500 13.5px 'JetBrains Mono',monospace;color:#e9e9ed">ubuntu-cn2</span><span style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">tmux build</span><span style="margin-left:auto;font:500 11px 'JetBrains Mono',monospace;color:#f9e2af">186ms</span></div>
|
||
<div style="flex:1;min-height:0;position:relative;background:#1e1e2e;padding:10px 12px;font:400 11px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">cn2</span> <span style="color:#cba6f7">~</span> journalctl -u build-runner -n 3 --no-pager</div><div><span style="color:#6c7086">12:05:02 Started build-runner@42</span></div><div><span style="color:#6c7086">12:06:02 build-runner@42 succeeded</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">cn2</span> <span style="color:#cba6f7">~</span> systemctl status build-runner --no-pager</div><div><span style="color:#a6e3a1">● build-runner.service — active (running)</span></div><div><span style="color:#6c7086"> since Fri 09:12:03 CST; 2h 54min ago</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">cn2</span> <span style="color:#cba6f7">~</span> ninja -C build -j 8</div><div><span style="color:#6c7086">[148/148] Linking libmosh-core.a</span></div><div><span style="color:#a6e3a1">✓ ninja: no work to do.</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">cn2</span> <span style="color:#cba6f7">~</span> ./run-integration.sh --tsnet</div><div><span style="color:#89b4fa">▸ joining tailnet as ci-runner…</span></div><div><span style="color:#a6e3a1">▸ peer enumeration: 7 nodes</span></div><div><span style="color:#89b4fa">▸ mosh relay loopback:60122 ↔ tsnet</span></div><div><span style="color:#a6e3a1">▸ handshake ok, AES-OCB session up</span></div><div><span style="color:#6c7086"> roaming: peer addr switched</span></div><div><span style="color:#a6e3a1"> resume ok in 1.8s, 0 bytes lost</span></div><div><span style="color:#6c7086"> suspend 90s → wake</span></div><div><span style="color:#a6e3a1"> resume ok in 2.4s</span></div><div><span style="color:#f9e2af">▸ 12/14 passed, 2 flaky (retrying)</span></div><div><span style="color:#6c7086"> ↻ tmux/resize-under-loss</span></div><div><span style="color:#6c7086"> ↻ tsnet/derp-failover</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">cn2</span> <span style="color:#cba6f7">~</span> tailscale netcheck | head -5</div><div><span style="color:#6c7086"> * UDP: true</span></div><div><span style="color:#6c7086"> * IPv4: yes, 203.0.113.9:41641</span></div><div><span style="color:#6c7086"> * Nearest DERP: Hong Kong</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">cn2</span> <span style="color:#cba6f7">~</span> <span style="background:#a6adc8;color:#1e1e2e"> </span></div></div></div>
|
||
<div style="height:38px;flex:none;display:flex;align-items:center;gap:8px;padding:0 13px;border-top:1px solid #2c2f3d"><span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">1 window · relay hkg · 4 分钟前</span><span style="margin-left:auto;display:flex;align-items:center;gap:8px"><span style="font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">⌘2</span><span style="font:500 12px 'JetBrains Mono',monospace;color:#9397ab">回到会话 <i class="ph ph-arrow-right"></i></span></span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #5c4a35;border-radius:13px;overflow:hidden;display:flex;flex-direction:column">
|
||
<div style="height:36px;flex:none;display:flex;align-items:center;gap:9px;padding:0 13px;border-bottom:1px solid #2c2f3d"><span style="width:7px;height:7px;border-radius:4px;background:#fab387"></span><span style="font:500 13.5px 'JetBrains Mono',monospace;color:#e9e9ed">nas-home</span><span style="font:400 11px 'JetBrains Mono',monospace;color:#75798c"></span><span style="margin-left:auto;font:500 11px 'JetBrains Mono',monospace;color:#fab387">重连中</span></div>
|
||
<div style="flex:1;min-height:0;position:relative;background:#1e1e2e;padding:10px 12px;font:400 11px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> zfs get compressratio tank</div><div><span style="color:#6c7086">tank compressratio 1.34x</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> docker stats --no-stream | head -3</div><div><span style="color:#6c7086">NAME CPU % MEM USAGE</span></div><div><span style="color:#6c7086">plex 4.10% 1.21GiB</span></div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> uname -sr</div><div><span style="color:#6c7086">Linux 6.12.9-truenas</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> docker ps --format 'table <span>{</span>{.Names}}'</div><div><span style="color:#6c7086">NAMES STATUS</span></div><div><span style="color:#6c7086">plex Up 6 days</span></div><div><span style="color:#6c7086">syncthing Up 6 days</span></div><div><span style="color:#6c7086">caddy Up 12 hours</span></div><div><span style="color:#6c7086">postgres Up 6 days (healthy)</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> zpool status -x</div><div><span style="color:#6c7086"> all pools are healthy</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> df -h /tank</div><div><span style="color:#6c7086">Filesystem Size Used Avail Use%</span></div><div><span style="color:#6c7086">tank 18T 11T 7.0T 62%</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> zfs list -t snapshot | tail -3</div><div><span style="color:#6c7086">tank/photos@auto-2026-07-24 1.2G</span></div><div><span style="color:#6c7086">tank/docs@auto-2026-07-24 84M</span></div><div><span style="color:#6c7086">tank/vm@auto-2026-07-24 3.4G</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> tail -4 /var/log/syncthing.log</div><div><span style="color:#6c7086"> folder "photos" sync complete</span></div><div><span style="color:#6c7086"> folder "docs" idle</span></div><div> </div><div><span style="color:#94e2d5">nas</span><span style="color:#6c7086">:~$</span> <span style="background:#a6adc8;color:#1e1e2e"> </span></div></div><div style="position:absolute;inset:0;background:rgba(24,26,40,.72);backdrop-filter:blur(1.5px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px"><div style="width:26px;height:26px;border-radius:13px;border:2px solid #fab387;border-top-color:transparent"></div><div style="font:500 12.5px 'JetBrains Mono',monospace;color:#fab387">mosh 会话保活中,8s 后第 3 次重连</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">屏幕内容已缓存,恢复后原样接回</div></div></div>
|
||
<div style="height:38px;flex:none;display:flex;align-items:center;gap:8px;padding:0 13px;border-top:1px solid #2c2f3d"><span style="font:400 11.5px 'JetBrains Mono',monospace;color:#75798c">tsnet 节点离线 · 2 分钟前</span><span style="margin-left:auto;display:flex;align-items:center;gap:8px"><span style="font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">⌘3</span><span style="font:500 12px 'JetBrains Mono',monospace;color:#b2b6ca">立即重试</span></span></div>
|
||
</div>
|
||
</div>
|
||
<div style="padding:0 40px 6px;display:flex;align-items:baseline;gap:10px"><div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">全部主机</div><div style="flex:1;height:1px;background:linear-gradient(to right,#2c2f3d,transparent)"></div><div style="display:flex;gap:6px"><span style="padding:3px 10px;border-radius:6px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;font:500 11.5px 'JetBrains Mono',monospace;color:#d2cefd">全部</span><span style="padding:3px 10px;border-radius:6px;border:1px solid #3f424d;font:400 11.5px 'JetBrains Mono',monospace;color:#9397ab">生产</span><span style="padding:3px 10px;border-radius:6px;border:1px solid #3f424d;font:400 11.5px 'JetBrains Mono',monospace;color:#9397ab">家里</span><span style="padding:3px 10px;border-radius:6px;border:1px solid #3f424d;font:400 11.5px 'JetBrains Mono',monospace;color:#9397ab">云</span></div></div>
|
||
<div style="flex:none;padding:10px 40px 24px;display:grid;grid-template-columns:repeat(4,1fr);gap:14px">
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:12px;padding:15px 16px;display:flex;flex-direction:column;gap:12px">
|
||
<div style="display:flex;align-items:center;gap:10px"><span style="width:32px;height:32px;border-radius:9px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-desktop-tower"></i></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">macOS · M4 Max</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div>
|
||
<div style="display:flex;gap:5px;flex-wrap:wrap"><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">mosh</span><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">tsnet</span><span style="padding:2px 7px;border-radius:5px;background:#2b2741;font:400 10.5px 'JetBrains Mono',monospace;color:#b5abfc">SE key</span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:12px;padding:15px 16px;display:flex;flex-direction:column;gap:12px">
|
||
<div style="display:flex;align-items:center;gap:10px"><span style="width:32px;height:32px;border-radius:9px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-hard-drives"></i></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">ubuntu-cn2</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">Ubuntu 26.04</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div>
|
||
<div style="display:flex;gap:5px;flex-wrap:wrap"><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">mosh</span><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">tsnet</span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:12px;padding:15px 16px;display:flex;flex-direction:column;gap:12px">
|
||
<div style="display:flex;align-items:center;gap:10px"><span style="width:32px;height:32px;border-radius:9px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-hard-drives"></i></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">edge-sg1</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">Debian 13</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div>
|
||
<div style="display:flex;gap:5px;flex-wrap:wrap"><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">SSH</span><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">tsnet</span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:12px;padding:15px 16px;display:flex;flex-direction:column;gap:12px;opacity:.55">
|
||
<div style="display:flex;align-items:center;gap:10px"><span style="width:32px;height:32px;border-radius:9px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-hard-drives"></i></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">edge-sg2</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">离线 · 4 小时</div></div><span style="width:7px;height:7px;border-radius:4px;background:#75798c"></span></div>
|
||
<div style="display:flex;gap:5px;flex-wrap:wrap"><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">SSH</span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:12px;padding:15px 16px;display:flex;flex-direction:column;gap:12px">
|
||
<div style="display:flex;align-items:center;gap:10px"><span style="width:32px;height:32px;border-radius:9px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-desktop-tower"></i></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">nas-home</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">重连中</div></div><span style="width:7px;height:7px;border-radius:4px;background:#fab387"></span></div>
|
||
<div style="display:flex;gap:5px;flex-wrap:wrap"><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">mosh</span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:12px;padding:15px 16px;display:flex;flex-direction:column;gap:12px">
|
||
<div style="display:flex;align-items:center;gap:10px"><span style="width:32px;height:32px;border-radius:9px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-cpu"></i></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">pi-lab</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">Raspberry Pi OS</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div>
|
||
<div style="display:flex;gap:5px;flex-wrap:wrap"><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">SSH</span></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:12px;padding:15px 16px;display:flex;flex-direction:column;gap:12px">
|
||
<div style="display:flex;align-items:center;gap:10px"><span style="width:32px;height:32px;border-radius:9px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:15px"><i class="ph ph-hard-drives"></i></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">mosh-lab</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">Fedora 44</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div>
|
||
<div style="display:flex;gap:5px;flex-wrap:wrap"><span style="padding:2px 7px;border-radius:5px;background:#232532;font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">mosh</span></div>
|
||
</div>
|
||
<div style="border:1px dashed #3f424d;border-radius:12px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:96px;color:#5d5294"><span style="font-size:18px"><i class="ph ph-plus"></i></span><span style="font:500 12.5px 'JetBrains Mono',monospace">添加主机</span></div>
|
||
</div>
|
||
<div style="height:18px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div></div>
|
||
<div><div style="display:flex;align-items:baseline;gap:12px;margin:0 0 16px;padding-bottom:10px;border-bottom:1px solid rgba(233,233,237,.09)"><span style="font:600 11px 'JetBrains Mono',monospace;letter-spacing:.1em;padding:4px 9px;border-radius:6px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;color:#d2cefd">共用屏</span><span style="font:500 15px 'JetBrains Mono',monospace;color:#e9e9ed">设置 · iPhone 对照</span><span style="font:400 12px 'JetBrains Mono',monospace;color:rgba(233,233,237,.45)">跟随选定方案</span></div><div class="dv-opts">
|
||
<!-- ══════════ 1g 设置 ══════════ -->
|
||
<div class="dv-opt" id="1g">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#1g">1g</a><span><b style="color:#e9e9ed;font-weight:500">设置 · 外观</b> 左类别、右内容。核心是「app chrome 与终端同源换肤」:选一套 Catppuccin,chrome 的中性阶跟着走,Nocturne 的 blurple 始终作为唯一强调色不被覆盖。</span></div>
|
||
<div class="dv-card">
|
||
<div data-screen-label="1g 设置-外观" style="width:1366px;height:1024px;background:#161826;display:flex;flex-direction:column;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="height:24px;flex:none;display:flex;align-items:center;justify-content:space-between;padding:0 22px;font:500 12px 'JetBrains Mono',monospace;color:#9397ab"><span>9:41 周五</span><span><i class="ph ph-wifi-high"></i> Wi-Fi · 78%</span></div>
|
||
<div style="flex:1;min-height:0;display:flex">
|
||
<div style="width:280px;flex:none;background:#1b1d2b;border-right:1px solid #2c2f3d;display:flex;flex-direction:column;padding:16px 0">
|
||
<div style="padding:0 20px 14px"><h3 style="margin:0;font:500 22px 'JetBrains Mono',monospace;letter-spacing:-.02em">设置</h3></div>
|
||
<div style="padding:0 10px;display:flex;flex-direction:column;gap:2px"><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;"><span style="color:#b5abfc;width:18px;text-align:center"><i class="ph ph-paint-brush"></i></span><span style="font:500 13.5px 'JetBrains Mono',monospace;color:#e9e9ed">外观与主题</span></div><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;"><span style="color:#75798c;width:18px;text-align:center"><i class="ph ph-text-aa"></i></span><span style="font:400 13.5px 'JetBrains Mono',monospace;color:#cfd3e5">终端与字体</span></div><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;"><span style="color:#75798c;width:18px;text-align:center"><i class="ph ph-globe-hemisphere-west"></i></span><span style="font:400 13.5px 'JetBrains Mono',monospace;color:#cfd3e5">Tailscale</span><span style="margin-left:auto;width:6px;height:6px;border-radius:3px;background:#a6e3a1"></span></div><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;"><span style="color:#75798c;width:18px;text-align:center"><i class="ph ph-key"></i></span><span style="font:400 13.5px 'JetBrains Mono',monospace;color:#cfd3e5">密钥与安全</span></div><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;"><span style="color:#75798c;width:18px;text-align:center"><i class="ph ph-lightning"></i></span><span style="font:400 13.5px 'JetBrains Mono',monospace;color:#cfd3e5">mosh 与重连</span></div><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;"><span style="color:#75798c;width:18px;text-align:center"><i class="ph ph-columns"></i></span><span style="font:400 13.5px 'JetBrains Mono',monospace;color:#cfd3e5">tmux 集成</span></div><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;"><span style="color:#75798c;width:18px;text-align:center"><i class="ph ph-keyboard"></i></span><span style="font:400 13.5px 'JetBrains Mono',monospace;color:#cfd3e5">键盘与手势</span></div><div style="display:flex;align-items:center;gap:11px;padding:9px 11px;border-radius:9px;"><span style="color:#75798c;width:18px;text-align:center"><i class="ph ph-export"></i></span><span style="font:400 13.5px 'JetBrains Mono',monospace;color:#cfd3e5">诊断日志</span></div></div>
|
||
<div style="margin-top:auto;padding:12px 20px;font:400 11px 'JetBrains Mono',monospace;color:#5d5294">terminalX 0.6 (M4) · libghostty · mosh 1.4 · tsnet</div>
|
||
</div>
|
||
<div style="flex:1;min-width:0;display:flex;flex-direction:column;gap:24px;padding:28px 40px;overflow:hidden">
|
||
<div>
|
||
<h2 style="margin:0 0 3px;font:500 26px 'JetBrains Mono',monospace;letter-spacing:-.02em">外观与主题</h2>
|
||
<div style="font:400 12.5px 'JetBrains Mono',monospace;color:#75798c">App chrome 与终端配色同源:切一次,两边一起变。强调色恒为 Nocturne blurple。</div>
|
||
</div>
|
||
<div>
|
||
<div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c;margin-bottom:11px">Catppuccin 主题</div>
|
||
<div style="display:grid;grid-template-columns:repeat(4,1fr);gap:14px">
|
||
<div style="border:1px solid #796cbf;border-radius:12px;overflow:hidden;background:#1b1d2b">
|
||
<div style="height:88px;background:#1e1e2e;padding:10px;display:flex;flex-direction:column;justify-content:space-between">
|
||
<div style="font:400 9.5px/1.4 'JetBrains Mono',monospace;color:#cdd6f4"><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">~</span> git status<br><span style="color:#fab387">M</span> Theme.swift</div>
|
||
<div style="display:flex;gap:3px"><i style="width:12px;height:12px;border-radius:6px;background:#f38ba8;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#fab387;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#a6e3a1;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#89b4fa;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#cba6f7;display:block"></i></div>
|
||
</div>
|
||
<div style="padding:9px 12px;display:flex;align-items:center;gap:7px"><span style="font:500 13px 'JetBrains Mono',monospace;color:#e9e9ed">Mocha</span><span style="margin-left:auto;color:#b5abfc;font-size:13px"><i class="ph ph-check-circle"></i></span></div>
|
||
</div>
|
||
<div style="border:1px solid #2c2f3d;border-radius:12px;overflow:hidden;background:#1b1d2b">
|
||
<div style="height:88px;background:#24273a;padding:10px;display:flex;flex-direction:column;justify-content:space-between">
|
||
<div style="font:400 9.5px/1.4 'JetBrains Mono',monospace;color:#cad3f5"><span style="color:#a6da95">➜</span> <span style="color:#8aadf4">~</span> git status<br><span style="color:#f5a97f">M</span> Theme.swift</div>
|
||
<div style="display:flex;gap:3px"><i style="width:12px;height:12px;border-radius:6px;background:#ed8796;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#f5a97f;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#a6da95;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#8aadf4;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#c6a0f6;display:block"></i></div>
|
||
</div>
|
||
<div style="padding:9px 12px;display:flex;align-items:center;gap:7px"><span style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">Macchiato</span></div>
|
||
</div>
|
||
<div style="border:1px solid #2c2f3d;border-radius:12px;overflow:hidden;background:#1b1d2b">
|
||
<div style="height:88px;background:#303446;padding:10px;display:flex;flex-direction:column;justify-content:space-between">
|
||
<div style="font:400 9.5px/1.4 'JetBrains Mono',monospace;color:#c6d0f5"><span style="color:#a6d189">➜</span> <span style="color:#8caaee">~</span> git status<br><span style="color:#ef9f76">M</span> Theme.swift</div>
|
||
<div style="display:flex;gap:3px"><i style="width:12px;height:12px;border-radius:6px;background:#e78284;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#ef9f76;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#a6d189;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#8caaee;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#ca9ee6;display:block"></i></div>
|
||
</div>
|
||
<div style="padding:9px 12px;display:flex;align-items:center;gap:7px"><span style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">Frappé</span></div>
|
||
</div>
|
||
<div style="border:1px solid #2c2f3d;border-radius:12px;overflow:hidden;background:#1b1d2b">
|
||
<div style="height:88px;background:#eff1f5;padding:10px;display:flex;flex-direction:column;justify-content:space-between">
|
||
<div style="font:400 9.5px/1.4 'JetBrains Mono',monospace;color:#4c4f69"><span style="color:#40a02b">➜</span> <span style="color:#1e66f5">~</span> git status<br><span style="color:#fe640b">M</span> Theme.swift</div>
|
||
<div style="display:flex;gap:3px"><i style="width:12px;height:12px;border-radius:6px;background:#d20f39;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#fe640b;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#40a02b;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#1e66f5;display:block"></i><i style="width:12px;height:12px;border-radius:6px;background:#8839ef;display:block"></i></div>
|
||
</div>
|
||
<div style="padding:9px 12px;display:flex;align-items:center;gap:7px"><span style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">Latte</span><span style="margin-left:auto;font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">浅色</span></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="flex:1;min-height:0;display:grid;grid-template-columns:1.25fr 1fr;gap:30px">
|
||
<div style="min-height:0;display:flex;flex-direction:column;gap:14px">
|
||
<div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">实时预览</div>
|
||
<div style="flex:1;min-height:0;border-radius:12px;background:#1e1e2e;border:1px solid #2c2f3d;padding:14px 16px;font:400 12.5px/1.6 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> ls -l packages</div><div><span style="color:#89b4fa">drwxr-xr-x</span> yz staff 192B TXCore</div><div><span style="color:#89b4fa">drwxr-xr-x</span> yz staff 256B TXTransport</div><div><span style="color:#6c7086">-rw-r--r--</span> yz staff 4.1K Package.swift</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git diff --stat</div><div> SessionMachine.swift | <span style="color:#a6e3a1">++++++++</span><span style="color:#f38ba8">---</span></div><div> TmuxController.swift | <span style="color:#a6e3a1">+++++</span><span style="color:#f38ba8">-</span></div><div> <span style="color:#6c7086">2 files changed, 13(+), 4(-)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> 中文等宽对齐测试:终端渲染 CJK</div><div><span style="color:#cba6f7">│</span> 宽字符占两格 <span style="color:#94e2d5">✓</span> emoji 归一 <span style="color:#94e2d5">✓</span></div><div><span style="color:#cba6f7">│</span> 制表符对齐 <span style="color:#94e2d5">✓</span> 连字 -> ≠ <span style="color:#94e2d5">✓</span></div><div><span style="color:#cba6f7">└─</span> 行高 1.50 · 字号 13.5pt</div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build 2>&1 | tail -4</div><div><span style="color:#f38ba8">error</span>: cannot find 'foo' in scope</div><div><span style="color:#f9e2af">warning</span>: unused variable 'gate'</div><div><span style="color:#6c7086">note: </span>add explicit <span style="color:#cba6f7">_ =</span> to silence</div><div><span style="color:#a6e3a1">✓ 编译完成 · 14.2s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> tailscale status | head -3</div><div><span style="color:#a6e3a1">100.71.203.4</span> mac-studio <span style="color:#6c7086">direct</span></div><div><span style="color:#a6e3a1">100.88.9.61</span> ubuntu-cn2 <span style="color:#6c7086">relay hkg</span></div><div><span style="color:#f9e2af">100.104.2.18</span> nas-home <span style="color:#6c7086">offline</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> tmux list-panes</div><div><span style="color:#cba6f7">0.0</span> [124x38] <span style="color:#6c7086">zsh</span> <span style="color:#a6e3a1">(active)</span></div><div><span style="color:#cba6f7">0.1</span> [ 60x18] <span style="color:#6c7086">btop</span></div><div><span style="color:#cba6f7">0.2</span> [ 60x19] <span style="color:#6c7086">tail -f build.log</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> echo $TERM</div><div><span style="color:#f5c2e7">xterm-256color</span> · <span style="color:#f5c2e7">truecolor</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">terminalx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
</div>
|
||
<div style="min-height:0;display:flex;flex-direction:column;gap:10px">
|
||
<div style="font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">排版</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:11px;overflow:hidden">
|
||
<div style="display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid #2c2f3d"><div style="flex:1"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">终端字体</div></div><span style="font:400 12.5px 'JetBrains Mono',monospace;color:#9397ab">JetBrains Mono <i class="ph ph-caret-down"></i></span></div>
|
||
<div style="padding:12px 14px;border-bottom:1px solid #2c2f3d"><div style="display:flex;justify-content:space-between;font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:9px"><span>字号</span><span style="color:#9397ab">13.5pt</span></div><div style="height:4px;border-radius:2px;background:#3f424d;position:relative"><span style="position:absolute;left:0;top:0;bottom:0;width:46%;background:#796cbf;border-radius:2px"></span><span style="position:absolute;left:46%;top:-7px;width:18px;height:18px;border-radius:9px;background:#d2cefd;margin-left:-9px"></span></div></div>
|
||
<div style="padding:12px 14px;border-bottom:1px solid #2c2f3d"><div style="display:flex;justify-content:space-between;font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5;margin-bottom:9px"><span>行高</span><span style="color:#9397ab">1.50</span></div><div style="height:4px;border-radius:2px;background:#3f424d;position:relative"><span style="position:absolute;left:0;top:0;bottom:0;width:62%;background:#796cbf;border-radius:2px"></span><span style="position:absolute;left:62%;top:-7px;width:18px;height:18px;border-radius:9px;background:#d2cefd;margin-left:-9px"></span></div></div>
|
||
<div style="display:flex;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid #2c2f3d"><div style="flex:1"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">连字(ligatures)</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">-> ≠ 合并显示</div></div><div style="width:38px;height:22px;border-radius:11px;background:#5d5294;padding:2px;display:flex;justify-content:flex-end"><span style="width:18px;height:18px;border-radius:9px;background:#d2cefd"></span></div></div>
|
||
<div style="display:flex;align-items:center;gap:12px;padding:12px 14px;"><div style="flex:1"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">CJK 等宽补偿</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">宽字符严格占两格</div></div><div style="width:38px;height:22px;border-radius:11px;background:#5d5294;padding:2px;display:flex;justify-content:flex-end"><span style="width:18px;height:18px;border-radius:9px;background:#d2cefd"></span></div></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #2c2f3d;border-radius:11px;overflow:hidden">
|
||
<div style="display:flex;align-items:center;gap:12px;padding:12px 14px;"><div style="flex:1"><div style="font:400 13px 'JetBrains Mono',monospace;color:#cfd3e5">跟随系统浅/深色</div><div style="font:400 11px 'JetBrains Mono',monospace;color:#75798c">深色 Mocha ⇄ 浅色 Latte</div></div><div style="width:38px;height:22px;border-radius:11px;background:#3f424d;padding:2px;display:flex;"><span style="width:18px;height:18px;border-radius:9px;background:#9397ab"></span></div></div>
|
||
</div>
|
||
<div style="margin-top:auto;background:#1b1d2b;border:1px solid #2c2f3d;border-radius:11px;padding:12px 14px;display:flex;gap:10px;align-items:flex-start">
|
||
<span style="color:#b5abfc;font-size:13px;margin-top:1px"><i class="ph ph-info"></i></span>
|
||
<div style="font:400 11.5px/1.6 'JetBrains Mono',monospace;color:#9397ab">终端配色由 libghostty 渲染;chrome 的中性阶与所选主题同源推导,强调色始终取 Nocturne blurple。</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div style="height:18px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:200px;height:4px;border-radius:2px;background:#3f424d"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ══════════ 1h iPhone ══════════ -->
|
||
<div class="dv-opt" id="1h">
|
||
<div class="dv-olabel"><a class="dv-oid" href="#1h">1h</a><span><b style="color:#e9e9ed;font-weight:500">iPhone 紧凑对照</b> 同一套令牌降级:边栏→底部 tab,pane 平铺→单 pane + 顶部 pane 段控,附加行两行滚动。</span></div>
|
||
<div style="display:flex;gap:22px;align-items:flex-start">
|
||
<div class="dv-card" style="border-radius:38px;width:393px">
|
||
<div data-screen-label="1h iPhone-终端" style="width:393px;height:852px;background:#161826;display:flex;flex-direction:column;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="height:54px;flex:none;display:flex;align-items:flex-end;justify-content:space-between;padding:0 26px 8px;font:600 13px 'JetBrains Mono',monospace;color:#e9e9ed"><span>9:41</span><span style="display:flex;gap:5px;font-size:11px;color:#b2b6ca"><i class="ph ph-wifi-high"></i> <i class="ph ph-battery-high"></i> 78%</span></div>
|
||
<div style="height:44px;flex:none;display:flex;align-items:center;gap:9px;padding:0 14px;border-bottom:1px solid #2c2f3d">
|
||
<span style="color:#b5abfc;font-size:15px"><i class="ph ph-caret-left"></i></span>
|
||
<div style="flex:1;min-width:0"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">tmux dev · 0 build</div></div>
|
||
<div style="display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:6px;background:#232532;border:1px solid #3f424d;font:500 11px 'JetBrains Mono',monospace;color:#b2b6ca"><span style="width:5px;height:5px;border-radius:3px;background:#a6e3a1"></span>41ms</div>
|
||
<span style="color:#b2b6ca;font-size:15px"><i class="ph ph-columns"></i></span>
|
||
</div>
|
||
<div style="height:30px;flex:none;display:flex;align-items:center;gap:6px;padding:0 12px;background:#1b1d2b">
|
||
<div style="padding:3px 10px;border-radius:6px;background:#2b2741;font:500 11px 'JetBrains Mono',monospace;color:#d2cefd">0.0 zsh</div>
|
||
<div style="padding:3px 10px;border-radius:6px;font:400 11px 'JetBrains Mono',monospace;color:#75798c">0.1 btop</div>
|
||
<div style="padding:3px 10px;border-radius:6px;font:400 11px 'JetBrains Mono',monospace;color:#75798c">0.2 log</div>
|
||
<span style="margin-left:auto;font:400 10.5px 'JetBrains Mono',monospace;color:#5d5294">80×34</span>
|
||
</div>
|
||
<div style="flex:1;min-height:0;background:#1e1e2e;padding:10px 12px;font:400 10.5px/1.5 'JetBrains Mono',monospace;color:#cdd6f4;white-space:pre;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end"><div style="min-height:0;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git fetch --all --prune</div><div><span style="color:#6c7086">Fetching origin … done</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swiftformat --lint Sources</div><div><span style="color:#a6e3a1">✓ 0 issues in 84 files</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodebuild -showsdks | head -2</div><div><span style="color:#6c7086">iOS SDKs: iOS 26.2 (iphoneos26.2)</span></div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift build -c release --arch arm64</div><div><span style="color:#6c7086">[142/142] Compiling TXCore</span></div><div><span style="color:#6c7086">[ 8/8 ] Linking TerminalX</span></div><div><span style="color:#a6e3a1">✓ build complete (14.2s)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> swift test --package-path packages/TXCore</div><div><span style="color:#a6e3a1">◇ Test run started.</span></div><div><span style="color:#6c7086">↳ Suite "tmux control mode"</span></div><div> <span style="color:#a6e3a1">✔</span> parses %output escaped octal</div><div> <span style="color:#a6e3a1">✔</span> layout diff keeps pane identity</div><div> <span style="color:#a6e3a1">✔</span> DCS passthrough detected</div><div> <span style="color:#a6e3a1">✔</span> %window-add spawns pane tree</div><div><span style="color:#6c7086">↳ Suite "SessionMachine"</span></div><div> <span style="color:#a6e3a1">✔</span> backoff caps at 30s</div><div> <span style="color:#a6e3a1">✔</span> mosh three-phase resume</div><div> <span style="color:#a6e3a1">✔</span> host-key pin survives wipe</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcodegen generate --spec project.yml</div><div><span style="color:#a6e3a1">✅ Created TerminalX.xcodeproj</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> xcrun simctl list devices booted</div><div><span style="color:#6c7086">-- iOS 26.2 --</span></div><div><span style="color:#6c7086"> iPad Pro 13-inch (M4) (Booted)</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git pull --rebase</div><div><span style="color:#6c7086">From tsnet:athom/terminalx main</span></div><div><span style="color:#a6e3a1">Successfully rebased onto main.</span></div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> git status --short</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/ContentView.swift</div><div> <span style="color:#f9e2af">M</span> apps/TerminalX/iOS/Theme.swift</div><div><span style="color:#a6e3a1">??</span> docs/ui/ipad-rail.md</div><div> </div><div> </div><div><span style="color:#a6e3a1">➜</span> <span style="color:#89b4fa">tx</span> <span style="color:#f9e2af">git:(</span><span style="color:#f38ba8">main</span><span style="color:#f9e2af">)</span> <span style="background:#cdd6f4;color:#1e1e2e"> </span></div></div></div>
|
||
<div style="flex:none;background:#1b1d2b;border-top:1px solid #2c2f3d;padding:8px 10px;display:flex;flex-direction:column;gap:6px">
|
||
<div style="display:flex;gap:6px"><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">esc</div><div style="flex:1;height:38px;border-radius:8px;background:#2b2741;box-shadow:inset 0 0 0 1px #423a6a;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#d2cefd">ctrl</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">tab</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">~</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">/</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">|</div></div>
|
||
<div style="display:flex;gap:6px"><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">↑</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">↓</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">←</div><div style="flex:1;height:38px;border-radius:8px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#cfd3e5">→</div><div style="flex:1.6;height:38px;border-radius:8px;border:1px solid #796cbf;display:flex;align-items:center;justify-content:center;font:500 12px 'JetBrains Mono',monospace;color:#b5abfc">⌘K</div></div>
|
||
</div>
|
||
<div style="height:26px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:140px;height:5px;border-radius:3px;background:#4a4d5e"></div></div>
|
||
</div>
|
||
</div>
|
||
<div class="dv-card" style="border-radius:38px;width:393px">
|
||
<div data-screen-label="1h iPhone-主机" style="width:393px;height:852px;background:#161826;display:flex;flex-direction:column;font-family:'JetBrains Mono',ui-monospace,monospace">
|
||
<div style="height:54px;flex:none;display:flex;align-items:flex-end;justify-content:space-between;padding:0 26px 8px;font:600 13px 'JetBrains Mono',monospace;color:#e9e9ed"><span>9:41</span><span style="display:flex;gap:5px;font-size:11px;color:#b2b6ca"><i class="ph ph-wifi-high"></i> <i class="ph ph-battery-high"></i> 78%</span></div>
|
||
<div style="padding:6px 18px 12px;display:flex;align-items:center"><h2 style="margin:0;font:500 28px 'JetBrains Mono',monospace;letter-spacing:-.02em">主机</h2><span style="margin-left:auto;color:#b5abfc;font-size:17px"><i class="ph ph-plus"></i></span></div>
|
||
<div style="padding:0 16px 12px"><div style="height:34px;border-radius:9px;background:#232532;border:1px solid #3f424d;display:flex;align-items:center;gap:8px;padding:0 11px;font:400 13px 'JetBrains Mono',monospace;color:#75798c"><i class="ph ph-magnifying-glass"></i> 搜索</div></div>
|
||
<div style="padding:0 18px 6px;font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">活动会话</div>
|
||
<div style="padding:0 14px;display:flex;flex-direction:column;gap:8px">
|
||
<div style="background:#1b1d2b;border:1px solid #423a6a;border-radius:12px;overflow:hidden">
|
||
<div style="display:flex;align-items:center;gap:9px;padding:11px 13px"><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">mac-studio</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#9397ab">tmux dev · 3 windows</div></div><span style="font:500 11.5px 'JetBrains Mono',monospace;color:#a6e3a1">41ms</span></div>
|
||
<div style="height:66px;background:#1e1e2e;padding:8px 13px;font:400 10px/1.5 'JetBrains Mono',monospace;color:#a6adc8;white-space:pre;overflow:hidden"><div><span style="color:#a6e3a1">➜</span> swift test --package-path TXCore</div><div><span style="color:#a6e3a1">◇ 50 tests passed after 0.412s</span></div><div><span style="color:#a6e3a1">➜</span> <span style="background:#a6adc8;color:#1e1e2e"> </span></div></div>
|
||
</div>
|
||
<div style="background:#1b1d2b;border:1px solid #5c4a35;border-radius:12px;display:flex;align-items:center;gap:9px;padding:11px 13px"><span style="width:7px;height:7px;border-radius:4px;background:#fab387"></span><div style="flex:1"><div style="font:500 14px 'JetBrains Mono',monospace;color:#e9e9ed">nas-home</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#fab387">重连中 · 8s 后第 3 次</div></div><span style="font:500 11.5px 'JetBrains Mono',monospace;color:#b2b6ca">重试</span></div>
|
||
</div>
|
||
<div style="padding:16px 18px 6px;font:600 10px 'JetBrains Mono',monospace;letter-spacing:.09em;text-transform:uppercase;color:#75798c">全部主机</div>
|
||
<div style="padding:0 14px;display:flex;flex-direction:column;gap:1px">
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 8px"><span style="width:30px;height:30px;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:14px"><i class="ph ph-hard-drives"></i></span><div style="flex:1"><div style="font:400 14px 'JetBrains Mono',monospace;color:#cfd3e5">ubuntu-cn2</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">ci@100.88.9.61 · mosh</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div><div style="height:1px;background:#232532;margin-left:49px"></div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 8px"><span style="width:30px;height:30px;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:14px"><i class="ph ph-hard-drives"></i></span><div style="flex:1"><div style="font:400 14px 'JetBrains Mono',monospace;color:#cfd3e5">edge-sg1</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">root@100.77.4.2 · SSH</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div><div style="height:1px;background:#232532;margin-left:49px"></div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 8px"><span style="width:30px;height:30px;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:14px"><i class="ph ph-desktop-tower"></i></span><div style="flex:1"><div style="font:400 14px 'JetBrains Mono',monospace;color:#cfd3e5">nas-home</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">yz@100.104.2.18</div></div><span style="width:7px;height:7px;border-radius:4px;background:#fab387"></span></div><div style="height:1px;background:#232532;margin-left:49px"></div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 8px"><span style="width:30px;height:30px;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:14px"><i class="ph ph-cpu"></i></span><div style="flex:1"><div style="font:400 14px 'JetBrains Mono',monospace;color:#cfd3e5">pi-lab</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">pi@100.104.2.9 · SSH</div></div><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span></div><div style="height:1px;background:#232532;margin-left:49px"></div>
|
||
<div style="display:flex;align-items:center;gap:11px;padding:11px 8px;opacity:.55"><span style="width:30px;height:30px;border-radius:8px;background:#232532;display:flex;align-items:center;justify-content:center;color:#9397ab;font-size:14px"><i class="ph ph-hard-drives"></i></span><div style="flex:1"><div style="font:400 14px 'JetBrains Mono',monospace;color:#cfd3e5">edge-sg2</div><div style="font:400 10.5px 'JetBrains Mono',monospace;color:#75798c">离线 4 小时</div></div><span style="width:7px;height:7px;border-radius:4px;background:#75798c"></span></div>
|
||
</div>
|
||
<div style="margin-top:auto;padding:10px 18px;display:flex;align-items:center;gap:9px;border-top:1px solid #2c2f3d"><span style="width:7px;height:7px;border-radius:4px;background:#a6e3a1"></span><div style="flex:1"><div style="font:500 11.5px 'JetBrains Mono',monospace;color:#cfd3e5">Tailscale 已连接</div><div style="font:400 10px 'JetBrains Mono',monospace;color:#75798c">iphone · 100.92.14.11</div></div></div>
|
||
<div style="height:56px;flex:none;display:flex;align-items:center;background:#1b1d2b;border-top:1px solid #2c2f3d"><div style="flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;color:#b5abfc"><span style="font-size:16px"><i class="ph ph-hard-drives"></i></span><span style="font:500 10px 'JetBrains Mono',monospace">主机</span></div><div style="flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;color:#75798c"><span style="font-size:16px"><i class="ph ph-terminal-window"></i></span><span style="font:400 10px 'JetBrains Mono',monospace">会话</span></div><div style="flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;color:#75798c"><span style="font-size:16px"><i class="ph ph-key"></i></span><span style="font:400 10px 'JetBrains Mono',monospace">密钥</span></div><div style="flex:1;display:flex;flex-direction:column;align-items:center;gap:3px;color:#75798c"><span style="font-size:16px"><i class="ph ph-gear-six"></i></span><span style="font:400 10px 'JetBrains Mono',monospace">设置</span></div></div>
|
||
<div style="height:22px;flex:none;display:flex;align-items:center;justify-content:center"><div style="width:140px;height:5px;border-radius:3px;background:#4a4d5e"></div></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div></div>
|
||
</div>
|
||
<p class="dv-next">下一步:细化 <a class="dv-oid" href="#1b">1b</a> 的 pane 拖拽 / 缩放态,或把 <a class="dv-oid" href="#1e">1e</a> 与 <a class="dv-oid" href="#1b">1b</a> 串成可点原型。</p>
|
||
</section>
|
||
</x-dc>
|
||
</body>
|
||
</html>
|