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:
Binary file not shown.
@@ -158,7 +158,11 @@ class MainWindowController: NSWindowController {
|
|||||||
fileMenu.addItem(NSMenuItem.separator())
|
fileMenu.addItem(NSMenuItem.separator())
|
||||||
fileMenu.addItem(NSMenuItem(title: "Split Pane Vertically", action: #selector(splitPaneVertically), keyEquivalent: "d"))
|
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: "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.separator())
|
||||||
fileMenu.addItem(NSMenuItem(title: "Clear Screen", action: #selector(clearScreen), keyEquivalent: "k"))
|
fileMenu.addItem(NSMenuItem(title: "Clear Screen", action: #selector(clearScreen), keyEquivalent: "k"))
|
||||||
fileMenu.addItem(NSMenuItem(title: "Clear Scrollback", action: #selector(clearScrollback), 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+W - Close Tab
|
||||||
Cmd+D - Split Pane Vertically
|
Cmd+D - Split Pane Vertically
|
||||||
Cmd+Shift+D - Split Pane Horizontally
|
Cmd+Shift+D - Split Pane Horizontally
|
||||||
|
Cmd+Shift+W - Close Pane
|
||||||
Cmd+K - Clear Screen
|
Cmd+K - Clear Screen
|
||||||
Cmd+Shift+K - Clear Scrollback
|
Cmd+Shift+K - Clear Scrollback
|
||||||
|
|
||||||
@@ -625,12 +630,25 @@ class MainWindowController: NSWindowController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objc func closePane() {
|
@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.cleanup()
|
||||||
pane.scrollView.removeFromSuperview()
|
pane.scrollView.removeFromSuperview()
|
||||||
panes.remove(at: activePaneIndex)
|
panes.remove(at: paneToClose)
|
||||||
|
|
||||||
if panes.count == 1 {
|
if panes.count == 1 {
|
||||||
// Only one pane left, remove split view
|
// Only one pane left, remove split view
|
||||||
@@ -641,10 +659,15 @@ class MainWindowController: NSWindowController {
|
|||||||
remainingSession.scrollView.removeFromSuperview()
|
remainingSession.scrollView.removeFromSuperview()
|
||||||
remainingSession.scrollView.frame = contentView.bounds
|
remainingSession.scrollView.frame = contentView.bounds
|
||||||
contentView.addSubview(remainingSession.scrollView)
|
contentView.addSubview(remainingSession.scrollView)
|
||||||
|
remainingSession.textView.window?.makeFirstResponder(remainingSession.textView)
|
||||||
panes = []
|
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() {
|
@objc func clearHistory() {
|
||||||
|
|||||||
Reference in New Issue
Block a user