Add keyboard shortcut to close split panes

- Cmd+Shift+W closes the active pane
- Automatically removes split view when only one pane remains
- Falls back to closing tab if no splits exist
- Updated keyboard shortcuts reference
This commit is contained in:
2026-01-31 23:36:49 +00:00
parent 69fc74ef07
commit c42c1c7a2d
3 changed files with 29 additions and 6 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@@ -158,7 +158,11 @@ class MainWindowController: NSWindowController {
fileMenu.addItem(NSMenuItem.separator())
fileMenu.addItem(NSMenuItem(title: "Split Pane Vertically", action: #selector(splitPaneVertically), keyEquivalent: "d"))
fileMenu.addItem(NSMenuItem(title: "Split Pane Horizontally", action: #selector(splitPaneHorizontally), keyEquivalent: "D"))
fileMenu.addItem(NSMenuItem(title: "Close Pane", action: #selector(closePane), keyEquivalent: "w"))
let closePaneItem = NSMenuItem(title: "Close Pane", action: #selector(closePane), keyEquivalent: "w")
closePaneItem.keyEquivalentModifierMask = [.command, .shift]
fileMenu.addItem(closePaneItem)
fileMenu.addItem(NSMenuItem.separator())
fileMenu.addItem(NSMenuItem(title: "Clear Screen", action: #selector(clearScreen), keyEquivalent: "k"))
fileMenu.addItem(NSMenuItem(title: "Clear Scrollback", action: #selector(clearScrollback), keyEquivalent: "K"))
@@ -509,6 +513,7 @@ class MainWindowController: NSWindowController {
Cmd+W - Close Tab
Cmd+D - Split Pane Vertically
Cmd+Shift+D - Split Pane Horizontally
Cmd+Shift+W - Close Pane
Cmd+K - Clear Screen
Cmd+Shift+K - Clear Scrollback
@@ -625,12 +630,25 @@ class MainWindowController: NSWindowController {
}
@objc func closePane() {
guard panes.count > 1, activePaneIndex < panes.count else { return }
// Only close panes if we have splits
guard panes.count > 1 else {
// No splits, just close the tab normally
closeCurrentTab()
return
}
let pane = panes[activePaneIndex]
// Find which pane has focus
var paneToClose = activePaneIndex
// If we can't determine active pane, close the last one
if paneToClose >= panes.count {
paneToClose = panes.count - 1
}
let pane = panes[paneToClose]
pane.cleanup()
pane.scrollView.removeFromSuperview()
panes.remove(at: activePaneIndex)
panes.remove(at: paneToClose)
if panes.count == 1 {
// Only one pane left, remove split view
@@ -641,10 +659,15 @@ class MainWindowController: NSWindowController {
remainingSession.scrollView.removeFromSuperview()
remainingSession.scrollView.frame = contentView.bounds
contentView.addSubview(remainingSession.scrollView)
remainingSession.textView.window?.makeFirstResponder(remainingSession.textView)
panes = []
} else {
// Still have multiple panes
activePaneIndex = min(paneToClose, panes.count - 1)
if activePaneIndex < panes.count {
panes[activePaneIndex].textView.window?.makeFirstResponder(panes[activePaneIndex].textView)
}
}
activePaneIndex = min(activePaneIndex, panes.count - 1)
}
@objc func clearHistory() {