macos: add a macos-shortcut config
parent
647f29bad1
commit
b6559d0899
|
|
@ -1,5 +1,7 @@
|
|||
import AppKit
|
||||
|
||||
/// Requests permission for Shortcuts app to interact with Ghostty
|
||||
///
|
||||
///
|
||||
/// This function displays a permission dialog asking the user to allow Shortcuts
|
||||
/// to interact with Ghostty. The permission is automatically cached for 10 minutes
|
||||
/// if the user selects "Allow", meaning subsequent intent calls won't show the dialog
|
||||
|
|
@ -25,6 +27,23 @@
|
|||
func requestIntentPermission() async -> Bool {
|
||||
await withCheckedContinuation { continuation in
|
||||
Task { @MainActor in
|
||||
if let delegate = NSApp.delegate as? AppDelegate {
|
||||
switch (delegate.ghostty.config.macosShortcuts) {
|
||||
case .allow:
|
||||
continuation.resume(returning: true)
|
||||
return
|
||||
|
||||
case .deny:
|
||||
continuation.resume(returning: false)
|
||||
return
|
||||
|
||||
case .ask:
|
||||
// Continue with the permission dialog
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PermissionRequest.show(
|
||||
"org.mitchellh.ghostty.shortcutsPermission",
|
||||
message: "Allow Shortcuts to interact with Ghostty for the next 10 minutes?",
|
||||
|
|
|
|||
|
|
@ -558,6 +558,17 @@ extension Ghostty {
|
|||
_ = ghostty_config_get(config, &v, key, UInt(key.count))
|
||||
return v
|
||||
}
|
||||
|
||||
var macosShortcuts: MacShortcuts {
|
||||
let defaultValue = MacShortcuts.ask
|
||||
guard let config = self.config else { return defaultValue }
|
||||
var v: UnsafePointer<Int8>? = nil
|
||||
let key = "macos-shortcuts"
|
||||
guard ghostty_config_get(config, &v, key, UInt(key.count)) else { return defaultValue }
|
||||
guard let ptr = v else { return defaultValue }
|
||||
let str = String(cString: ptr)
|
||||
return MacShortcuts(rawValue: str) ?? defaultValue
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -584,6 +595,12 @@ extension Ghostty.Config {
|
|||
case always
|
||||
}
|
||||
|
||||
enum MacShortcuts: String {
|
||||
case allow
|
||||
case deny
|
||||
case ask
|
||||
}
|
||||
|
||||
enum ResizeOverlay : String {
|
||||
case always
|
||||
case never
|
||||
|
|
|
|||
|
|
@ -2355,6 +2355,30 @@ keybind: Keybinds = .{},
|
|||
///
|
||||
@"macos-icon-screen-color": ?ColorList = null,
|
||||
|
||||
/// Whether macOS Shortcuts are allowed to control Ghostty.
|
||||
///
|
||||
/// Ghostty exposes a number of actions that allow Shortcuts to
|
||||
/// control and interact with Ghostty. This includes creating new
|
||||
/// terminals, sending text to terminals, running commands, invoking
|
||||
/// any keybind action, etc.
|
||||
///
|
||||
/// This is a powerful feature but can be a security risk if a malicious
|
||||
/// shortcut is able to be installed and executed. Therefore, this
|
||||
/// configuration allows you to disable this feature.
|
||||
///
|
||||
/// Valid values are:
|
||||
///
|
||||
/// * `ask` - Ask the user whether for permission. Ghostty will by default
|
||||
/// cache the user's choice for 10 minutes since we can't determine
|
||||
/// when a single workflow begins or ends. The user also has an option
|
||||
/// in the GUI to allow for the remainder of the day.
|
||||
///
|
||||
/// * `allow` - Allow Shortcuts to control Ghostty without asking.
|
||||
///
|
||||
/// * `deny` - Deny Shortcuts from controlling Ghostty.
|
||||
///
|
||||
@"macos-shortcuts": MacShortcuts = .ask,
|
||||
|
||||
/// Put every surface (tab, split, window) into a dedicated Linux cgroup.
|
||||
///
|
||||
/// This makes it so that resource management can be done on a per-surface
|
||||
|
|
@ -5961,6 +5985,13 @@ pub const MacAppIconFrame = enum {
|
|||
chrome,
|
||||
};
|
||||
|
||||
/// See macos-shortcuts
|
||||
pub const MacShortcuts = enum {
|
||||
allow,
|
||||
deny,
|
||||
ask,
|
||||
};
|
||||
|
||||
/// See gtk-single-instance
|
||||
pub const GtkSingleInstance = enum {
|
||||
desktop,
|
||||
|
|
|
|||
Loading…
Reference in New Issue