diff --git a/macos/Sources/AppDelegate.swift b/macos/Sources/AppDelegate.swift index e23214154..9bdd637bd 100644 --- a/macos/Sources/AppDelegate.swift +++ b/macos/Sources/AppDelegate.swift @@ -32,7 +32,11 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, GhosttyApp @IBOutlet private var menuSelectSplitBelow: NSMenuItem? @IBOutlet private var menuSelectSplitLeft: NSMenuItem? @IBOutlet private var menuSelectSplitRight: NSMenuItem? - + + @IBOutlet private var menuIncreaseFontSize: NSMenuItem? + @IBOutlet private var menuDecreaseFontSize: NSMenuItem? + @IBOutlet private var menuResetFontSize: NSMenuItem? + /// The dock menu private var dockMenu: NSMenu = NSMenu() @@ -204,7 +208,11 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, GhosttyApp syncMenuShortcut(action: "goto_split:bottom", menuItem: self.menuSelectSplitBelow) syncMenuShortcut(action: "goto_split:left", menuItem: self.menuSelectSplitLeft) syncMenuShortcut(action: "goto_split:right", menuItem: self.menuSelectSplitRight) - + + syncMenuShortcut(action: "increase_font_size:1", menuItem: self.menuIncreaseFontSize) + syncMenuShortcut(action: "decrease_font_size:1", menuItem: self.menuDecreaseFontSize) + syncMenuShortcut(action: "reset_font_size", menuItem: self.menuResetFontSize) + // Dock menu reloadDockMenu() } @@ -367,4 +375,19 @@ class AppDelegate: NSObject, ObservableObject, NSApplicationDelegate, GhosttyApp guard let surface = focusedSurface() else { return } ghostty.toggleFullscreen(surface: surface) } + + @IBAction func increaseFontSize(_ sender: Any) { + guard let surface = focusedSurface() else { return } + ghostty.changeFontSize(surface: surface, .increase(1)) + } + + @IBAction func decreaseFontSize(_ sender: Any) { + guard let surface = focusedSurface() else { return } + ghostty.changeFontSize(surface: surface, .decrease(1)) + } + + @IBAction func resetFontSize(_ sender: Any) { + guard let surface = focusedSurface() else { return } + ghostty.changeFontSize(surface: surface, .reset) + } } diff --git a/macos/Sources/Ghostty/AppState.swift b/macos/Sources/Ghostty/AppState.swift index d3a4ba7d1..43f2a5dbf 100644 --- a/macos/Sources/Ghostty/AppState.swift +++ b/macos/Sources/Ghostty/AppState.swift @@ -11,6 +11,12 @@ extension Ghostty { case loading, error, ready } + enum FontSizeModification { + case increase(Int) + case decrease(Int) + case reset + } + struct Info { var mode: ghostty_build_mode_e var version: String @@ -269,6 +275,21 @@ extension Ghostty { } } + func changeFontSize(surface: ghostty_surface_t, _ change: FontSizeModification) { + let action: String + switch change { + case .increase(let amount): + action = "increase_font_size:\(amount)" + case .decrease(let amount): + action = "decrease_font_size:\(amount)" + case .reset: + action = "reset_font_size" + } + if (!ghostty_surface_binding_action(surface, action, UInt(action.count))) { + AppDelegate.logger.warning("action failed action=\(action)") + } + } + // Called when the selected keyboard changes. We have to notify Ghostty so that // it can reload the keyboard mapping for input. @objc private func keyboardSelectionDidChange(notification: NSNotification) { diff --git a/macos/Sources/MainMenu.xib b/macos/Sources/MainMenu.xib index 3e20e8476..fa8beb2f0 100644 --- a/macos/Sources/MainMenu.xib +++ b/macos/Sources/MainMenu.xib @@ -17,6 +17,8 @@ + + @@ -24,6 +26,7 @@ + @@ -128,6 +131,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + +