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