mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-09-05 19:08:17 +00:00
109 lines
2.9 KiB
Swift
109 lines
2.9 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
|
|
|
|
init(_ c: ghostty_action_open_url_kind_e) {
|
|
switch c {
|
|
case GHOSTTY_ACTION_OPEN_URL_KIND_TEXT:
|
|
self = .text
|
|
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?
|
|
|
|
init(c: ghostty_action_progress_report_s) {
|
|
self.state = State(c.state)
|
|
self.progress = c.progress >= 0 ? UInt8(c.progress) : nil
|
|
}
|
|
}
|
|
}
|