Files
2026-07-13 12:22:33 +08:00

48 lines
1.8 KiB
Swift

import Foundation
enum CLITerminalBackend: Equatable, Sendable {
case standard
case truecolor
case kittyGraphics
}
enum CLITerminalCapabilities {
static func detect(environment: [String: String] = ProcessInfo.processInfo.environment) -> CLITerminalBackend {
if self.supportsKittyGraphics(environment: environment) {
return .kittyGraphics
}
if self.supportsTruecolor(environment: environment) {
return .truecolor
}
return .standard
}
static func supportsEnhancedCards(
useColor: Bool,
environment: [String: String] = ProcessInfo.processInfo.environment) -> Bool
{
guard useColor else { return false }
if environment["CODEXBAR_CARDS_ENHANCED"] == "1" { return true }
if environment["CODEXBAR_CARDS_ENHANCED"] == "0" { return false }
return self.supportsTruecolor(environment: environment)
}
static func supportsKittyGraphics(environment: [String: String]) -> Bool {
if environment["KITTY_WINDOW_ID"] != nil { return true }
if environment["GHOSTTY_RESOURCES_DIR"] != nil { return true }
let term = environment["TERM"]?.lowercased() ?? ""
if term.contains("kitty") || term.contains("ghostty") || term.contains("wezterm") {
return true
}
return false
}
static func supportsTruecolor(environment: [String: String]) -> Bool {
if self.supportsKittyGraphics(environment: environment) { return true }
let colorTerm = environment["COLORTERM"]?.lowercased() ?? ""
if colorTerm.contains("truecolor") || colorTerm.contains("24bit") { return true }
let term = environment["TERM"]?.lowercased() ?? ""
return term.contains("foot") || term.contains("alacritty")
}
}