Configuration

TerminalSurfaceOptions

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
}

TerminalConfiguration

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 }
}

The builder variant has matching with* mutating methods, which are useful when composing a default config with many overrides.

TerminalTheme

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
    )
}

TerminalController selects the light or dark configuration when the active color scheme changes.

Metrics

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
}