mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-30 02:53:56 +00:00
add "Set Ghostty as Default Terminal App" on macOS
This commit is contained in:
committed by
Mitchell Hashimoto
parent
b6dbd445d0
commit
aee80d208d
@@ -65,6 +65,7 @@ class AppDelegate: NSObject,
|
||||
@IBOutlet private var menuReturnToDefaultSize: NSMenuItem?
|
||||
@IBOutlet private var menuFloatOnTop: NSMenuItem?
|
||||
@IBOutlet private var menuUseAsDefault: NSMenuItem?
|
||||
@IBOutlet private var menuSetAsDefaultTerminal: NSMenuItem?
|
||||
|
||||
@IBOutlet private var menuIncreaseFontSize: NSMenuItem?
|
||||
@IBOutlet private var menuDecreaseFontSize: NSMenuItem?
|
||||
@@ -577,6 +578,7 @@ class AppDelegate: NSObject,
|
||||
self.menuChangeTabTitle?.setImageIfDesired(systemSymbolName: "pencil.line")
|
||||
self.menuTerminalInspector?.setImageIfDesired(systemSymbolName: "scope")
|
||||
self.menuReadonly?.setImageIfDesired(systemSymbolName: "eye.fill")
|
||||
self.menuSetAsDefaultTerminal?.setImageIfDesired(systemSymbolName: "star.fill")
|
||||
self.menuToggleFullScreen?.setImageIfDesired(systemSymbolName: "square.arrowtriangle.4.outward")
|
||||
self.menuToggleVisibility?.setImageIfDesired(systemSymbolName: "eye")
|
||||
self.menuZoomSplit?.setImageIfDesired(systemSymbolName: "arrow.up.left.and.arrow.down.right")
|
||||
@@ -1292,6 +1294,21 @@ extension AppDelegate {
|
||||
ud.removeObject(forKey: key)
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func setAsDefaultTerminal(_ sender: NSMenuItem) {
|
||||
do {
|
||||
try NSWorkspace.shared.setGhosttyAsDefaultTerminal()
|
||||
// Success - menu state will automatically update via validateMenuItem
|
||||
} catch {
|
||||
// Show error dialog
|
||||
let alert = NSAlert()
|
||||
alert.messageText = "Failed to Set Default Terminal"
|
||||
alert.informativeText = "Ghostty could not be set as the default terminal application.\n\nError: \(error.localizedDescription)"
|
||||
alert.alertStyle = .warning
|
||||
alert.addButton(withTitle: "OK")
|
||||
alert.runModal()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: NSMenuItemValidation
|
||||
@@ -1299,6 +1316,12 @@ extension AppDelegate {
|
||||
extension AppDelegate: NSMenuItemValidation {
|
||||
func validateMenuItem(_ item: NSMenuItem) -> Bool {
|
||||
switch item.action {
|
||||
case #selector(setAsDefaultTerminal(_:)):
|
||||
// Check if Ghostty is already the default terminal
|
||||
let isDefault = NSWorkspace.shared.isGhosttyDefaultTerminal
|
||||
// Disable menu item if already default (option A)
|
||||
return !isDefault
|
||||
|
||||
case #selector(floatOnTop(_:)),
|
||||
#selector(useAsDefault(_:)):
|
||||
// Float on top items only active if the key window is a primary
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
<outlet property="menuSelectSplitRight" destination="upj-mc-L7X" id="nLY-o1-lky"/>
|
||||
<outlet property="menuSelectionForSearch" destination="TDN-42-Bu7" id="M04-1K-vze"/>
|
||||
<outlet property="menuServices" destination="aQe-vS-j8Q" id="uWQ-Wo-T1L"/>
|
||||
<outlet property="menuSetAsDefaultTerminal" destination="b1t-oB-7MI" id="6Eu-5G-OPo"/>
|
||||
<outlet property="menuSplitDown" destination="UDZ-4y-6xL" id="ptr-mj-Azh"/>
|
||||
<outlet property="menuSplitLeft" destination="Ppv-GP-lQU" id="Xd5-Cd-Jut"/>
|
||||
<outlet property="menuSplitRight" destination="VUR-Ld-nLx" id="RxO-Zw-ovb"/>
|
||||
@@ -109,6 +110,12 @@
|
||||
<action selector="toggleSecureInput:" target="bbz-4X-AYv" id="vWx-z8-5Sy"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Make Ghostty the Default Terminal" id="b1t-oB-7MI" userLabel="Set Ghostty as Default Terminal App">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="setAsDefaultTerminal:" target="bbz-4X-AYv" id="QHh-CA-Qho"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||
<menuItem title="Services" id="rJe-5J-bwL">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
|
||||
Reference in New Issue
Block a user