macos: more menu items

pull/9709/head
Mitchell Hashimoto 2025-11-25 20:34:38 -08:00
parent 240d5e0fc5
commit 7835ad0ea4
No known key found for this signature in database
GPG Key ID: 523D5DC389D273BC
5 changed files with 39 additions and 3 deletions

View File

@ -48,6 +48,7 @@ class AppDelegate: NSObject,
@IBOutlet private var menuFind: NSMenuItem? @IBOutlet private var menuFind: NSMenuItem?
@IBOutlet private var menuFindNext: NSMenuItem? @IBOutlet private var menuFindNext: NSMenuItem?
@IBOutlet private var menuFindPrevious: NSMenuItem? @IBOutlet private var menuFindPrevious: NSMenuItem?
@IBOutlet private var menuHideFindBar: NSMenuItem?
@IBOutlet private var menuToggleVisibility: NSMenuItem? @IBOutlet private var menuToggleVisibility: NSMenuItem?
@IBOutlet private var menuToggleFullScreen: NSMenuItem? @IBOutlet private var menuToggleFullScreen: NSMenuItem?

View File

@ -31,6 +31,7 @@
<outlet property="menuFindParent" destination="cE3-Bt-FcH" id="2dc-ok-hgH"/> <outlet property="menuFindParent" destination="cE3-Bt-FcH" id="2dc-ok-hgH"/>
<outlet property="menuFindPrevious" destination="1hd-2Z-wVm" id="sSo-wO-2MW"/> <outlet property="menuFindPrevious" destination="1hd-2Z-wVm" id="sSo-wO-2MW"/>
<outlet property="menuFloatOnTop" destination="uRj-7z-1Nh" id="94n-o9-Jol"/> <outlet property="menuFloatOnTop" destination="uRj-7z-1Nh" id="94n-o9-Jol"/>
<outlet property="menuHideFindBar" destination="xzC-AG-HAc" id="HCo-o6-VWv"/>
<outlet property="menuIncreaseFontSize" destination="CIH-ey-Z6x" id="hkc-9C-80E"/> <outlet property="menuIncreaseFontSize" destination="CIH-ey-Z6x" id="hkc-9C-80E"/>
<outlet property="menuMoveSplitDividerDown" destination="Zj7-2W-fdF" id="997-LL-nlN"/> <outlet property="menuMoveSplitDividerDown" destination="Zj7-2W-fdF" id="997-LL-nlN"/>
<outlet property="menuMoveSplitDividerLeft" destination="wSR-ny-j1a" id="HCZ-CI-2ob"/> <outlet property="menuMoveSplitDividerLeft" destination="wSR-ny-j1a" id="HCZ-CI-2ob"/>
@ -271,6 +272,13 @@
<action selector="findPrevious:" target="-1" id="Zvs-bs-ZR4"/> <action selector="findPrevious:" target="-1" id="Zvs-bs-ZR4"/>
</connections> </connections>
</menuItem> </menuItem>
<menuItem isSeparatorItem="YES" id="KlV-2C-wYr"/>
<menuItem title="Hide Find Bar" id="xzC-AG-HAc">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="findHide:" target="-1" id="hGP-K9-yN9"/>
</connections>
</menuItem>
</items> </items>
</menu> </menu>
</menuItem> </menuItem>

View File

@ -1124,6 +1124,10 @@ class BaseTerminalController: NSWindowController,
@IBAction func findPrevious(_ sender: Any) { @IBAction func findPrevious(_ sender: Any) {
focusedSurface?.findNext(sender) focusedSurface?.findNext(sender)
} }
@IBAction func findHide(_ sender: Any) {
focusedSurface?.findHide(sender)
}
@objc func resetTerminal(_ sender: Any) { @objc func resetTerminal(_ sender: Any) {
guard let surface = focusedSurface?.surface else { return } guard let surface = focusedSurface?.surface else { return }
@ -1148,3 +1152,15 @@ class BaseTerminalController: NSWindowController,
} }
} }
} }
extension BaseTerminalController: NSMenuItemValidation {
func validateMenuItem(_ item: NSMenuItem) -> Bool {
switch item.action {
case #selector(findHide):
return focusedSurface?.searchState != nil
default:
return true
}
}
}

View File

@ -1403,8 +1403,8 @@ class TerminalController: BaseTerminalController, TabGroupCloseCoordinator.Contr
// MARK: NSMenuItemValidation // MARK: NSMenuItemValidation
extension TerminalController: NSMenuItemValidation { extension TerminalController {
func validateMenuItem(_ item: NSMenuItem) -> Bool { override func validateMenuItem(_ item: NSMenuItem) -> Bool {
switch item.action { switch item.action {
case #selector(returnToDefaultSize): case #selector(returnToDefaultSize):
guard let window else { return false } guard let window else { return false }
@ -1433,7 +1433,7 @@ extension TerminalController: NSMenuItemValidation {
return true return true
default: default:
return true return super.validateMenuItem(item)
} }
} }
} }

View File

@ -1494,6 +1494,14 @@ extension Ghostty {
AppDelegate.logger.warning("action failed action=\(action)") AppDelegate.logger.warning("action failed action=\(action)")
} }
} }
@IBAction func findHide(_ sender: Any?) {
guard let surface = self.surface else { return }
let action = "search:"
if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) {
AppDelegate.logger.warning("action failed action=\(action)")
}
}
@IBAction func splitRight(_ sender: Any) { @IBAction func splitRight(_ sender: Any) {
guard let surface = self.surface else { return } guard let surface = self.surface else { return }
@ -1967,6 +1975,9 @@ extension Ghostty.SurfaceView: NSMenuItemValidation {
let pb = NSPasteboard.ghosttySelection let pb = NSPasteboard.ghosttySelection
guard let str = pb.getOpinionatedStringContents() else { return false } guard let str = pb.getOpinionatedStringContents() else { return false }
return !str.isEmpty return !str.isEmpty
case #selector(findHide):
return searchState != nil
default: default:
return true return true