48 lines
1.8 KiB
Swift
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")
|
|
}
|
|
}
|