bd44b5aa08
Test / build-libghostty-vt (x86_64-windows-gnu) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-ios) (push) Has been cancelled
Test / build-libghostty-vt-macos (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt-macos (x86_64-macos) (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-dist (push) Has been cancelled
Test / GTK x11=true wayland=true (push) Has been cancelled
Test / Build -Dsimd=false (push) Has been cancelled
Test / Build -Dsimd=true (push) Has been cancelled
Test / Build -Dsentry=false (push) Has been cancelled
Test / Build -Dsentry=true (push) Has been cancelled
Test / zig-fmt (push) Has been cancelled
Test / GitHub Actions Pins (push) Has been cancelled
Test / prettier (push) Has been cancelled
Test / swiftlint (push) Has been cancelled
Test / alejandra (push) Has been cancelled
Test / typos (push) Has been cancelled
Nix / Required Checks: Nix (push) Has been cancelled
Nix / check-zig-cache-hash (push) Has been cancelled
Test / skip (push) Has been cancelled
Test / Required Checks: Test (push) Has been cancelled
Test / build-bench (push) Has been cancelled
Test / list-examples (push) Has been cancelled
Test / Example ${{ matrix.dir }} (Windows) (push) Has been cancelled
Test / build-cmake (push) Has been cancelled
Test / test-lib-vt-pkgconfig (push) Has been cancelled
Test / build-flatpak (push) Has been cancelled
Test / build-snap (push) Has been cancelled
Test / build-libghostty-vt (aarch64-linux) (push) Has been cancelled
Test / build-libghostty-vt (aarch64-macos) (push) Has been cancelled
Test / build-libghostty-vt (wasm32-freestanding) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-linux-musl) (push) Has been cancelled
Test / build-libghostty-vt (x86_64-macos) (push) Has been cancelled
Test / build-libghostty-vt-android (aarch64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-android (arm-linux-androideabi) (push) Has been cancelled
Test / build-libghostty-vt-android (x86_64-linux-android) (push) Has been cancelled
Test / build-libghostty-vt-windows (push) Has been cancelled
Test / build-libghostty-windows-gnu (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-linux (namespace-profile-ghostty-md-arm64) (push) Has been cancelled
Test / build-linux-libghostty (push) Has been cancelled
Test / build-nix (namespace-profile-ghostty-md) (push) Has been cancelled
Test / build-dist-lib-vt (push) Has been cancelled
Test / trigger-snap (push) Has been cancelled
Test / trigger-flatpak (push) Has been cancelled
Test / build-macos (push) Has been cancelled
Test / build-macos-freetype (push) Has been cancelled
Test / test (push) Has been cancelled
Test / test-lib-vt (push) Has been cancelled
Test / GTK x11=false wayland=false (push) Has been cancelled
Test / GTK x11=true wayland=false (push) Has been cancelled
Test / GTK x11=false wayland=true (push) Has been cancelled
Test / test-macos (push) Has been cancelled
Test / test-windows (push) Has been cancelled
Test / Build -Di18n=false (push) Has been cancelled
Test / Build -Di18n=true (push) Has been cancelled
Test / Build test/fuzz-libghostty (push) Has been cancelled
Test / shellcheck (push) Has been cancelled
Test / translations (push) Has been cancelled
Test / blueprint-compiler (push) Has been cancelled
Test / Test pkg/wuffs (push) Has been cancelled
Test / Test build on Debian 13 (push) Has been cancelled
Test / valgrind (push) Has been cancelled
Test / Example ${{ matrix.dir }} (push) Has been cancelled
174 lines
4.5 KiB
Swift
174 lines
4.5 KiB
Swift
import SwiftUI
|
|
import GhosttyKit
|
|
|
|
extension Ghostty {
|
|
struct Action {}
|
|
}
|
|
|
|
extension Ghostty.Action {
|
|
struct ColorChange {
|
|
let kind: Kind
|
|
let color: Color
|
|
|
|
enum Kind {
|
|
case foreground
|
|
case background
|
|
case cursor
|
|
case palette(index: UInt8)
|
|
}
|
|
|
|
init(c: ghostty_action_color_change_s) {
|
|
switch c.kind {
|
|
case GHOSTTY_ACTION_COLOR_KIND_FOREGROUND:
|
|
self.kind = .foreground
|
|
case GHOSTTY_ACTION_COLOR_KIND_BACKGROUND:
|
|
self.kind = .background
|
|
case GHOSTTY_ACTION_COLOR_KIND_CURSOR:
|
|
self.kind = .cursor
|
|
default:
|
|
self.kind = .palette(index: UInt8(c.kind.rawValue))
|
|
}
|
|
|
|
self.color = Color(red: Double(c.r) / 255, green: Double(c.g) / 255, blue: Double(c.b) / 255)
|
|
}
|
|
}
|
|
|
|
struct MoveTab {
|
|
let amount: Int
|
|
|
|
init(c: ghostty_action_move_tab_s) {
|
|
self.amount = c.amount
|
|
}
|
|
}
|
|
|
|
struct OpenURL {
|
|
enum Kind {
|
|
case unknown
|
|
case text
|
|
case html
|
|
|
|
init(_ c: ghostty_action_open_url_kind_e) {
|
|
switch c {
|
|
case GHOSTTY_ACTION_OPEN_URL_KIND_TEXT:
|
|
self = .text
|
|
case GHOSTTY_ACTION_OPEN_URL_KIND_HTML:
|
|
self = .html
|
|
default:
|
|
self = .unknown
|
|
}
|
|
}
|
|
}
|
|
|
|
let kind: Kind
|
|
let url: String
|
|
|
|
init(c: ghostty_action_open_url_s) {
|
|
self.kind = Kind(c.kind)
|
|
|
|
if let urlCString = c.url {
|
|
let data = Data(bytes: urlCString, count: Int(c.len))
|
|
self.url = String(data: data, encoding: .utf8) ?? ""
|
|
} else {
|
|
self.url = ""
|
|
}
|
|
}
|
|
}
|
|
|
|
struct ProgressReport {
|
|
enum State {
|
|
case remove
|
|
case set
|
|
case error
|
|
case indeterminate
|
|
case pause
|
|
|
|
init(_ c: ghostty_action_progress_report_state_e) {
|
|
switch c {
|
|
case GHOSTTY_PROGRESS_STATE_REMOVE:
|
|
self = .remove
|
|
case GHOSTTY_PROGRESS_STATE_SET:
|
|
self = .set
|
|
case GHOSTTY_PROGRESS_STATE_ERROR:
|
|
self = .error
|
|
case GHOSTTY_PROGRESS_STATE_INDETERMINATE:
|
|
self = .indeterminate
|
|
case GHOSTTY_PROGRESS_STATE_PAUSE:
|
|
self = .pause
|
|
default:
|
|
self = .remove
|
|
}
|
|
}
|
|
}
|
|
|
|
let state: State
|
|
let progress: UInt8?
|
|
}
|
|
|
|
struct Scrollbar {
|
|
let total: UInt64
|
|
let offset: UInt64
|
|
let len: UInt64
|
|
|
|
init(c: ghostty_action_scrollbar_s) {
|
|
total = c.total
|
|
offset = c.offset
|
|
len = c.len
|
|
}
|
|
}
|
|
|
|
struct StartSearch {
|
|
let needle: String?
|
|
|
|
init(c: ghostty_action_start_search_s) {
|
|
if let needleCString = c.needle {
|
|
self.needle = String(cString: needleCString)
|
|
} else {
|
|
self.needle = nil
|
|
}
|
|
}
|
|
}
|
|
|
|
enum PromptTitle {
|
|
case surface
|
|
case tab
|
|
|
|
init(_ c: ghostty_action_prompt_title_e) {
|
|
switch c {
|
|
case GHOSTTY_PROMPT_TITLE_TAB:
|
|
self = .tab
|
|
default:
|
|
self = .surface
|
|
}
|
|
}
|
|
}
|
|
|
|
enum KeyTable {
|
|
case activate(name: String)
|
|
case deactivate
|
|
case deactivateAll
|
|
|
|
init?(c: ghostty_action_key_table_s) {
|
|
switch c.tag {
|
|
case GHOSTTY_KEY_TABLE_ACTIVATE:
|
|
let data = Data(bytes: c.value.activate.name, count: c.value.activate.len)
|
|
let name = String(data: data, encoding: .utf8) ?? ""
|
|
self = .activate(name: name)
|
|
case GHOSTTY_KEY_TABLE_DEACTIVATE:
|
|
self = .deactivate
|
|
case GHOSTTY_KEY_TABLE_DEACTIVATE_ALL:
|
|
self = .deactivateAll
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Putting the initializer in an extension preserves the automatic one.
|
|
extension Ghostty.Action.ProgressReport {
|
|
init(c: ghostty_action_progress_report_s) {
|
|
self.state = State(c.state)
|
|
self.progress = c.progress >= 0 ? UInt8(c.progress) : nil
|
|
}
|
|
}
|