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 @@
+