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:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user