macos: add support for middle-click tab close

This commit is contained in:
Nicholas Ochoa
2026-03-29 14:22:49 -05:00
committed by Mitchell Hashimoto
parent 1c14b9615b
commit 3f6683df02
3 changed files with 34 additions and 0 deletions

View File

@@ -840,3 +840,29 @@ extension TerminalWindow: TabTitleEditorDelegate {
makeFirstResponder(focusedSurface)
}
}
// MARK: - Tab Clicks
extension TerminalWindow {
/// Handles a middle-click event to close the tab under the cursor
///
/// Returns true if the event was handled and should be consumed
func handleTabBarMiddleClick(_ event: NSEvent) -> Bool {
// Require middle click
guard event.type == .otherMouseDown && event.buttonNumber == 2 else { return false }
// Require tab hit
let screenPoint = convertPoint(toScreen: event.locationInWindow)
guard let hit = tabButtonHit(atScreenPoint: screenPoint) else { return false }
// Require we have tabs and the index is valid
guard let tabbedWindows = tabbedWindows,
hit.index < tabbedWindows.count else { return false }
// Find the controller and close it
let targetWindow = tabbedWindows[hit.index]
guard let controller = targetWindow.windowController as? TerminalController else { return false }
controller.closeTab(nil)
return true
}
}

View File

@@ -76,6 +76,9 @@ class TitlebarTabsTahoeTerminalWindow: TransparentTitlebarTerminalWindow, NSTool
return
}
// Handle middle-click to close tabs if configured
if handleTabBarMiddleClick(event) { return }
let isRightClick =
event.type == .rightMouseDown ||
(event.type == .otherMouseDown && event.buttonNumber == 2) ||

View File

@@ -69,6 +69,11 @@ class TitlebarTabsVenturaTerminalWindow: TerminalWindow {
tab.attributedTitle = attributedTitle
}
override func sendEvent(_ event: NSEvent) {
if tabBarView != nil && handleTabBarMiddleClick(event) { return }
super.sendEvent(event)
}
override func layoutIfNeeded() {
super.layoutIfNeeded()