Fix ghostty performance. Improve keyboard and input mode handling
This commit is contained in:
@@ -8,12 +8,16 @@ final class AppSettingsControllerTests: XCTestCase {
|
||||
var settings = AppSettings.default
|
||||
settings.terminal.shellPath = "/opt/homebrew/bin/fish"
|
||||
settings.terminal.scrollbackLines = 12_000
|
||||
settings.terminal.backendRawValue = TerminalBackendPreference.swiftTerm.rawValue
|
||||
settings.terminal.termTypeRawValue = TerminalTermTypePreference.xterm256color.rawValue
|
||||
store.storedSettings = settings
|
||||
|
||||
let controller = AppSettingsController(store: store)
|
||||
|
||||
XCTAssertEqual(controller.terminalSessionConfiguration.shellPath, "/opt/homebrew/bin/fish")
|
||||
XCTAssertEqual(controller.terminalSessionConfiguration.scrollbackLines, 12_000)
|
||||
XCTAssertEqual(controller.terminalSessionConfiguration.backendPreference, .swiftTerm)
|
||||
XCTAssertEqual(controller.terminalSessionConfiguration.termTypePreference, .xterm256color)
|
||||
}
|
||||
|
||||
func testTerminalSizePresetsDecodeFromTypedSettings() {
|
||||
|
||||
@@ -27,6 +27,8 @@ final class AppSettingsStoreTests: XCTestCase {
|
||||
settings.terminal.fontSize = 16
|
||||
settings.terminal.themeRawValue = TerminalTheme.dracula.rawValue
|
||||
settings.terminal.scrollbackLines = 25_000
|
||||
settings.terminal.backendRawValue = TerminalBackendPreference.swiftTerm.rawValue
|
||||
settings.terminal.termTypeRawValue = TerminalTermTypePreference.xterm256color.rawValue
|
||||
settings.terminal.sizePresetsJSON = TerminalSizePresetStore.encodePresets([
|
||||
TerminalSizePreset(name: "Wide", width: 960, height: 420, hotkey: .cmdShiftDigit(4))
|
||||
])
|
||||
|
||||
@@ -306,7 +306,14 @@ private final class TestAppSettingsStore: AppSettingsStoreType {
|
||||
}
|
||||
|
||||
private final class ScreenRegistryTestSettingsProvider: TerminalSessionConfigurationProviding {
|
||||
let terminalSessionConfiguration = TerminalSessionConfiguration(fontSize: 13, theme: .terminalApp, shellPath: "", scrollbackLines: 500)
|
||||
let terminalSessionConfiguration = TerminalSessionConfiguration(
|
||||
fontSize: 13,
|
||||
theme: .terminalApp,
|
||||
shellPath: "",
|
||||
scrollbackLines: 500,
|
||||
backendPreference: .ghostty,
|
||||
termTypePreference: .automatic
|
||||
)
|
||||
let hotkeySettings = AppSettings.default.hotkeys
|
||||
let terminalSizePresets = TerminalSizePresetStore.loadDefaults()
|
||||
}
|
||||
@@ -318,8 +325,17 @@ private struct ScreenRegistryUnusedTerminalSessionFactory: TerminalSessionFactor
|
||||
theme: TerminalTheme,
|
||||
shellPath: String,
|
||||
scrollbackLines: Int,
|
||||
backendPreference: TerminalBackendPreference,
|
||||
termTypePreference: TerminalTermTypePreference,
|
||||
initialDirectory: String?
|
||||
) -> TerminalSession {
|
||||
_ = fontSize
|
||||
_ = theme
|
||||
_ = shellPath
|
||||
_ = scrollbackLines
|
||||
_ = backendPreference
|
||||
_ = termTypePreference
|
||||
_ = initialDirectory
|
||||
fatalError("ScreenRegistryTests should not create live terminal sessions.")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,4 +43,44 @@ final class TerminalScrollCoordinatorTests: XCTestCase {
|
||||
XCTAssertFalse(coordinator.followsOutput)
|
||||
XCTAssertEqual(coordinator.outputRestorePosition(canScroll: true) ?? .nan, 0.42, accuracy: 0.0001)
|
||||
}
|
||||
|
||||
func testMouseCaptureCoordinatorSuppressesStaleCaptureAfterCommandFinish() {
|
||||
let coordinator = TerminalMouseCaptureCoordinator()
|
||||
|
||||
let requiresReset = coordinator.commandDidFinish(mouseCaptured: true)
|
||||
|
||||
XCTAssertFalse(coordinator.shouldForwardMouseInput(mouseCaptured: true))
|
||||
XCTAssertTrue(coordinator.shouldBypassEnhancedKeyboardInput(mouseCaptured: true))
|
||||
XCTAssertTrue(coordinator.suppressesMouseReporting)
|
||||
XCTAssertTrue(requiresReset)
|
||||
}
|
||||
|
||||
func testMouseCaptureCoordinatorDoesNotRequestResetForCleanCommandFinish() {
|
||||
let coordinator = TerminalMouseCaptureCoordinator()
|
||||
|
||||
let requiresReset = coordinator.commandDidFinish(mouseCaptured: false)
|
||||
|
||||
XCTAssertFalse(requiresReset)
|
||||
XCTAssertFalse(coordinator.shouldBypassEnhancedKeyboardInput(mouseCaptured: false))
|
||||
XCTAssertTrue(coordinator.shouldForwardMouseInput(mouseCaptured: false))
|
||||
}
|
||||
|
||||
func testMouseCaptureCoordinatorClearsSuppressionWhenCaptureDrops() {
|
||||
let coordinator = TerminalMouseCaptureCoordinator()
|
||||
coordinator.commandDidFinish(mouseCaptured: true)
|
||||
|
||||
XCTAssertFalse(coordinator.shouldBypassEnhancedKeyboardInput(mouseCaptured: false))
|
||||
XCTAssertTrue(coordinator.shouldForwardMouseInput(mouseCaptured: false))
|
||||
XCTAssertFalse(coordinator.suppressesMouseReporting)
|
||||
}
|
||||
|
||||
func testMouseCaptureCoordinatorClearsSuppressionWhenUserSubmitsCommand() {
|
||||
let coordinator = TerminalMouseCaptureCoordinator()
|
||||
coordinator.commandDidFinish(mouseCaptured: true)
|
||||
|
||||
coordinator.userDidSubmitCommand()
|
||||
|
||||
XCTAssertTrue(coordinator.shouldForwardMouseInput(mouseCaptured: true))
|
||||
XCTAssertFalse(coordinator.suppressesMouseReporting)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -137,6 +137,8 @@ final class WorkspaceControllerTests: XCTestCase {
|
||||
controller.newTab()
|
||||
|
||||
XCTAssertEqual(factory.requestedDirectories, [nil, "/tmp/Raycast"])
|
||||
XCTAssertEqual(factory.requestedBackends, [.ghostty, .ghostty])
|
||||
XCTAssertEqual(factory.requestedTermTypes, [.automatic, .automatic])
|
||||
XCTAssertEqual(controller.activeTab?.currentDirectory, "/tmp/Raycast")
|
||||
XCTAssertEqual(controller.tabs.count, 2)
|
||||
XCTAssertEqual(controller.activeTabIndex, 1)
|
||||
@@ -191,13 +193,22 @@ private final class InMemoryWorkspaceStore: WorkspaceStoreType {
|
||||
}
|
||||
|
||||
private final class TestSettingsProvider: TerminalSessionConfigurationProviding {
|
||||
let terminalSessionConfiguration = TerminalSessionConfiguration(fontSize: 13, theme: .terminalApp, shellPath: "", scrollbackLines: 500)
|
||||
let terminalSessionConfiguration = TerminalSessionConfiguration(
|
||||
fontSize: 13,
|
||||
theme: .terminalApp,
|
||||
shellPath: "",
|
||||
scrollbackLines: 500,
|
||||
backendPreference: .ghostty,
|
||||
termTypePreference: .automatic
|
||||
)
|
||||
let hotkeySettings = AppSettings.default.hotkeys
|
||||
let terminalSizePresets = TerminalSizePresetStore.loadDefaults()
|
||||
}
|
||||
|
||||
private final class RecordingTerminalSessionFactory: TerminalSessionFactoryType {
|
||||
private(set) var requestedDirectories: [String?] = []
|
||||
private(set) var requestedBackends: [TerminalBackendPreference] = []
|
||||
private(set) var requestedTermTypes: [TerminalTermTypePreference] = []
|
||||
|
||||
@MainActor
|
||||
func makeSession(
|
||||
@@ -205,14 +216,20 @@ private final class RecordingTerminalSessionFactory: TerminalSessionFactoryType
|
||||
theme: TerminalTheme,
|
||||
shellPath: String,
|
||||
scrollbackLines: Int,
|
||||
backendPreference: TerminalBackendPreference,
|
||||
termTypePreference: TerminalTermTypePreference,
|
||||
initialDirectory: String?
|
||||
) -> TerminalSession {
|
||||
requestedDirectories.append(initialDirectory)
|
||||
requestedBackends.append(backendPreference)
|
||||
requestedTermTypes.append(termTypePreference)
|
||||
return TerminalSession(
|
||||
fontSize: fontSize,
|
||||
theme: theme,
|
||||
shellPath: shellPath,
|
||||
scrollbackLines: scrollbackLines,
|
||||
backendPreference: backendPreference,
|
||||
termTypePreference: termTypePreference,
|
||||
initialDirectory: initialDirectory,
|
||||
startImmediately: false
|
||||
)
|
||||
@@ -226,8 +243,12 @@ private struct UnusedTerminalSessionFactory: TerminalSessionFactoryType {
|
||||
theme: TerminalTheme,
|
||||
shellPath: String,
|
||||
scrollbackLines: Int,
|
||||
backendPreference: TerminalBackendPreference,
|
||||
termTypePreference: TerminalTermTypePreference,
|
||||
initialDirectory: String?
|
||||
) -> TerminalSession {
|
||||
_ = backendPreference
|
||||
_ = termTypePreference
|
||||
fatalError("WorkspaceRegistryTests should not create live terminal sessions.")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user