初始提交:terminalX 可运行态(M0/M1/M1.5 已真机验证)
- M0: libghostty SSH 终端(渲染/输入/连接)+ 白屏修复(OutputGate) + 会话状态机/自动重连 - M1: tsnet 用户态组网 + SSH-over-tsnet(fd 桥),shell 级真机验证;R5(Go+gvisor+C+++Swift 同进程) retire - M1.5: tmux -CC 原生 tab(MVP) - 结构: packages/(TXCore·TXTransport), apps/TerminalX, vendor/(libghostty-spm/libssh2/mbedtls/tsnet-bridge), artifacts/ - 文档: CLAUDE.md + docs/HANDOFF.md(新会话入口) - 环境: 认证代理→依赖 vendor 本地化;Go 在 ~/.local/go;仅模拟器/未签名 - 待续: M2 mosh, tmux 多 pane, M4 安全(host key/SE) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
109
vendor/libghostty-spm/docs/guide/swiftui.html
vendored
Normal file
109
vendor/libghostty-spm/docs/guide/swiftui.html
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<title>GhosttyKit · SwiftUI</title>
|
||||
<link rel="stylesheet" href="../styles.css">
|
||||
<link rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/github.min.css"
|
||||
integrity="sha384-eFTL69TLRZTkNfYZOLM+G04821K1qZao/4QLJbet1pP4tcF+fdXq/9CdqAbWRl/L"
|
||||
crossorigin="anonymous"
|
||||
media="(prefers-color-scheme: light)">
|
||||
<link rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/styles/github-dark.min.css"
|
||||
integrity="sha384-wH75j6z1lH97ZOpMOInqhgKzFkAInZPPSPlZpYKYTOqsaizPvhQZmAtLcPKXpLyH"
|
||||
crossorigin="anonymous"
|
||||
media="(prefers-color-scheme: dark)">
|
||||
</head>
|
||||
<body>
|
||||
<nav class="topbar" aria-label="Primary">
|
||||
<a class="home" href="../index.html">GhosttyKit</a>
|
||||
<a href="../index.html">Overview</a>
|
||||
<a href="index.html" aria-current="page">Guide</a>
|
||||
<a href="../api/index.html">API</a>
|
||||
<a href="../architecture.html">Architecture</a>
|
||||
<a href="../build.html">Build</a>
|
||||
</nav>
|
||||
|
||||
<main>
|
||||
<h1>SwiftUI</h1>
|
||||
<nav class="on-this-page" aria-label="On this page">
|
||||
<strong>On this page:</strong>
|
||||
<a href="#state">State</a>
|
||||
<a href="#view">View</a>
|
||||
<a href="#input">Input</a>
|
||||
<a href="#configuration">Configuration</a>
|
||||
</nav>
|
||||
|
||||
<p>SwiftUI integration starts with <code>TerminalViewState</code>. It owns the controller, exposes observable terminal state, and tracks the current <code>TerminalSurface</code> after a platform view attaches.</p>
|
||||
|
||||
<h2 id="state">State</h2>
|
||||
<pre><code class="language-swift">import SwiftUI
|
||||
import GhosttyTerminal
|
||||
|
||||
struct TerminalScreen: View {
|
||||
@StateObject private var terminal = TerminalViewState()
|
||||
|
||||
var body: some View {
|
||||
TerminalSurfaceView(context: terminal)
|
||||
.navigationTitle(terminal.title)
|
||||
}
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
<p>Observable properties include <code>title</code>, <code>surfaceSize</code>, <code>isFocused</code>, <code>bellCount</code>, <code>lastBellAt</code>, desktop notification metadata, <code>workingDirectory</code>, and command-finished metadata.</p>
|
||||
|
||||
<h2 id="view">View</h2>
|
||||
<p><code>TerminalSurfaceView</code> embeds the platform terminal view and adopts the current SwiftUI color scheme. iOS 15, macOS 13, and Mac Catalyst 15 are the SwiftUI floor for this wrapper.</p>
|
||||
<pre><code class="language-swift">TerminalSurfaceView(context: terminal)
|
||||
.onAppear {
|
||||
terminal.configuration = TerminalSurfaceOptions(
|
||||
backend: .inMemory(session),
|
||||
fontSize: 13,
|
||||
workingDirectory: "/"
|
||||
)
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
<h2 id="input">Input</h2>
|
||||
<p>Call <code>send(_:)</code> after the surface attaches. The method returns <code>true</code> when Ghostty accepts the text.</p>
|
||||
<pre><code class="language-swift">@discardableResult
|
||||
func sendCommand(_ command: String) -> Bool {
|
||||
terminal.send(command + "\r")
|
||||
}
|
||||
</code></pre>
|
||||
|
||||
<h2 id="configuration">Configuration</h2>
|
||||
<p>Use fluent configuration for common Ghostty settings, and <code>custom(_:_:)</code> for additional Ghostty config keys.</p>
|
||||
<pre><code class="language-swift">let config = TerminalConfiguration.default
|
||||
.fontFamily("SF Mono")
|
||||
.fontSize(13)
|
||||
.windowPaddingX(8)
|
||||
.windowPaddingY(6)
|
||||
.custom("shell-integration", "detect")
|
||||
|
||||
terminal.setTerminalConfiguration(config)
|
||||
</code></pre>
|
||||
|
||||
<nav class="pager" aria-label="Sibling pages">
|
||||
<a class="prev" href="index.html">Guide</a>
|
||||
<a class="parent" href="index.html">↑ Guide</a>
|
||||
<a class="next" href="uikit-appkit.html">UIKit & AppKit</a>
|
||||
</nav>
|
||||
|
||||
<footer>
|
||||
GhosttyKit · <a href="https://github.com/Lakr233/libghostty-spm">github.com/Lakr233/libghostty-spm</a>
|
||||
</footer>
|
||||
</main>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/highlight.min.js"
|
||||
integrity="sha384-GdEWAbCjn+ghjX0gLx7/N1hyTVmPAjdC2OvoAA0RyNcAOhqwtT8qnbCxWle2+uJX"
|
||||
crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.10.0/languages/swift.min.js"
|
||||
integrity="sha384-TfALNLT6HJzZieazgsVvFM0DzFWQsgl0d7mdwPLyg1yg7XE4QwLY4jqmJRNnI1S4"
|
||||
crossorigin="anonymous"></script>
|
||||
<script>hljs.highlightAll();</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user