summaryrefslogtreecommitdiff
path: root/macos/Sources/Features/App Intents/KeybindIntent.swift
blob: b31da4a50058c3917ffac1e2c8638e7574795f90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import AppKit
import AppIntents

struct KeybindIntent: AppIntent {
    static var title: LocalizedStringResource = "Invoke a Keybind Action"

    @Parameter(
        title: "Terminal",
        description: "The terminal to invoke the action on."
    )
    var terminal: TerminalEntity

    @Parameter(
        title: "Action",
        description: "The keybind action to invoke. This can be any valid keybind action you could put in a configuration file."
    )
    var action: String

    @available(macOS 26.0, *)
    static var supportedModes: IntentModes = [.background, .foreground]

    @MainActor
    func perform() async throws -> some IntentResult & ReturnsValue<Bool> {
        guard await requestIntentPermission() else {
            throw GhosttyIntentError.permissionDenied
        }
        
        guard let surface = terminal.surfaceModel else {
            throw GhosttyIntentError.surfaceNotFound
        }

        let performed = surface.perform(action: action)
        return .result(value: performed)
    }
}