mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-14 19:45:49 +00:00
Add two new AppleScript commands to the scripting dictionary: - `focus terminal <terminal>` — focuses the given terminal and brings its window to the front. - `close terminal <terminal>` — closes the given terminal without a confirmation prompt. Each command is implemented as an NSScriptCommand subclass following the same pattern as the existing split command.
34 lines
1.2 KiB
Swift
34 lines
1.2 KiB
Swift
import AppKit
|
|
|
|
/// Handler for the `close` AppleScript command defined in `Ghostty.sdef`.
|
|
///
|
|
/// Cocoa scripting instantiates this class because the command's `<cocoa>` element
|
|
/// specifies `class="GhosttyScriptCloseCommand"`. The runtime calls
|
|
/// `performDefaultImplementation()` to execute the command.
|
|
@MainActor
|
|
@objc(GhosttyScriptCloseCommand)
|
|
final class ScriptCloseCommand: NSScriptCommand {
|
|
override func performDefaultImplementation() -> Any? {
|
|
guard let terminal = evaluatedArguments?["terminal"] as? ScriptTerminal else {
|
|
scriptErrorNumber = errAEParamMissed
|
|
scriptErrorString = "Missing terminal target."
|
|
return nil
|
|
}
|
|
|
|
guard let surfaceView = terminal.surfaceView else {
|
|
scriptErrorNumber = errAEEventFailed
|
|
scriptErrorString = "Terminal surface is no longer available."
|
|
return nil
|
|
}
|
|
|
|
guard let controller = surfaceView.window?.windowController as? BaseTerminalController else {
|
|
scriptErrorNumber = errAEEventFailed
|
|
scriptErrorString = "Terminal is not in a window."
|
|
return nil
|
|
}
|
|
|
|
controller.closeSurface(surfaceView, withConfirmation: false)
|
|
return nil
|
|
}
|
|
}
|