76 lines
1.6 KiB
Swift
76 lines
1.6 KiB
Swift
import SwiftUI
|
|
import Combine
|
|
|
|
/// Compatibility adapter for the legacy single-workspace architecture.
|
|
/// New code should use `WorkspaceRegistry` + `WorkspaceController`.
|
|
@MainActor
|
|
class TerminalManager: ObservableObject {
|
|
|
|
static let shared = TerminalManager()
|
|
|
|
private var workspaceCancellable: AnyCancellable?
|
|
|
|
private init() {
|
|
workspaceCancellable = WorkspaceRegistry.shared.defaultWorkspaceController.objectWillChange
|
|
.sink { [weak self] _ in
|
|
self?.objectWillChange.send()
|
|
}
|
|
}
|
|
|
|
private var workspace: WorkspaceController {
|
|
WorkspaceRegistry.shared.defaultWorkspaceController
|
|
}
|
|
|
|
var tabs: [TerminalSession] {
|
|
workspace.tabs
|
|
}
|
|
|
|
var activeTabIndex: Int {
|
|
workspace.activeTabIndex
|
|
}
|
|
|
|
var activeTab: TerminalSession? {
|
|
workspace.activeTab
|
|
}
|
|
|
|
var activeTitle: String {
|
|
workspace.activeTitle
|
|
}
|
|
|
|
func newTab() {
|
|
workspace.newTab()
|
|
}
|
|
|
|
func closeActiveTab() {
|
|
workspace.closeActiveTab()
|
|
}
|
|
|
|
func closeTab(at index: Int) {
|
|
workspace.closeTab(at: index)
|
|
}
|
|
|
|
func switchToTab(at index: Int) {
|
|
workspace.switchToTab(at: index)
|
|
}
|
|
|
|
func nextTab() {
|
|
workspace.nextTab()
|
|
}
|
|
|
|
func previousTab() {
|
|
workspace.previousTab()
|
|
}
|
|
|
|
func detachActiveTab() -> TerminalSession? {
|
|
workspace.detachActiveTab()
|
|
}
|
|
|
|
func updateAllFontSizes(_ size: CGFloat) {
|
|
workspace.updateAllFontSizes(size)
|
|
}
|
|
|
|
func updateAllThemes(_ theme: TerminalTheme) {
|
|
workspace.updateAllThemes(theme)
|
|
}
|
|
}
|