mirror of
https://github.com/neon443/ShhShell.git
synced 2026-03-11 13:26:16 +00:00
added applyTheme() function
added SwiftTerm.Color.uiColor extension to get a UIColor from SwiftTerm.Color rename SSHTerminalView to SSHTerminalDelegate
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
import SwiftTerm
|
||||
import SwiftUI
|
||||
|
||||
struct Theme: Hashable, Equatable {
|
||||
var name: String
|
||||
@@ -21,7 +22,6 @@ struct Theme: Hashable, Equatable {
|
||||
|
||||
static func fromiTermColors(name: String, data: Data?) -> Theme? {
|
||||
guard let data else { return nil }
|
||||
guard let string = String(data: data, encoding: .utf8) else { return nil }
|
||||
|
||||
let decoder = PropertyListDecoder()
|
||||
|
||||
@@ -96,7 +96,7 @@ struct ThemeCodable: Codable {
|
||||
}
|
||||
|
||||
extension ThemeCodable {
|
||||
var ansi: [Color] {
|
||||
var ansi: [SwiftTerm.Color] {
|
||||
let arr = [ansi0, ansi1, ansi2, ansi3, ansi4, ansi5, ansi6, ansi7, ansi8, ansi9, ansi10, ansi11, ansi12, ansi13, ansi14, ansi15]
|
||||
return arr.map(SwiftTerm.Color.init)
|
||||
}
|
||||
@@ -123,3 +123,12 @@ extension SwiftTerm.Color {
|
||||
self.init(red: red, green: green, blue: blue)
|
||||
}
|
||||
}
|
||||
|
||||
extension SwiftTerm.Color {
|
||||
var uiColor: UIColor {
|
||||
let red = CGFloat(self.red/65535)
|
||||
let green = CGFloat(self.green/65535)
|
||||
let blue = CGFloat(self.blue/65535)
|
||||
return UIColor(red: red, green: green, blue: blue, alpha: 1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import UIKit
|
||||
import SwiftTerm
|
||||
|
||||
@MainActor
|
||||
final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalViewDelegate {
|
||||
final class SSHTerminalDelegate: TerminalView, Sendable, @preconcurrency TerminalViewDelegate {
|
||||
var handler: SSHHandler?
|
||||
|
||||
public convenience init(frame: CGRect, handler: SSHHandler) {
|
||||
@@ -48,6 +48,17 @@ final class SSHTerminalView: TerminalView, Sendable, @preconcurrency TerminalVie
|
||||
}
|
||||
}
|
||||
|
||||
func applyTheme(_ theme: Theme) {
|
||||
getTerminal().installPalette(colors: theme.ansi)
|
||||
getTerminal().foregroundColor = theme.foreground
|
||||
getTerminal().backgroundColor = theme.background
|
||||
|
||||
caretColor = theme.cursor.uiColor
|
||||
selectedTextBackgroundColor = theme.selection.uiColor
|
||||
|
||||
// TODO: selectedtext and cursor colors
|
||||
}
|
||||
|
||||
public override init(frame: CGRect) {
|
||||
super.init(frame: frame)
|
||||
terminalDelegate = self
|
||||
@@ -14,7 +14,7 @@ struct TerminalController: UIViewRepresentable {
|
||||
@ObservedObject var handler: SSHHandler
|
||||
|
||||
final class TerminalViewContainer {
|
||||
@MainActor static var shared: SSHTerminalView?
|
||||
@MainActor static var shared: SSHTerminalDelegate?
|
||||
}
|
||||
|
||||
func makeUIView(context: Context) -> TerminalView {
|
||||
@@ -22,7 +22,7 @@ struct TerminalController: UIViewRepresentable {
|
||||
return existing
|
||||
}
|
||||
|
||||
let tv = SSHTerminalView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: .zero), handler: handler)
|
||||
let tv = SSHTerminalDelegate(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: .zero), handler: handler)
|
||||
tv.translatesAutoresizingMaskIntoConstraints = false
|
||||
tv.autoresizingMask = [.flexibleWidth, .flexibleHeight]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user