- 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>
159 lines
5.8 KiB
HTML
159 lines
5.8 KiB
HTML
<!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 · API · Configuration</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="../guide/index.html">Guide</a>
|
|
<a href="index.html" aria-current="page">API</a>
|
|
<a href="../architecture.html">Architecture</a>
|
|
<a href="../build.html">Build</a>
|
|
</nav>
|
|
|
|
<main>
|
|
<h1>Configuration</h1>
|
|
<nav class="on-this-page" aria-label="On this page">
|
|
<strong>On this page:</strong>
|
|
<a href="#TerminalSurfaceOptions">Surface options</a>
|
|
<a href="#TerminalConfiguration">Terminal config</a>
|
|
<a href="#TerminalTheme">Theme</a>
|
|
<a href="#Metrics">Metrics</a>
|
|
</nav>
|
|
|
|
<h2 id="TerminalSurfaceOptions">TerminalSurfaceOptions</h2>
|
|
<pre><code class="language-swift">public struct TerminalSurfaceOptions: Sendable {
|
|
public var backend: TerminalSessionBackend
|
|
public var fontSize: Float?
|
|
public var workingDirectory: String?
|
|
public var context: TerminalSurfaceContext
|
|
|
|
public init(
|
|
backend: TerminalSessionBackend = .exec,
|
|
fontSize: Float? = nil,
|
|
workingDirectory: String? = nil,
|
|
context: TerminalSurfaceContext = .window
|
|
)
|
|
}
|
|
|
|
public enum TerminalSessionBackend: Sendable {
|
|
case exec
|
|
case inMemory(InMemoryTerminalSession)
|
|
}
|
|
|
|
public enum TerminalSurfaceContext: Sendable, Equatable {
|
|
case window
|
|
case split
|
|
}
|
|
</code></pre>
|
|
|
|
<h2 id="TerminalConfiguration">TerminalConfiguration</h2>
|
|
<pre><code class="language-swift">public struct TerminalConfiguration: Sendable, Hashable {
|
|
public init()
|
|
public init(configure: (inout Builder) -> Void)
|
|
public init(
|
|
startingFrom base: TerminalConfiguration,
|
|
configure: (inout Builder) -> Void
|
|
)
|
|
|
|
public func appending(_ command: TerminalConfigCommand) -> TerminalConfiguration
|
|
public func fontFamily(_ value: String) -> TerminalConfiguration
|
|
public func fontSize(_ value: Float) -> TerminalConfiguration
|
|
public func cursorStyle(_ style: TerminalCursorStyle) -> TerminalConfiguration
|
|
public func background(_ value: String) -> TerminalConfiguration
|
|
public func foreground(_ value: String) -> TerminalConfiguration
|
|
public func palette(_ index: Int, color: String) -> TerminalConfiguration
|
|
public func backgroundOpacity(_ value: Double) -> TerminalConfiguration
|
|
public func windowPaddingX(_ value: Int) -> TerminalConfiguration
|
|
public func windowPaddingY(_ value: Int) -> TerminalConfiguration
|
|
public func custom(_ key: String, _ value: String) -> TerminalConfiguration
|
|
|
|
public static let `default`: TerminalConfiguration
|
|
public var rendered: String { get }
|
|
}
|
|
</code></pre>
|
|
|
|
<p>The builder variant has matching <code>with*</code> mutating methods, which are useful when composing a default config with many overrides.</p>
|
|
|
|
<h2 id="TerminalTheme">TerminalTheme</h2>
|
|
<pre><code class="language-swift">public enum TerminalColorScheme: Sendable {
|
|
case light
|
|
case dark
|
|
}
|
|
|
|
public struct TerminalTheme: Sendable, Hashable {
|
|
public var light: TerminalConfiguration
|
|
public var dark: TerminalConfiguration
|
|
|
|
public init(
|
|
light: TerminalConfiguration,
|
|
dark: TerminalConfiguration
|
|
)
|
|
}
|
|
</code></pre>
|
|
<p><code>TerminalController</code> selects the light or dark configuration when the active color scheme changes.</p>
|
|
|
|
<h2 id="Metrics">Metrics</h2>
|
|
<pre><code class="language-swift">public struct TerminalGridMetrics: Sendable, Equatable {
|
|
public var columns: UInt16
|
|
public var rows: UInt16
|
|
public var widthPixels: UInt32
|
|
public var heightPixels: UInt32
|
|
public var cellWidthPixels: UInt32
|
|
public var cellHeightPixels: UInt32
|
|
}
|
|
|
|
public struct InMemoryTerminalViewport: Sendable, Equatable {
|
|
public var columns: UInt16
|
|
public var rows: UInt16
|
|
public var widthPixels: UInt32
|
|
public var heightPixels: UInt32
|
|
public var cellWidthPixels: UInt32
|
|
public var cellHeightPixels: UInt32
|
|
}
|
|
|
|
public struct TerminalInputModifiers: OptionSet, Sendable {
|
|
public static let shift: TerminalInputModifiers
|
|
public static let ctrl: TerminalInputModifiers
|
|
public static let alt: TerminalInputModifiers
|
|
public static let super_: TerminalInputModifiers
|
|
}
|
|
</code></pre>
|
|
|
|
<nav class="pager" aria-label="Sibling pages">
|
|
<a class="prev" href="terminal.html">Terminal surface</a>
|
|
<a class="parent" href="index.html">↑ API</a>
|
|
<a class="next" href="themes.html">Theme catalog</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>
|