diff --git a/macos/Sources/App/macOS/AppDelegate.swift b/macos/Sources/App/macOS/AppDelegate.swift index 12f8f8c31..7caa04659 100644 --- a/macos/Sources/App/macOS/AppDelegate.swift +++ b/macos/Sources/App/macOS/AppDelegate.swift @@ -28,7 +28,9 @@ class AppDelegate: NSObject, @IBOutlet private var menuNewWindow: NSMenuItem? @IBOutlet private var menuNewTab: NSMenuItem? @IBOutlet private var menuSplitRight: NSMenuItem? + @IBOutlet private var menuSplitLeft: NSMenuItem? @IBOutlet private var menuSplitDown: NSMenuItem? + @IBOutlet private var menuSplitUp: NSMenuItem? @IBOutlet private var menuClose: NSMenuItem? @IBOutlet private var menuCloseTab: NSMenuItem? @IBOutlet private var menuCloseWindow: NSMenuItem? @@ -363,7 +365,9 @@ class AppDelegate: NSObject, syncMenuShortcut(config, action: "close_window", menuItem: self.menuCloseWindow) syncMenuShortcut(config, action: "close_all_windows", menuItem: self.menuCloseAllWindows) syncMenuShortcut(config, action: "new_split:right", menuItem: self.menuSplitRight) + syncMenuShortcut(config, action: "new_split:left", menuItem: self.menuSplitLeft) syncMenuShortcut(config, action: "new_split:down", menuItem: self.menuSplitDown) + syncMenuShortcut(config, action: "new_split:up", menuItem: self.menuSplitUp) syncMenuShortcut(config, action: "copy_to_clipboard", menuItem: self.menuCopy) syncMenuShortcut(config, action: "paste_from_clipboard", menuItem: self.menuPaste) diff --git a/macos/Sources/App/macOS/MainMenu.xib b/macos/Sources/App/macOS/MainMenu.xib index 05364212f..8ad57c4a5 100644 --- a/macos/Sources/App/macOS/MainMenu.xib +++ b/macos/Sources/App/macOS/MainMenu.xib @@ -47,8 +47,10 @@ - + + + @@ -145,10 +147,22 @@ + + + + + + - + + + + + + + diff --git a/macos/Sources/Features/Terminal/BaseTerminalController.swift b/macos/Sources/Features/Terminal/BaseTerminalController.swift index bace20f05..edf3662b9 100644 --- a/macos/Sources/Features/Terminal/BaseTerminalController.swift +++ b/macos/Sources/Features/Terminal/BaseTerminalController.swift @@ -521,11 +521,21 @@ class BaseTerminalController: NSWindowController, ghostty.split(surface: surface, direction: GHOSTTY_SPLIT_DIRECTION_RIGHT) } + @IBAction func splitLeft(_ sender: Any) { + guard let surface = focusedSurface?.surface else { return } + ghostty.split(surface: surface, direction: GHOSTTY_SPLIT_DIRECTION_LEFT) + } + @IBAction func splitDown(_ sender: Any) { guard let surface = focusedSurface?.surface else { return } ghostty.split(surface: surface, direction: GHOSTTY_SPLIT_DIRECTION_DOWN) } + @IBAction func splitUp(_ sender: Any) { + guard let surface = focusedSurface?.surface else { return } + ghostty.split(surface: surface, direction: GHOSTTY_SPLIT_DIRECTION_UP) + } + @IBAction func splitZoom(_ sender: Any) { guard let surface = focusedSurface?.surface else { return } ghostty.splitToggleZoom(surface: surface) diff --git a/macos/Sources/Ghostty/SurfaceView_AppKit.swift b/macos/Sources/Ghostty/SurfaceView_AppKit.swift index daa2ccfde..e4c9072f3 100644 --- a/macos/Sources/Ghostty/SurfaceView_AppKit.swift +++ b/macos/Sources/Ghostty/SurfaceView_AppKit.swift @@ -1161,7 +1161,9 @@ extension Ghostty { menu.addItem(.separator()) menu.addItem(withTitle: "Split Right", action: #selector(splitRight(_:)), keyEquivalent: "") + menu.addItem(withTitle: "Split Left", action: #selector(splitLeft(_:)), keyEquivalent: "") menu.addItem(withTitle: "Split Down", action: #selector(splitDown(_:)), keyEquivalent: "") + menu.addItem(withTitle: "Split Up", action: #selector(splitUp(_:)), keyEquivalent: "") menu.addItem(.separator()) menu.addItem(withTitle: "Reset Terminal", action: #selector(resetTerminal(_:)), keyEquivalent: "") @@ -1220,11 +1222,21 @@ extension Ghostty { ghostty_surface_split(surface, GHOSTTY_SPLIT_DIRECTION_RIGHT) } + @IBAction func splitLeft(_ sender: Any) { + guard let surface = self.surface else { return } + ghostty_surface_split(surface, GHOSTTY_SPLIT_DIRECTION_LEFT) + } + @IBAction func splitDown(_ sender: Any) { guard let surface = self.surface else { return } ghostty_surface_split(surface, GHOSTTY_SPLIT_DIRECTION_DOWN) } + @IBAction func splitUp(_ sender: Any) { + guard let surface = self.surface else { return } + ghostty_surface_split(surface, GHOSTTY_SPLIT_DIRECTION_UP) + } + @objc func resetTerminal(_ sender: Any) { guard let surface = self.surface else { return } let action = "reset"