diff --git a/.DS_Store b/.DS_Store index 002634a..caca749 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/EnhancedTerminal.app/Contents/MacOS/EnhancedTerminal b/EnhancedTerminal.app/Contents/MacOS/EnhancedTerminal index 95de1f9..5c254bf 100755 Binary files a/EnhancedTerminal.app/Contents/MacOS/EnhancedTerminal and b/EnhancedTerminal.app/Contents/MacOS/EnhancedTerminal differ diff --git a/MainWindowController.swift b/MainWindowController.swift index 0e97976..e9c4b84 100644 --- a/MainWindowController.swift +++ b/MainWindowController.swift @@ -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() {