macos: sync many more menu items

This commit is contained in:
Mitchell Hashimoto
2023-08-31 11:33:58 -07:00
parent c7071a1da2
commit 22b925223a
2 changed files with 43 additions and 18 deletions

View File

@ -17,6 +17,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, ObservableObject {
/// Various menu items so that we can programmatically sync the keyboard shortcut with the Ghostty config.
@IBOutlet private var menuPreviousSplit: NSMenuItem?
@IBOutlet private var menuNextSplit: NSMenuItem?
@IBOutlet private var menuSelectSplitAbove: NSMenuItem?
@IBOutlet private var menuSelectSplitBelow: NSMenuItem?
@IBOutlet private var menuSelectSplitLeft: NSMenuItem?
@IBOutlet private var menuSelectSplitRight: NSMenuItem?
/// The ghostty global state. Only one per process.
private var ghostty: Ghostty.AppState = Ghostty.AppState()
@ -83,17 +87,32 @@ class AppDelegate: NSObject, NSApplicationDelegate, ObservableObject {
return .terminateLater
}
/// Sync all of our menu item keyboard shortcuts with the Ghostty configuration.
private func syncMenuShortcuts() {
guard let cfg = ghostty.config else { return }
guard ghostty.config != nil else { return }
if let menu = self.menuPreviousSplit {
let action = "goto_split:previous"
let trigger = ghostty_config_trigger(cfg, action, UInt(action.count))
if let equiv = Ghostty.keyEquivalent(key: trigger.key) {
menu.keyEquivalent = equiv
menu.keyEquivalentModifierMask = Ghostty.eventModifierFlags(mods: trigger.mods)
}
syncMenuShortcut(action: "goto_split:previous", menuItem: self.menuPreviousSplit)
syncMenuShortcut(action: "goto_split:next", menuItem: self.menuNextSplit)
syncMenuShortcut(action: "goto_split:top", menuItem: self.menuSelectSplitAbove)
syncMenuShortcut(action: "goto_split:bottom", menuItem: self.menuSelectSplitBelow)
syncMenuShortcut(action: "goto_split:left", menuItem: self.menuSelectSplitLeft)
syncMenuShortcut(action: "goto_split:right", menuItem: self.menuSelectSplitRight)
}
/// Syncs a single menu shortcut for the given action. The action string is the same
/// action string used for the Ghostty configuration.
private func syncMenuShortcut(action: String, menuItem: NSMenuItem?) {
guard let cfg = ghostty.config else { return }
guard let menu = menuItem else { return }
let trigger = ghostty_config_trigger(cfg, action, UInt(action.count))
guard let equiv = Ghostty.keyEquivalent(key: trigger.key) else {
Self.logger.debug("no keyboard shorcut set for action=\(action)")
return
}
menu.keyEquivalent = equiv
menu.keyEquivalentModifierMask = Ghostty.eventModifierFlags(mods: trigger.mods)
}
private func focusedSurface() -> ghostty_surface_t? {

View File

@ -16,6 +16,10 @@
<connections>
<outlet property="menuNextSplit" destination="bD7-ei-wKU" id="LeT-xw-eh4"/>
<outlet property="menuPreviousSplit" destination="Lic-px-1wg" id="Rto-CG-yRe"/>
<outlet property="menuSelectSplitAbove" destination="0yU-hC-8xF" id="aPc-lS-own"/>
<outlet property="menuSelectSplitBelow" destination="QDz-d9-CBr" id="FsH-Dq-jij"/>
<outlet property="menuSelectSplitLeft" destination="cTK-oy-KuV" id="Jpr-5q-dqz"/>
<outlet property="menuSelectSplitRight" destination="upj-mc-L7X" id="nLY-o1-lky"/>
</connections>
</customObject>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
@ -146,12 +150,14 @@
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="rlu-tP-x0P"/>
<menuItem title="Select Previous Split" keyEquivalent="[" id="Lic-px-1wg">
<menuItem title="Select Previous Split" id="Lic-px-1wg">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="splitMoveFocusPrevious:" target="bbz-4X-AYv" id="mOs-gG-dAC"/>
</connections>
</menuItem>
<menuItem title="Select Next Split" keyEquivalent="]" id="bD7-ei-wKU">
<menuItem title="Select Next Split" id="bD7-ei-wKU">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="splitMoveFocusNext:" target="bbz-4X-AYv" id="rU6-Vw-DoW"/>
</connections>
@ -160,26 +166,26 @@
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Select Split" id="8tg-60-ZSU">
<items>
<menuItem title="Select Split Above" keyEquivalent="" id="0yU-hC-8xF">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<menuItem title="Select Split Above" id="0yU-hC-8xF">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="splitMoveFocusAbove:" target="bbz-4X-AYv" id="HDw-f2-RJY"/>
</connections>
</menuItem>
<menuItem title="Select Split Below" keyEquivalent="" id="QDz-d9-CBr">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<menuItem title="Select Split Below" id="QDz-d9-CBr">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="splitMoveFocusBelow:" target="bbz-4X-AYv" id="fmW-hZ-uOA"/>
</connections>
</menuItem>
<menuItem title="Select Split Left" keyEquivalent="" id="cTK-oy-KuV">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<menuItem title="Select Split Left" id="cTK-oy-KuV">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="splitMoveFocusLeft:" target="bbz-4X-AYv" id="N1i-a2-7N5"/>
</connections>
</menuItem>
<menuItem title="Select Split Right" keyEquivalent="" id="upj-mc-L7X">
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
<menuItem title="Select Split Right" id="upj-mc-L7X">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="splitMoveFocusRight:" target="bbz-4X-AYv" id="Pgi-df-84r"/>
</connections>