From 9111b9955bfcc5fb0c856fa53ab02a9ae268283b Mon Sep 17 00:00:00 2001 From: Samuel Monroe Date: Thu, 12 Nov 2026 07:59:45 +0100 Subject: [PATCH] Show the ports a pane's programs listen on, and go to them MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every dev server prints its address differently, and you scroll back to find it. Codec knows the processes under each pane's shell, and the kernel says which TCP sockets they listen on, so the terminal can tell. - The status bar shows a chip for the focused pane's ports. A click opens the port in the browser, at the address the program printed for it when it printed one; several ports make a menu. - The right sidebar gets a Ports tab beside Commands (⇧⌘O), listing what listens in every pane of every window, with the way to each pane. A process can be given a name there ("Storefront"), which stands in for its program wherever the port shows, for as long as it runs. - Window › Listening Ports and the command palette list the same ports. - A running command's row in the Commands sidebar says what it's listening on, the tab's tooltip lists the ports, and the question asked before closing names the listener. - A command that fails because its port is taken says which pane's program has it, with Go to Pane, in its row and its output viewer; and Explain is told. Ports are found by walking the shell's descendants, not only its children, since `npm run dev` puts Node two levels down, and reading their sockets with proc_pidinfo: nothing is run. Panes look a couple of seconds after a command starts, within a second of anything printed, and every few seconds otherwise. The Commands header drops its title, which the tab above it now says, and the tab bar's sidebar button reopens the right sidebar on the tab it was last on. The screenshot tour can retake chosen shots alone (CODEC_SHOT=hero,ports), and names its clone's branch main so a feature branch doesn't show in the hero shot. Closes #19. Co-Authored-By: Claude Fable 5.2 --- README.md | 2 +- Sources/CodecCore/CommandTimeline.swift | 8 + Sources/CodecCore/FailureExplanation.swift | 12 +- Sources/CodecCore/ListeningPorts.swift | 196 +++++++++ Sources/CodecCore/ProcessInspector.swift | 69 ++- Sources/CodecCore/SplitLayout.swift | 19 + Sources/CodecUI/AppDelegate.swift | 13 +- Sources/CodecUI/AppEnvironment.swift | 51 +++ Sources/CodecUI/CommandOutputViewer.swift | 24 +- Sources/CodecUI/CommandTimelineSidebar.swift | 129 +++++- Sources/CodecUI/ListeningPortsMenu.swift | 101 +++++ Sources/CodecUI/MainMenu.swift | 13 +- Sources/CodecUI/Pane.swift | 159 ++++++- Sources/CodecUI/PortsSidebar.swift | 320 ++++++++++++++ Sources/CodecUI/Session.swift | 2 + Sources/CodecUI/StatusBar.swift | 49 +++ Sources/CodecUI/TerminalTab.swift | 10 + .../CodecUI/TerminalWindowController.swift | 179 ++++++-- Sources/CodecUI/WindowChrome.swift | 24 +- .../CodecCoreTests/ListeningPortsTests.swift | 229 ++++++++++ Tests/CodecCoreTests/SplitLayoutTests.swift | 18 + Tests/CodecCoreTests/SystemTests.swift | 10 + .../CodecUITests/ListeningPortsUITests.swift | 401 ++++++++++++++++++ Tests/CodecUITests/ModelTests.swift | 21 + Tests/CodecUITests/ScreenshotTour.swift | 131 +++++- Tests/CodecUITests/TestSupport.swift | 25 ++ docs/commands-sidebar.md | 18 +- docs/development.md | 4 +- docs/images/commands.png | Bin 933391 -> 916096 bytes docs/images/hero.png | Bin 1033571 -> 1024664 bytes docs/images/port-in-use.png | Bin 0 -> 526455 bytes docs/images/ports-list.png | Bin 0 -> 550235 bytes docs/images/ports.png | Bin 0 -> 363615 bytes docs/images/usual-duration.png | Bin 782246 -> 785244 bytes docs/prompt-and-status-bar.md | 30 ++ docs/shortcuts.md | 1 + docs/tabs-and-panes.md | 6 +- 37 files changed, 2159 insertions(+), 115 deletions(-) create mode 100644 Sources/CodecCore/ListeningPorts.swift create mode 100644 Sources/CodecUI/ListeningPortsMenu.swift create mode 100644 Sources/CodecUI/PortsSidebar.swift create mode 100644 Tests/CodecCoreTests/ListeningPortsTests.swift create mode 100644 Tests/CodecUITests/ListeningPortsUITests.swift create mode 100644 docs/images/port-in-use.png create mode 100644 docs/images/ports-list.png create mode 100644 docs/images/ports.png diff --git a/README.md b/README.md index 3fbac06..fdf1808 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ Click anywhere in the command you're typing to put the cursor there, drag to sel Two panes side by side, and the branch switcher open -Tabs and nested splits in one window. Click the branch in the status bar or in the prompt itself to switch or create branches with a fuzzy search. Build your prompt from chips (directory, branch, changes, duration, exit status, Python environment, Kubernetes context) in a visual editor, or keep your own PS1. Quit and reopen, and your windows, tabs and splits come back, each pane in its folder, showing what it showed, with its commands. Closed a tab by mistake? ⇧⌘T. Before anything closes, Codec tells you exactly what's still running in it. +Tabs and nested splits in one window. Click the branch in the status bar or in the prompt itself to switch or create branches with a fuzzy search. Build your prompt from chips (directory, branch, changes, duration, exit status, Python environment, Kubernetes context) in a visual editor, or keep your own PS1. Quit and reopen, and your windows, tabs and splits come back, each pane in its folder, showing what it showed, with its commands. Closed a tab by mistake? ⇧⌘T. Before anything closes, Codec tells you exactly what's still running in it. The status bar shows the ports a pane's programs listen on, a click from the browser, and the Ports tab (⇧⌘O) lists them all, with names you give them and the way to each one's pane; when `npm run dev` dies because the port is taken, Codec tells you which pane has it. → [Tabs and panes](docs/tabs-and-panes.md) · [Prompt and status bar](docs/prompt-and-status-bar.md) diff --git a/Sources/CodecCore/CommandTimeline.swift b/Sources/CodecCore/CommandTimeline.swift index 72bae46..124d115 100644 --- a/Sources/CodecCore/CommandTimeline.swift +++ b/Sources/CodecCore/CommandTimeline.swift @@ -84,6 +84,8 @@ public struct TimelineEntry: Identifiable, Codable, Equatable, Sendable { public var usualDuration: TimeInterval? /// The Python environment and tool versions it ran with, when there were any. public var toolchain: Toolchain? + /// It failed because a port was taken by a program in one of Codec's panes: which, and whose. + public var portConflict: PortConflict? public init(id: Int, command: String, screenCommand: String? = nil, directory: String, started: Date, block: CommandBlocks.Block?) { @@ -180,6 +182,12 @@ public struct CommandTimeline: Codable, Equatable, Sendable { trimOutput() } + /// A failed command found a port taken, and it's known by whom. + public mutating func setPortConflict(_ conflict: PortConflict, of id: Int) { + guard let index = entries.lastIndex(where: { $0.id == id }) else { return } + entries[index].portConflict = conflict + } + /// The shell went away mid-command: whatever was running won't report back. public mutating func abandonRunning() { guard let index = entries.indices.last, entries[index].isRunning else { return } diff --git a/Sources/CodecCore/FailureExplanation.swift b/Sources/CodecCore/FailureExplanation.swift index 2ad59f8..540e8c0 100644 --- a/Sources/CodecCore/FailureExplanation.swift +++ b/Sources/CodecCore/FailureExplanation.swift @@ -10,16 +10,20 @@ public struct FailureReport: Equatable, Sendable { public var output: String /// The Python environment and tool versions it ran with (`Toolchain.summary`), empty when unknown. public var tools: String + /// What Codec found out for itself about the failure (a port taken by a program in another + /// pane), empty when there's nothing. + public var known: String /// Characters of output to send: about half the model's context, leaving room for its answer. public static let outputBudget = 6_000 - public init(command: String, directory: String, exitCode: Int32, output: String, tools: String = "") { + public init(command: String, directory: String, exitCode: Int32, output: String, tools: String = "", known: String = "") { self.command = command self.directory = directory self.exitCode = exitCode self.output = output self.tools = tools + self.known = known } /// The report on a command that failed with an exit status; nil for one that worked, is still @@ -27,7 +31,8 @@ public struct FailureReport: Equatable, Sendable { public init?(entry: TimelineEntry, output: String?, budget: Int = outputBudget) { guard case .failed(let code) = entry.status, code >= 0 else { return nil } self.init(command: entry.command, directory: (entry.directory as NSString).abbreviatingWithTildeInPath, - exitCode: code, output: Self.excerpt(output ?? "", budget: budget), tools: entry.toolchain?.summary ?? "") + exitCode: code, output: Self.excerpt(output ?? "", budget: budget), tools: entry.toolchain?.summary ?? "", + known: entry.portConflict.map { "\($0.sentence()), a program running in one of this terminal’s panes." } ?? "") } public var prompt: String { @@ -35,7 +40,7 @@ public struct FailureReport: Equatable, Sendable { Command: \(command) Folder: \(directory) \(tools.isEmpty ? "" : "Tools: \(tools)\n")Exit status: \(exitCode) - Output: + \(known.isEmpty ? "" : "Known: \(known)\n")Output: \(output.isEmpty ? "(nothing)" : output) """ } @@ -166,6 +171,7 @@ public struct OnDeviceExplainer: FailureExplaining { the folder it ran in, sometimes the Python environment and tool versions it ran with, its exit \ status and the end of what it printed; lines before "…" are earlier errors. A tool marked "not \ installed" was asked for by the project but isn't there, so another version or none ran instead. \ + A line starting "Known:" is a fact the terminal checked for itself: rely on it, and say it. \ Be brief and concrete. Quote the error message if there is one. Don't invent file names, options, \ flags or packages that aren't in the command or output; in particular, don't suggest running the \ same command again with new options. If the output doesn't say why, say so. \ diff --git a/Sources/CodecCore/ListeningPorts.swift b/Sources/CodecCore/ListeningPorts.swift new file mode 100644 index 0000000..280f95b --- /dev/null +++ b/Sources/CodecCore/ListeningPorts.swift @@ -0,0 +1,196 @@ +import Foundation + +/// A TCP port a program started from a pane is listening on: a dev server, a debugger, a database. +public struct ListeningPort: Equatable, Sendable, Identifiable { + public var port: Int + /// The program holding it, as `ProcessInspector.name` has it. + public var program: String + public var pid: pid_t + /// It belongs to the command in the foreground, not to a job left in the background. + public var foreground: Bool + /// The address the program printed for it (`http://localhost:3000/app`), when it printed one. + public var address: String? + /// What the user called the process ("Storefront"), for as long as it runs. + public var name: String? + + public init(port: Int, program: String, pid: pid_t = 0, foreground: Bool = false, address: String? = nil, + name: String? = nil) { + self.port = port + self.program = program + self.pid = pid + self.foreground = foreground + self.address = address + self.name = name + } + + public var id: Int { port } + + /// What to call it: the name it was given, or else its program's. + public var displayName: String { name ?? program } + + /// ":3000". + public var label: String { ":\(port)" } + + /// What to open in the browser: the address the program printed, or else plain HTTP on this Mac. + public var url: URL { + address.flatMap(URL.init(string:)) ?? URL(string: "http://localhost:\(port)")! + } +} + +public enum ListeningPorts { + /// The ports the programs under `shell` listen on, lowest first, each once: a server that forks + /// workers shares its socket with them, and the one nearest the shell is named. + public static func scan(shell: pid_t, foregroundGroup: pid_t?, + descendants: (pid_t) -> [pid_t] = { ProcessInspector.descendants(of: $0) }, + ports: (pid_t) -> [Int] = ProcessInspector.listeningPorts(of:), + group: (pid_t) -> pid_t? = ProcessInspector.processGroup(of:), + name: (pid_t) -> String? = ProcessInspector.name(of:)) -> [ListeningPort] { + var found: [ListeningPort] = [] + for pid in descendants(shell) { + let listening = ports(pid).filter { port in !found.contains { $0.port == port } } + guard !listening.isEmpty else { continue } + let program = name(pid) ?? "pid \(pid)" + let foreground = foregroundGroup != nil && group(pid) == foregroundGroup + found += listening.map { ListeningPort(port: $0, program: program, pid: pid, foreground: foreground) } + } + return found.sorted { $0.port < $1.port } + } + + /// `scanned`, with what's already known of the processes still there: the address found for a + /// port the same process still holds, and the name its process was given, on every port it has. + public static func merging(_ scanned: [ListeningPort], keepingAddressesOf known: [ListeningPort]) -> [ListeningPort] { + scanned.map { port in + var port = port + port.address = known.first { $0.port == port.port && $0.pid == port.pid }?.address + port.name = known.first { $0.pid == port.pid && $0.name != nil }?.name + return port + } + } + + /// `ports`, with the process holding `port` called `name` on every port it has; a blank name, or + /// none, takes its name away. + public static func naming(_ port: ListeningPort, _ name: String?, in ports: [ListeningPort]) -> [ListeningPort] { + let trimmed = name?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" + return ports.map { other in + guard other.pid == port.pid else { return other } + var other = other + other.name = trimmed.isEmpty ? nil : trimmed + return other + } + } + + /// ":3000 :9229", and "+2" for those past `limit`, so many ports don't take over the status bar. + public static func label(_ ports: [ListeningPort], limit: Int = 3) -> String { + var parts = ports.prefix(limit).map(\.label) + if ports.count > limit { parts.append("+\(ports.count - limit)") } + return parts.joined(separator: " ") + } + + /// "listening on :3000", "listening on :3000 and :9229", "listening on :3000, :3001 and :9229"; + /// saying who when asked, "listening on :3000 (node)"; with a capital to stand on a line of its own. + public static func phrase(_ ports: [ListeningPort], namingPrograms: Bool = false, capitalized: Bool = false) -> String { + let labels = ports.map { namingPrograms ? "\($0.label) (\($0.displayName))" : $0.label } + let list = labels.count > 1 ? labels.dropLast().joined(separator: ", ") + " and " + labels.last! : labels.first ?? "" + return (capitalized ? "Listening on " : "listening on ") + list + } + + /// Hosts that mean this Mac. The last two are what a server bound to every address prints. + private static let localHosts = #"localhost|[a-z0-9-]+(?:\.[a-z0-9-]+)*\.localhost|127\.0\.0\.1|\[::1\]|0\.0\.0\.0|\[::\]"# + private static let addressPattern = try! NSRegularExpression( + pattern: #"\bhttps?://(?:"# + localHosts + #"):([0-9]{1,5})(?![0-9])[^\s"'<>`\\]*"#, options: [.caseInsensitive]) + + /// The first address in `text` for `port` on this Mac, as a program announces where it's serving + /// (`Local: http://localhost:3000/app`), scheme and path included. An address every interface + /// answers on (`0.0.0.0`) is given as `localhost`, which a browser can open. + public static func address(for port: Int, in text: String) -> String? { + let string = text as NSString + for match in addressPattern.matches(in: text, range: NSRange(location: 0, length: string.length)) + where Int(string.substring(with: match.range(at: 1))) == port { + var address = string.substring(with: match.range) + // Punctuation of the sentence it's in, not of the address. + while let last = address.last, ".,;:!?)]}".contains(last) { address.removeLast() } + for any in ["0.0.0.0", "[::]"] { + if let host = address.range(of: "://\(any):") { + address.replaceSubrange(host, with: "://localhost:") + } + } + if URL(string: address) != nil { return address } + } + return nil + } +} + +/// A command failed because a port it wanted was taken, and Codec knows by whom: a program running +/// in one of its panes. +public struct PortConflict: Codable, Equatable, Sendable { + public var port: Int + /// The program that held it. + public var program: String + /// The pane it ran in, by its session's id. Means nothing once Codec has quit. + public var pane: String + + public init(port: Int, program: String, pane: String) { + self.port = port + self.program = program + self.pane = pane + } + + /// "Port 3000 is in use by “node”", and where when that's known; "was", once it has let go of it. + public func sentence(stillHeld: Bool = true, place: String? = nil) -> String { + let subject = "Port \(port) \(stillHeld ? "is" : "was") in use by “\(program)”" + guard stillHeld, let place, !place.isEmpty else { return subject } + return "\(subject) in \(place)" + } + + /// What failing to bind looks like, whatever printed it: `EADDRINUSE` (Node), "Address already in + /// use" (C, Python, Go, Ruby, Java), `AddrInUse` (Rust), "Port 5000 is in use" (Flask), "That + /// port is already in use" (Django). + private static let marker = try! NSRegularExpression( + pattern: #"EADDRINUSE|ADDRINUSE|address (?:is )?(?:already )?in use|\bport\b.*\bin use\b"#, options: [.caseInsensitive]) + + /// How a port is written on such a line, most telling first: "port 3000"; after an address + /// (`127.0.0.1:3000`, `:::3000`, ` :8080`), which a time of day (`12:30:45`) isn't; Python's + /// `('127.0.0.1', 8000)`. + private static let portsInOutput = [ + #"\bport[ =:#]*([0-9]{1,5})(?![0-9])"#, + #"(?:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|localhost|\]|::|\*|[\s("'=]|^):([0-9]{1,5})(?![0-9.])"#, + #"['"], ?([0-9]{1,5})\)"#, + ].map { try! NSRegularExpression(pattern: $0, options: [.caseInsensitive]) } + + /// The same in a command: `--port 3000`, `-p 3000`, `PORT=3000`, `localhost:3000`. + private static let portsInCommand = [ + #"(?:^|\s)(?:--?[a-z-]*port|-p)[ =]([0-9]{1,5})(?![0-9])"#, + #"\b[A-Z_]*PORT=([0-9]{1,5})(?![0-9])"#, + #"(?:(?:[0-9]{1,3}\.){3}[0-9]{1,3}|localhost|\]|::|\*|[\s("'=]|^):([0-9]{1,5})(?![0-9.])"#, + ].map { try! NSRegularExpression(pattern: $0, options: [.caseInsensitive]) } + + /// The port a failed command found taken, from what it printed, or from the command itself when + /// the error names none (`python -m http.server 8000`). Nil when the output doesn't say a port + /// was taken, or which one can't be told. + public static func port(inOutput output: String, command: String) -> Int? { + var refused = false + for line in output.split(separator: "\n") { + let line = String(line) + guard marker.firstMatch(in: line, range: NSRange(location: 0, length: (line as NSString).length)) != nil else { continue } + refused = true + if let port = firstPort(in: line, among: portsInOutput) { return port } + } + guard refused else { return nil } + if let port = firstPort(in: command, among: portsInCommand) { return port } + // A number on its own, when there's only one it could be: `nc -l 8080`, `http.server 8000`. + let numbers = command.split(whereSeparator: \.isWhitespace).compactMap { Int($0) }.filter(isPort) + return numbers.count == 1 ? numbers[0] : nil + } + + private static func isPort(_ number: Int) -> Bool { (1...65_535).contains(number) } + + private static func firstPort(in text: String, among patterns: [NSRegularExpression]) -> Int? { + let string = text as NSString + for pattern in patterns { + for match in pattern.matches(in: text, range: NSRange(location: 0, length: string.length)) { + if let port = Int(string.substring(with: match.range(at: 1))), isPort(port) { return port } + } + } + return nil + } +} diff --git a/Sources/CodecCore/ProcessInspector.swift b/Sources/CodecCore/ProcessInspector.swift index 5cf09e4..b9aec47 100644 --- a/Sources/CodecCore/ProcessInspector.swift +++ b/Sources/CodecCore/ProcessInspector.swift @@ -20,9 +20,21 @@ public enum RunningPrograms { return names } - /// "“make”", "“make” and “npm”", "“make”, “npm” and “ssh”". - public static func list(_ names: [String]) -> String { - let quoted = names.map { "“\($0)”" } + /// `names`, then the programs holding `ports` that aren't among them: a server is often started + /// by something else (`npm` runs `node`), and it's the one worth naming. + public static func programs(_ names: [String], listening ports: [ListeningPort]) -> [String] { + ports.reduce(into: names) { names, port in + if !names.contains(port.program) { names.append(port.program) } + } + } + + /// "“make”", "“make” and “npm”", "“make”, “npm” and “ssh”". A program that's listening says on + /// what: "“npm” and “node” (listening on :3000)". + public static func list(_ names: [String], listening ports: [ListeningPort] = []) -> String { + let quoted = programs(names, listening: ports).map { name in + let held = ports.filter { $0.program == name } + return held.isEmpty ? "“\(name)”" : "“\(name)” (\(ListeningPorts.phrase(held)))" + } guard quoted.count > 1 else { return quoted.first ?? "" } return quoted.dropLast().joined(separator: ", ") + " and " + quoted.last! } @@ -52,6 +64,57 @@ public enum ProcessInspector { return buffer.prefix(min(Int(count), buffer.count)).filter { $0 > 0 } } + /// Every process `pid` started that's still running, and those they started in turn, nearest + /// first: a dev server is rarely the shell's own child (`npm` runs `sh`, which runs `node`). + public static func descendants(of pid: pid_t, limit: Int = 512) -> [pid_t] { + var found: [pid_t] = [] + var seen: Set = [pid] + var parents = [pid] + while !parents.isEmpty, found.count < limit { + var next: [pid_t] = [] + for parent in parents { + for child in children(of: parent) where seen.insert(child).inserted { next.append(child) } + } + found += next + parents = next + } + return Array(found.prefix(limit)) + } + + /// The process group `pid` is in: the shell puts each command, with what it starts, in its own. + public static func processGroup(of pid: pid_t) -> pid_t? { + var info = proc_bsdinfo() + let size = Int32(MemoryLayout.size) + guard pid > 0, proc_pidinfo(pid, PROC_PIDTBSDINFO, 0, &info, size) == size else { return nil } + return pid_t(info.pbi_pgid) + } + + /// The TCP ports `pid` is listening on, each once, as the kernel reports its sockets. Works for + /// the user's own processes; empty for anyone else's. + public static func listeningPorts(of pid: pid_t) -> [Int] { + guard pid > 0 else { return [] } + let stride = MemoryLayout.stride + let needed = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, nil, 0) + guard needed > 0 else { return [] } + // Room for a few more, opened between the two calls. + var descriptors = [proc_fdinfo](repeating: proc_fdinfo(), count: Int(needed) / stride + 16) + let used = proc_pidinfo(pid, PROC_PIDLISTFDS, 0, &descriptors, Int32(descriptors.count * stride)) + guard used > 0 else { return [] } + var ports: [Int] = [] + let size = Int32(MemoryLayout.size) + for descriptor in descriptors.prefix(Int(used) / stride) where descriptor.proc_fdtype == UInt32(PROX_FDTYPE_SOCKET) { + var info = socket_fdinfo() + guard proc_pidfdinfo(pid, descriptor.proc_fd, PROC_PIDFDSOCKETINFO, &info, size) == size, + info.psi.soi_kind == Int32(SOCKINFO_TCP) else { continue } + let tcp = info.psi.soi_proto.pri_tcp + guard tcp.tcpsi_state == TSI_S_LISTEN else { continue } + // In network byte order, in the low 16 bits. + let port = Int(UInt16(bigEndian: UInt16(truncatingIfNeeded: tcp.tcpsi_ini.insi_lport))) + if port > 0, !ports.contains(port) { ports.append(port) } + } + return ports + } + public static func workingDirectory(of pid: pid_t) -> String? { var info = proc_vnodepathinfo() let size = Int32(MemoryLayout.size) diff --git a/Sources/CodecCore/SplitLayout.swift b/Sources/CodecCore/SplitLayout.swift index 99985b2..a44b3ce 100644 --- a/Sources/CodecCore/SplitLayout.swift +++ b/Sources/CodecCore/SplitLayout.swift @@ -68,6 +68,25 @@ public indirect enum SplitLayout { return all[(index + (forward ? 1 : all.count - 1)) % all.count] } + /// Where `target` is in the layout, in words, for telling someone which pane is meant: "left", + /// "bottom right", "middle". From the outermost split along each axis, so panes nested deeper on + /// the same side share a name. Nil for a layout of one pane, or one without `target`. + public func position(of target: Leaf) -> String? { + var words: [SplitAxis: String] = [:] + var node = self + while case .split(let axis, let children) = node { + guard let index = children.firstIndex(where: { $0.contains(target) }) else { return nil } + if words[axis] == nil { + let ends = axis == .horizontal ? ("left", "right") : ("top", "bottom") + words[axis] = index == 0 ? ends.0 : index == children.count - 1 ? ends.1 : "middle" + } + node = children[index] + } + guard node.isLeaf(target), !words.isEmpty else { return nil } + let both = [words[.vertical], words[.horizontal]].compactMap { $0 } + return both == ["middle", "middle"] ? "middle" : both.joined(separator: " ") + } + /// Whether both layouts hold the same leaves in the same arrangement. public func isSameShape(as other: SplitLayout) -> Bool { switch (self, other) { diff --git a/Sources/CodecUI/AppDelegate.swift b/Sources/CodecUI/AppDelegate.swift index 88b8293..2fd100e 100644 --- a/Sources/CodecUI/AppDelegate.swift +++ b/Sources/CodecUI/AppDelegate.swift @@ -18,6 +18,8 @@ public enum CodecApp { final class AppDelegate: NSObject, NSApplicationDelegate, NSMenuItemValidation, AppCoordinating { private let environment: AppEnvironment private(set) var windows: [TerminalWindowController] = [] + /// Fills in Window › Listening Ports; menus don't keep their delegates. + private lazy var listeningPortsMenu = ListeningPortsMenu(directory: environment.panes) private var settingsWindow: NSWindow? /// Nil outside a bundled app with a version (tests, `swift run`). private(set) var updater: Updater? @@ -34,7 +36,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSMenuItemValidation, func applicationDidFinishLaunching(_ notification: Notification) { NSWindow.allowsAutomaticWindowTabbing = false - NSApp.mainMenu = MainMenu.build() + NSApp.mainMenu = MainMenu.build(listeningPorts: listeningPortsMenu) if let notifier = environment.notifier as? Notifier { notifier.activate() notifier.onOpen = { [weak self] id in @@ -82,14 +84,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSMenuItemValidation, } return .terminateCancel } - var programs: [String] = [] - for window in windows { - for program in window.runningPrograms where !programs.contains(program) { programs.append(program) } - } - guard !programs.isEmpty else { return .terminateNow } + let running = windows.flatMap(\.allPanes).running + guard !running.programs.isEmpty else { return .terminateNow } let alert = NSAlert() alert.messageText = "Quit Codec?" - alert.informativeText = "\(RunningPrograms.list(programs)) \(programs.count == 1 ? "is" : "are") still running. Quitting will terminate \(programs.count == 1 ? "it" : "them")." + alert.informativeText = "\(running.list) \(running.count == 1 ? "is" : "are") still running. Quitting will terminate \(running.count == 1 ? "it" : "them")." alert.addButton(withTitle: "Quit") alert.addButton(withTitle: "Cancel") return alert.runModal() == .alertFirstButtonReturn ? .terminateNow : .terminateCancel diff --git a/Sources/CodecUI/AppEnvironment.swift b/Sources/CodecUI/AppEnvironment.swift index 8083615..ed86d28 100644 --- a/Sources/CodecUI/AppEnvironment.swift +++ b/Sources/CodecUI/AppEnvironment.swift @@ -24,6 +24,55 @@ protocol AppCoordinating: AnyObject { func attentionDidChange() } +/// The panes that are open, across every window: a command that finds a port taken can be told +/// which of them holds it. Publishes when what any of them listens on changes. +@MainActor +final class PaneDirectory: ObservableObject { + private struct Entry { + weak var pane: Pane? + } + + private var entries: [Entry] = [] + + var panes: [Pane] { entries.compactMap(\.pane) } + + func add(_ pane: Pane) { + entries.removeAll { $0.pane == nil } + entries.append(Entry(pane: pane)) + } + + func remove(_ pane: Pane) { + entries.removeAll { $0.pane == nil || $0.pane === pane } + objectWillChange.send() + } + + func pane(id: String) -> Pane? { + panes.first { $0.session.id.uuidString == id } + } + + /// The pane with a program listening on `port` right now, and that program: every pane looks + /// again first, as the one asking has just been refused the port. + func holder(of port: Int) -> (pane: Pane, port: ListeningPort)? { + for pane in panes { + pane.refreshListeningPorts() + if let held = pane.session.listeningPorts.first(where: { $0.port == port }) { return (pane, held) } + } + return nil + } + + /// A pane's ports changed. + func portsDidChange() { + objectWillChange.send() + } + + /// Tabs or panes were added, moved or closed in some window: where the listening panes are may + /// read differently now. Nothing to tell when nothing listens. + func placesDidChange() { + guard panes.contains(where: { !$0.session.listeningPorts.isEmpty }) else { return } + objectWillChange.send() + } +} + /// The services a window and its panes depend on. The app builds one with the real implementations; /// tests build one with fakes. @MainActor @@ -42,6 +91,8 @@ final class AppEnvironment { let paneArchive: PaneArchive /// Tabs closed lately, for ⇧⌘T, from any window. let closedTabs = ClosedTabs() + /// Every pane there is, in any window, for finding the one whose program holds a port. + let panes = PaneDirectory() /// Explains failed commands; nil where there's nothing to do it with. let explainer: (any FailureExplaining)? weak var coordinator: (any AppCoordinating)? diff --git a/Sources/CodecUI/CommandOutputViewer.swift b/Sources/CodecUI/CommandOutputViewer.swift index 4129869..1331c9b 100644 --- a/Sources/CodecUI/CommandOutputViewer.swift +++ b/Sources/CodecUI/CommandOutputViewer.swift @@ -13,6 +13,8 @@ final class CommandOutputViewer: NSViewController { var saveToIntel: () -> Void = {} /// Puts a command on the command line. var insertCommand: (String) -> Void = { _ in } + /// Goes to the pane whose program holds the port the command wanted. + var goToPane: () -> Void = {} } let entry: TimelineEntry @@ -21,13 +23,16 @@ final class CommandOutputViewer: NSViewController { private let query: String private let theme: CodecTheme private let codeFont: NSFont + /// The port it found taken, and by whom, when that's why it failed. + let portConflict: Pane.PortConflictStatus? let actions: Actions private let canInsert: Bool let explanation: FailureExplanationModel let textView = OutputTextView() init(entry: TimelineEntry, output: String?, inScrollback: Bool, query: String, theme: CodecTheme, codeFont: NSFont, - actions: Actions, canInsert: Bool, explanation: FailureExplanationModel) { + portConflict: Pane.PortConflictStatus? = nil, actions: Actions, canInsert: Bool, explanation: FailureExplanationModel) { + self.portConflict = portConflict self.entry = entry self.output = output self.inScrollback = inScrollback @@ -48,7 +53,7 @@ final class CommandOutputViewer: NSViewController { override func loadView() { let header = NSHostingView(rootView: OutputHeader( entry: entry, theme: theme, codeFont: codeFont, inScrollback: inScrollback, canInsert: canInsert, - hasOutput: output != nil, note: note, actions: actions, explanation: explanation, + hasOutput: output != nil, note: note, portConflict: portConflict, actions: actions, explanation: explanation, copy: { [weak self] in guard let output = self?.output else { return } NSPasteboard.general.clearContents() @@ -185,6 +190,7 @@ private struct OutputHeader: View { let canInsert: Bool let hasOutput: Bool let note: String? + let portConflict: Pane.PortConflictStatus? let actions: CommandOutputViewer.Actions @ObservedObject var explanation: FailureExplanationModel var copy: () -> Void @@ -214,6 +220,20 @@ private struct OutputHeader: View { .truncationMode(.tail) .help("Ran with \(toolchain.summary)") } + if let portConflict { + HStack(spacing: 8) { + Label(portConflict.text, systemImage: "network") + .font(.system(size: 12, weight: .medium)) + .foregroundStyle(theme.alertColor) + .lineLimit(2) + if portConflict.holder != nil { + Button("Go to Pane", systemImage: "arrow.right.square", action: actions.goToPane) + .controlSize(.small) + .buttonStyle(.glass) + .help("Show the pane whose program has the port") + } + } + } HStack(spacing: 8) { Button("Go to Command", systemImage: "arrow.up.left.and.arrow.down.right", action: actions.goTo) .disabled(!inScrollback) diff --git a/Sources/CodecUI/CommandTimelineSidebar.swift b/Sources/CodecUI/CommandTimelineSidebar.swift index c83d0c8..d109606 100644 --- a/Sources/CodecUI/CommandTimelineSidebar.swift +++ b/Sources/CodecUI/CommandTimelineSidebar.swift @@ -44,6 +44,11 @@ final class PaneTimeline: ObservableObject { value.setOutput(output, of: id) } + func setPortConflict(_ conflict: PortConflict, of id: Int) { + guard value.entry(id: id)?.portConflict != conflict else { return } + value.setPortConflict(conflict, of: id) + } + func abandonRunning() { guard running != nil else { return } value.abandonRunning() @@ -108,6 +113,7 @@ final class CommandTimelineSidebar: NSView { private var theme: CodecTheme private var codeFont: NSFont private var subscription: AnyCancellable? + private var portsSubscription: AnyCancellable? private var clock: Timer? /// Where the scrollback starts, as of the last reload: commands above it are only in the kept output. private var scrollbackStart: Int? @@ -249,9 +255,32 @@ final class CommandTimelineSidebar: NSView { subscription = pane?.timeline.objectWillChange .receive(on: RunLoop.main) .sink { [weak self] _ in MainActor.assumeIsolated { self?.reload() } } + portsSubscription = pane?.panes.objectWillChange + .receive(on: RunLoop.main) + .sink { [weak self] _ in MainActor.assumeIsolated { self?.portsDidChange() } } reload(scrollToEnd: true) } + /// What some pane's programs listen on changed: the running command's row says what it's + /// listening on, and a row about a port that was taken offers its holder only while there's one. + private func portsDidChange() { + let conflicts = IndexSet(rows.indices.filter { rows[$0].entry?.portConflict != nil }) + if !conflicts.isEmpty { + NSAnimationContext.runAnimationGroup { context in + context.duration = 0 + table.noteHeightOfRows(withIndexesChanged: conflicts) + } + } + refreshVisibleRows() + } + + /// Goes to the pane whose program holds the port a failed command wanted. + func goToPortHolder(of entry: TimelineEntry) { + guard let holder = pane?.portConflictStatus(of: entry)?.holder else { return NSSound.beep() } + outputPopover?.close() + holder.host?.reveal(holder) + } + private var query: String { searchField.stringValue.trimmingCharacters(in: .whitespaces) } var selectedEntry: TimelineEntry? { @@ -336,8 +365,12 @@ final class CommandTimelineSidebar: NSView { theme: theme) case .entry(let entry): guard let cell = view as? TimelineCell else { return } - cell.show(entry, query: query, inScrollback: isInScrollback(entry), theme: theme, codeFont: codeFont) + // A running command is the one in the foreground: jobs left in the background listen for themselves. + cell.show(entry, query: query, inScrollback: isInScrollback(entry), theme: theme, codeFont: codeFont, + listening: entry.isRunning ? pane?.session.listeningPorts.filter(\.foreground) ?? [] : [], + conflict: pane?.portConflictStatus(of: entry)) cell.onSave = { [weak self] in self?.saveToIntel(entry) } + cell.onGoToPane = { [weak self] in self?.goToPortHolder(of: entry) } } } @@ -424,7 +457,7 @@ final class CommandTimelineSidebar: NSView { let explanation = FailureExplanationModel(entry: entry, output: output, explainer: explainer()) let viewer = CommandOutputViewer( entry: entry, output: output, inScrollback: inScrollback, query: query, - theme: theme, codeFont: codeFont, + theme: theme, codeFont: codeFont, portConflict: pane.portConflictStatus(of: entry), actions: .init( goTo: { [weak self, weak popover] in popover?.performClose(nil) @@ -443,7 +476,8 @@ final class CommandTimelineSidebar: NSView { insertCommand: { [weak self, weak popover] command in popover?.performClose(nil) self?.insert(command, run: false) - }), + }, + goToPane: { [weak self] in self?.goToPortHolder(of: entry) }), canInsert: pane.isAtCommandLine, explanation: explanation) popover.contentViewController = viewer outputPopover = popover @@ -461,6 +495,14 @@ final class CommandTimelineSidebar: NSView { }] } + /// Go to the pane holding the port a failed command wanted, while it still does. + private func portHolderItems(for entry: TimelineEntry) -> [NSMenuItem] { + guard let conflict = entry.portConflict, pane?.portConflictStatus(of: entry)?.holder != nil else { return [] } + return [ClosureMenuItem("Go to Pane Listening on :\(conflict.port)", image: "network") { [weak self] in + self?.goToPortHolder(of: entry) + }] + } + private func insert(_ command: String, run: Bool) { guard let pane else { return } if pane.replaceCommandLine(with: command, run: run) { focusTerminal() } else { NSSound.beep() } @@ -512,7 +554,10 @@ extension CommandTimelineSidebar: NSTableViewDataSource, NSTableViewDelegate { } func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat { - rows[row].entry == nil ? 22 : 40 + guard let entry = rows[row].entry else { return 22 } + // A command that found its port taken says by whom, on up to two lines, over Go to Pane. + guard let conflict = pane?.portConflictStatus(of: entry) else { return TimelineCell.height } + return conflict.holder == nil ? TimelineCell.heightSayingWhy : TimelineCell.heightSayingWhyAndWhere } func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool { @@ -574,7 +619,7 @@ extension CommandTimelineSidebar: NSMenuDelegate { ClosureMenuItem("Show Output", image: "text.alignleft", enabled: hasOutput) { [weak self] in self?.showOutput(of: entry, row: row) }, - ] + explainItems(for: entry, row: row) + [ + ] + explainItems(for: entry, row: row) + portHolderItems(for: entry) + [ .separator(), ClosureMenuItem("Save to Intel…", image: "bookmark") { [weak self] in self?.saveToIntel(entry) }, .separator(), @@ -613,25 +658,20 @@ final class TimelineHeaderModel: ObservableObject { var onClear: () -> Void = {} } -/// "Commands", the pane they're from, and the list's options. +/// The pane the commands are from, and the list's options. The tab above it says they're commands. struct TimelineHeader: View { @ObservedObject var model: TimelineHeaderModel let theme: CodecTheme var body: some View { HStack(spacing: 6) { - Image(systemName: "list.bullet.rectangle") + Image(systemName: "terminal") .font(.system(size: 11, weight: .medium)) .foregroundStyle(.secondary) - Text("Commands") + Text(model.paneTitle.isEmpty ? "Commands" : model.paneTitle) .font(.system(size: 12, weight: .semibold)) - if !model.paneTitle.isEmpty { - Text(model.paneTitle) - .font(.system(size: 11)) - .foregroundStyle(.secondary) - .lineLimit(1) - .truncationMode(.middle) - } + .lineLimit(1) + .truncationMode(.middle) Spacer(minLength: 4) TimelineHeaderButton(systemImage: model.failedOnly ? "exclamationmark.triangle.fill" : "exclamationmark.triangle", help: model.failedOnly ? "Show All Commands" : "Show Failed Commands Only", @@ -837,6 +877,14 @@ final class TimelineCell: NSTableCellView { private let saveButton = NSButton() /// How far along a running command likely is, from how long it usually takes. private let progress = ProgressLine() + /// A row's height; with a second line of detail, for why it failed; and with Go to Pane under that. + static let height: CGFloat = 40 + static let heightSayingWhy: CGFloat = 54 + static let heightSayingWhyAndWhere: CGFloat = 78 + + /// Go to Pane, under a command that found its port taken by a program in another pane. + private let goButton = NSButton(title: "Go to Pane", target: nil, action: nil) + var onGoToPane: (() -> Void)? /// Save to Intel, from the button that shows over the row while the mouse is on it. var onSave: (() -> Void)? private var hovering = false { @@ -876,7 +924,13 @@ final class TimelineCell: NSTableCellView { archived.toolTip = "No longer in the terminal’s scrollback. Codec kept its output: double-click or press Space to see it." archived.setContentCompressionResistancePriority(.required, for: .horizontal) progress.isHidden = true - for view in [dot, command, time, detail, duration, archived, saveButton, progress] { + goButton.controlSize = .small + goButton.bezelStyle = .accessoryBarAction + goButton.font = .systemFont(ofSize: 11) + goButton.target = self + goButton.action = #selector(goToPane) + goButton.isHidden = true + for view in [dot, command, time, detail, duration, archived, saveButton, progress, goButton] { view.translatesAutoresizingMaskIntoConstraints = false addSubview(view) } @@ -908,6 +962,8 @@ final class TimelineCell: NSTableCellView { saveButton.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -4), saveButton.widthAnchor.constraint(equalToConstant: 22), saveButton.heightAnchor.constraint(equalToConstant: 18), + goButton.leadingAnchor.constraint(equalTo: command.leadingAnchor), + goButton.topAnchor.constraint(equalTo: detail.bottomAnchor, constant: 4), ]) } @@ -915,6 +971,10 @@ final class TimelineCell: NSTableCellView { onSave?() } + @objc private func goToPane() { + onGoToPane?() + } + override func updateTrackingAreas() { super.updateTrackingAreas() trackingAreas.forEach(removeTrackingArea) @@ -937,7 +997,8 @@ final class TimelineCell: NSTableCellView { fatalError("init(coder:) is not supported") } - func show(_ entry: TimelineEntry, query: String, inScrollback: Bool, theme: CodecTheme, codeFont: NSFont) { + func show(_ entry: TimelineEntry, query: String, inScrollback: Bool, theme: CodecTheme, codeFont: NSFont, + listening: [ListeningPort] = [], conflict: Pane.PortConflictStatus? = nil) { command.attributedStringValue = ShellHighlighting.attributed(entry.command, theme: theme, font: codeFont, size: 12) let calendar = Calendar.current time.stringValue = calendar.isDateInToday(entry.started) @@ -983,6 +1044,8 @@ final class TimelineCell: NSTableCellView { } else if entry.isRunning, let usualText, !entry.fullScreen { detailText = usualText.text if usualText.over { detailColor = theme.warning } + } else if entry.isRunning, !listening.isEmpty, !entry.fullScreen { + detailText = ListeningPorts.phrase(listening, capitalized: true) } else if entry.isRunning { detailText = entry.fullScreen ? "Running full screen…" : "Running…" } else if entry.fullScreen { @@ -994,12 +1057,27 @@ final class TimelineCell: NSTableCellView { detailText = "No output" detailColor = .tertiaryLabelColor } - if case .failed(let code) = entry.status, code >= 0, entry.output?.firstLine(matching: query) == nil { + let matched = entry.output?.firstLine(matching: query) != nil + if let conflict, !matched { + // Why it failed says more than the last line it printed. + detailText = conflict.text + detailColor = .labelColor + } else if case .failed(let code) = entry.status, code >= 0, !matched { detailText = "Exit \(code) · " + detailText } + // A sentence, where the other rows have a line of output: in the font for prose, and with a + // second line rather than being cut. + let sentence = conflict != nil && !matched + detail.maximumNumberOfLines = sentence ? 2 : 1 + detail.usesSingleLineMode = !sentence + detail.cell?.wraps = sentence + detail.lineBreakMode = sentence ? .byWordWrapping : .byTruncatingTail + detail.cell?.truncatesLastVisibleLine = true detail.stringValue = detailText - detail.font = NSFont(descriptor: codeFont.fontDescriptor, size: 10.5) ?? .monospacedSystemFont(ofSize: 10.5, weight: .regular) + detail.font = sentence ? .systemFont(ofSize: 11) + : NSFont(descriptor: codeFont.fontDescriptor, size: 10.5) ?? .monospacedSystemFont(ofSize: 10.5, weight: .regular) detail.textColor = detailColor + goButton.isHidden = conflict?.holder == nil archived.isHidden = inScrollback || entry.isRunning || entry.fullScreen let color: NSColor @@ -1022,9 +1100,9 @@ final class TimelineCell: NSTableCellView { } else { dot.layer?.removeAnimation(forKey: "pulse") } - toolTip = entry.command + toolTip = [entry.command, conflict?.text].compactMap { $0 }.joined(separator: "\n") updateSaveButton() - setAccessibilityLabel(spokenDescription(entry, detail: detailText)) + setAccessibilityLabel(spokenDescription(entry, detail: conflict?.text ?? detailText)) } private func spokenDescription(_ entry: TimelineEntry, detail: String) -> String { @@ -1041,6 +1119,15 @@ final class TimelineCell: NSTableCellView { var shown: (detail: String, duration: String, durationColor: NSColor?, progress: Double?) { (detail.stringValue, duration.stringValue, duration.textColor, progress.isHidden ? nil : progress.shownFraction) } + + /// Whether the row offers Go to Pane, for tests. + var offersGoToPane: Bool { !goButton.isHidden } + + /// Presses Go to Pane, for tests. + func pressGoToPane() { + guard !goButton.isHidden else { return } + _ = goButton.sendAction(goButton.action, to: goButton.target) + } } /// Commands colored as shell code, for AppKit labels. diff --git a/Sources/CodecUI/ListeningPortsMenu.swift b/Sources/CodecUI/ListeningPortsMenu.swift new file mode 100644 index 0000000..a1b9125 --- /dev/null +++ b/Sources/CodecUI/ListeningPortsMenu.swift @@ -0,0 +1,101 @@ +import AppKit +import CodecCore + +/// A port some pane's program is listening on, and where that pane is: what Window › Listening Ports +/// and the command palette list. +@MainActor +struct PortLocation { + let port: ListeningPort + let pane: Pane + /// "Tab 2 › left pane". + let place: String + + /// ":3000 node — Tab 2 › left pane", with the name the process was given in place of its program's. + var title: String { "\(port.label) \(port.displayName) — \(place)" } + + func goToPane() { + pane.host?.reveal(pane) + } + + func openInBrowser() { + pane.open(port) + } +} + +/// The ports listened on in one window's panes. +@MainActor +struct ListeningWindow { + let host: (any PaneHost)? + /// What the window is called. + let title: String? + var ports: [PortLocation] +} + +extension PaneDirectory { + /// Every port the panes' programs are listening on: a window at a time, in the order the windows + /// were first seen, each window's lowest port first. Every pane looks afresh first, unless told + /// what's already known will do. + func listening(refreshing: Bool = true) -> [ListeningWindow] { + var windows: [ListeningWindow] = [] + for pane in panes { + if refreshing { pane.refreshListeningPorts() } + guard !pane.session.listeningPorts.isEmpty else { continue } + let place = pane.host?.place(of: pane) ?? pane.session.title + let found = pane.session.listeningPorts.map { PortLocation(port: $0, pane: pane, place: place) } + if let index = windows.firstIndex(where: { $0.host === pane.host }) { + windows[index].ports += found + } else { + windows.append(ListeningWindow(host: pane.host, title: pane.host?.windowTitle, ports: found)) + } + } + for index in windows.indices { windows[index].ports.sort { $0.port.port < $1.port.port } } + return windows + } +} + +/// Window › Listening Ports: every port the programs in any pane are listening on, filled in as the +/// menu opens. Choosing one goes to its pane; with ⌥, it opens in the browser instead. +@MainActor +final class ListeningPortsMenu: NSObject, NSMenuDelegate { + static let title = "Listening Ports" + + private let directory: PaneDirectory + + init(directory: PaneDirectory) { + self.directory = directory + } + + func menuNeedsUpdate(_ menu: NSMenu) { + menu.removeAllItems() + items().forEach(menu.addItem) + } + + /// None of its items has a key: without this, every key pressed with ⌘ would fill the menu in, + /// asking the kernel about every pane, to look for one. + func menuHasKeyEquivalent(_ menu: NSMenu, for event: NSEvent, target: AutoreleasingUnsafeMutablePointer, + action: UnsafeMutablePointer) -> Bool { + false + } + + /// The ports, under their window's name when they're in more than one; or a line saying there are none. + func items() -> [NSMenuItem] { + let windows = directory.listening() + guard !windows.isEmpty else { + return [NSMenuItem(title: "No Listening Ports", action: nil, keyEquivalent: "")] + } + var items: [NSMenuItem] = [] + for window in windows { + if windows.count > 1 { items.append(.sectionHeader(title: window.title ?? "Window")) } + for location in window.ports { + let go = ClosureMenuItem(location.title, image: "network") { location.goToPane() } + go.toolTip = "Go to the pane. Hold ⌥ to open \(location.port.url.absoluteString) in the browser." + let open = ClosureMenuItem("Open \(location.port.url.absoluteString)", modifiers: .option, image: "safari") { + location.openInBrowser() + } + open.isAlternate = true + items += [go, open] + } + } + return items + } +} diff --git a/Sources/CodecUI/MainMenu.swift b/Sources/CodecUI/MainMenu.swift index f0015a2..31a21fc 100644 --- a/Sources/CodecUI/MainMenu.swift +++ b/Sources/CodecUI/MainMenu.swift @@ -5,13 +5,14 @@ import AppKit enum MainMenu { private typealias W = TerminalWindowController - static func build() -> NSMenu { + /// `listeningPorts` fills in Window › Listening Ports as it opens; the caller keeps it alive. + static func build(listeningPorts: ListeningPortsMenu? = nil) -> NSMenu { let main = NSMenu() main.addItem(submenu(appMenu())) main.addItem(submenu(shellMenu())) main.addItem(submenu(editMenu())) main.addItem(submenu(viewMenu())) - let window = windowMenu() + let window = windowMenu(listeningPorts: listeningPorts) main.addItem(submenu(window)) NSApp.windowsMenu = window let help = NSMenu(title: "Help") @@ -132,6 +133,7 @@ enum MainMenu { menu.addItem(item("Toggle File Tree", #selector(W.toggleFileTree(_:)), "e", [.command, .shift])) menu.addItem(item("Intel", #selector(W.toggleIntel(_:)), "i", [.command, .shift])) menu.addItem(item("Commands", #selector(W.toggleCommandTimeline(_:)), "l", [.command, .shift])) + menu.addItem(item("Listening Ports", #selector(W.togglePorts(_:)), "o", [.command, .shift])) menu.addItem(item("Command History…", #selector(W.showCommandHistory(_:)), "y")) menu.addItem(item("Toggle Markdown Preview", #selector(W.toggleMarkdownPreview(_:)), "v", [.command, .shift])) menu.addItem(.separator()) @@ -150,7 +152,7 @@ enum MainMenu { return menu } - private static func windowMenu() -> NSMenu { + private static func windowMenu(listeningPorts: ListeningPortsMenu?) -> NSMenu { let menu = NSMenu(title: "Window") menu.addItem(item("Minimize", #selector(NSWindow.performMiniaturize(_:)), "m")) menu.addItem(item("Zoom", #selector(NSWindow.performZoom(_:)))) @@ -184,6 +186,11 @@ enum MainMenu { panesMenu.addItem(item("Below", #selector(W.focusPaneDown(_:)), arrow(NSDownArrowFunctionKey), [.command, .option])) panes.submenu = panesMenu menu.addItem(panes) + let ports = NSMenuItem(title: ListeningPortsMenu.title, action: nil, keyEquivalent: "") + let portsMenu = NSMenu(title: ListeningPortsMenu.title) + portsMenu.delegate = listeningPorts + ports.submenu = portsMenu + menu.addItem(ports) menu.addItem(.separator()) menu.addItem(item("Bring All to Front", #selector(NSApplication.arrangeInFront(_:)))) return menu diff --git a/Sources/CodecUI/Pane.swift b/Sources/CodecUI/Pane.swift index 16d73ba..b7cee7a 100644 --- a/Sources/CodecUI/Pane.swift +++ b/Sources/CodecUI/Pane.swift @@ -21,6 +21,12 @@ protocol PaneHost: AnyObject { func explainFailure(of entry: TimelineEntry, in pane: Pane) /// ⌘-click on the name of a file in the terminal: show it in the editor, or a folder in Finder. func openFile(_ url: URL, from pane: Pane) + /// Where `pane` is among the window's tabs, in words: "Tab 2 › left pane". + func place(of pane: Pane) -> String? + /// Brings `pane` to the front: its window, its tab, and the focus. + func reveal(_ pane: Pane) + /// What the window is called, for telling windows apart in a list. + var windowTitle: String? { get } } /// One shell in one pane: owns the process, the terminal view and the pane's `Session`. @@ -190,6 +196,7 @@ final class Pane: LocalProcessTerminalViewDelegate { applyPreferences() session.directory = directory ?? NSHomeDirectory() if let contents { restore(contents) } + environment.panes.add(self) start() } @@ -309,6 +316,8 @@ final class Pane: LocalProcessTerminalViewDelegate { venvObserver = nil if terminal.process.running { terminal.terminate() } environment.notifier.clear(id: session.id.uuidString) + session.listeningPorts = [] + environment.panes.remove(self) } /// What closing this pane would terminate: the program in the foreground and any background jobs. @@ -322,6 +331,19 @@ final class Pane: LocalProcessTerminalViewDelegate { /// Closing this pane would end something besides the shell. var hasRunningJob: Bool { !runningPrograms.isEmpty } + /// What closing some panes would terminate, for asking first. + struct Running { + /// Each program once, as the shells have them. + var programs: [String] = [] + /// The ports they, or what they started, are listening on. + var ports: [ListeningPort] = [] + + /// How many programs `list` names. + var count: Int { RunningPrograms.programs(programs, listening: ports).count } + /// "“npm” and “node” (listening on :3000)". + var list: String { RunningPrograms.list(programs, listening: ports) } + } + // MARK: - Polling private func startTimer() { @@ -342,8 +364,12 @@ final class Pane: LocalProcessTerminalViewDelegate { if printed { view.finder.contentChanged() } if printed { refreshCommandSeparators() } if printed, openableNames != nil { refreshFileLink(modifiers: fileLinkModifiers, rescan: true) } + if printed { printedSincePortScan = true } ticks += 1 - if ticks % 4 == 0 { pollProcess() } + if ticks % 4 == 0 { + pollProcess() + pollPorts() + } if session.running != nil, timeline.running?.fullScreen == false, terminal.terminalInputStateSnapshot()?.isAlternateBuffer == true { timeline.markRunningFullScreen() @@ -371,6 +397,114 @@ final class Pane: LocalProcessTerminalViewDelegate { if branch != session.gitBranch { session.gitBranch = branch } } + // MARK: - Listening ports + + /// How often to look at what the pane's programs listen on, in seconds. + static let portScanInterval = 3 + /// How long after a port shows up its program's output is read for the address it serves at: + /// programs say so as they start, and what they print later (requests, mostly) isn't that. + static let portAddressWindow: TimeInterval = 20 + + private var secondsSincePortScan = 0 + private var printedSincePortScan = false + /// When each port was first seen. + private var portsFirstSeen: [Int: Date] = [:] + /// Opens an address in the browser; tests look at what would open instead. + lazy var openURL: (URL) -> Void = { NSWorkspace.shared.open($0) } + + /// Every pane there is, this one included. + var panes: PaneDirectory { environment.panes } + + /// Every second: looks at the ports every few seconds, and within a second of something being + /// printed, which is when a server says it's ready. Costs one call to the kernel while the shell + /// has started nothing. + private func pollPorts() { + secondsSincePortScan += 1 + guard secondsSincePortScan >= Self.portScanInterval || printedSincePortScan else { return } + refreshListeningPorts() + } + + /// Asks the kernel which TCP ports the programs under the shell listen on, and reads what was + /// printed lately for the address of those that are new. + func refreshListeningPorts(at date: Date = Date()) { + secondsSincePortScan = 0 + printedSincePortScan = false + guard !isShutDown, session.exitStatus == nil, terminal.process.running else { return setListeningPorts([]) } + let scanned = ListeningPorts.scan(shell: terminal.process.shellPid, + foregroundGroup: ProcessInspector.foregroundProcess(ptyFD: terminal.process.childfd)) + var ports = ListeningPorts.merging(scanned, keepingAddressesOf: session.listeningPorts) + portsFirstSeen = portsFirstSeen.filter { seen in ports.contains { $0.port == seen.key } } + for port in ports where portsFirstSeen[port.port] == nil { portsFirstSeen[port.port] = date } + let unannounced = ports.indices.filter { index in + ports[index].address == nil + && date.timeIntervalSince(portsFirstSeen[ports[index].port] ?? date) < Self.portAddressWindow + } + if !unannounced.isEmpty, let printed = recentOutput() { + for index in unannounced { ports[index].address = ListeningPorts.address(for: ports[index].port, in: printed) } + } + setListeningPorts(ports) + } + + private func setListeningPorts(_ ports: [ListeningPort]) { + if ports.isEmpty { portsFirstSeen = [:] } + guard ports != session.listeningPorts else { return } + session.listeningPorts = ports + environment.panes.portsDidChange() + } + + /// The last lines printed, up to the cursor: the running command's, when it printed fewer than `rows`. + private func recentOutput(rows: Int = 300) -> String? { + guard terminal.terminalInputStateSnapshot()?.isAlternateBuffer == false, + let live = terminal.terminalContentSnapshot(region: .history(maximumScrollbackRows: 0)) else { return nil } + let end = live.cursorRow + 1 + let start = max(timeline.running?.block?.output ?? 0, end - rows, 0) + return lines(of: start.. PortConflictStatus? { + guard var conflict = entry.portConflict else { return nil } + guard let holder = environment.panes.pane(id: conflict.pane), + let held = holder.session.listeningPorts.first(where: { $0.port == conflict.port }) else { + return PortConflictStatus(text: conflict.sentence(stillHeld: false)) + } + // By the name its process goes by now, if it was given one. + conflict.program = held.displayName + if holder === self { return PortConflictStatus(text: conflict.sentence(place: "this pane")) } + let elsewhere = holder.host !== host + let place = holder.host?.place(of: holder).map { elsewhere ? "another window, \($0)" : $0 } + return PortConflictStatus(text: conflict.sentence(place: place ?? (elsewhere ? "another window" : "another pane")), + holder: holder) + } + + /// A command failed: if what it printed says a port was taken, finds the pane whose program has it. + private func recordPortConflict(of id: Int, output: String) { + guard let entry = timeline.value.entry(id: id), case .failed(let code) = entry.status, code > 0, + let port = PortConflict.port(inOutput: output, command: entry.command), + let holder = environment.panes.holder(of: port) else { return } + timeline.setPortConflict(PortConflict(port: port, program: holder.port.program, pane: holder.pane.session.id.uuidString), + of: id) + } + // MARK: - Shell integration func handle(_ event: IntegrationEvent) { @@ -402,6 +536,8 @@ final class Pane: LocalProcessTerminalViewDelegate { runningDirectory = session.directory promptIsDrawn = false waitingPromptRow = nil + // A server takes a moment to start listening: look a couple of seconds from now. + secondsSincePortScan = Self.portScanInterval - 2 default: break } @@ -435,6 +571,8 @@ final class Pane: LocalProcessTerminalViewDelegate { let finished = timeline.running let usual = finished?.usualDuration timeline.finish(exitCode: exitCode, duration: duration, output: nil) + // What it was listening on is gone with it. + refreshListeningPorts() // Its output runs up to the next prompt, found once that's drawn. if let finished, finished.block != nil, !finished.fullScreen { outputToCapture = finished.id } if preferences.recordHistory { @@ -917,6 +1055,7 @@ final class Pane: LocalProcessTerminalViewDelegate { let (lines, lostEarlier) = lines(of: block.output.. Void + + var body: some View { + HStack(spacing: 2) { + tab(.commands, title: "Commands", systemImage: "list.bullet.rectangle", shortcut: "⇧⌘L") + tab(.ports, title: "Ports", systemImage: "network", shortcut: "⇧⌘O") + Spacer(minLength: 0) + } + .padding(.horizontal, 8) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color(nsColor: theme.foreground).opacity(theme.isDark ? 0.025 : 0.035)) + .overlay(alignment: .bottom) { Rectangle().fill(theme.dividerColor).frame(height: 1) } + .overlay(alignment: .leading) { Rectangle().fill(theme.dividerColor).frame(width: 1) } + } + + private func tab(_ tab: InspectorTab, title: String, systemImage: String, shortcut: String) -> some View { + let selected = model.inspectorTab == tab + return Button { select(tab) } label: { + Label(title, systemImage: systemImage) + .font(.system(size: 11.5, weight: selected ? .semibold : .regular)) + .padding(.horizontal, 8) + .frame(height: 22) + .background(RoundedRectangle(cornerRadius: 6).fill(Color.primary.opacity(selected ? 0.09 : 0))) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .foregroundStyle(selected ? .primary : .secondary) + .help("\(title) (\(shortcut))") + .accessibilityAddTraits(selected ? .isSelected : []) + } +} + +/// What the Ports tab lists: every port the programs in any pane are listening on, this window's +/// first. Follows the panes only while the tab is showing. +@MainActor +final class PortsModel: ObservableObject { + struct Row: Identifiable { + let id: String + let location: PortLocation + + var port: ListeningPort { location.port } + + /// Under the name: where the pane is, after the program when the process goes by a name of the user's. + var detail: String { + port.name == nil ? location.place : "\(port.program) · \(location.place)" + } + } + + struct Section: Identifiable { + let id: Int + /// The window the ports are in, when that needs saying: they're not all in this one. + let title: String? + let rows: [Row] + } + + @Published private(set) var sections: [Section] = [] + /// The row whose process is being given a name. + @Published var naming: String? + + private let directory: PaneDirectory + /// The window the list is in. + weak var host: (any PaneHost)? + private var subscription: AnyCancellable? + + init(directory: PaneDirectory) { + self.directory = directory + } + + var rows: [Row] { sections.flatMap(\.rows) } + + /// Whether the tab is showing: it keeps up with the panes only then. + var isActive = false { + didSet { + guard isActive != oldValue else { return } + // Sent once the change is made, so what's read here is already the new state. + subscription = isActive ? directory.objectWillChange.sink { [weak self] _ in + MainActor.assumeIsolated { self?.reload() } + } : nil + if isActive { reload(refreshing: true) } else { naming = nil } + } + } + + /// Lists the ports again; `refreshing` has every pane look at what it's listening on first. + func reload(refreshing: Bool = false) { + let windows = directory.listening(refreshing: refreshing) + let ordered = windows.filter { $0.host === host } + windows.filter { $0.host !== host } + let titled = ordered.contains { $0.host !== host } + sections = ordered.enumerated().map { index, window in + Section(id: index, title: titled ? (window.host === host ? "This Window" : window.title ?? "Another Window") : nil, + rows: window.ports.map { Row(id: "\($0.pane.session.id.uuidString):\($0.port.port)", location: $0) }) + } + if let naming, !rows.contains(where: { $0.id == naming }) { self.naming = nil } + } + + func goToPane(_ row: Row) { + row.location.goToPane() + } + + func openInBrowser(_ row: Row) { + row.location.openInBrowser() + } + + func copyAddress(_ row: Row) { + NSPasteboard.general.clearContents() + NSPasteboard.general.setString(row.port.url.absoluteString, forType: .string) + } + + /// Calls the row's process `name` for as long as it runs; a blank name takes its name away, and + /// nil leaves it as it was. + func finishNaming(_ row: Row, as name: String?) { + naming = nil + if let name { row.location.pane.name(row.port, as: name) } + } +} + +/// The Ports tab of the right sidebar: what's listening in every pane, with the way to each pane. +final class PortsSidebar: NSView { + let model: PortsModel + /// The user dragged the leading edge to this width. + var onResize: ((CGFloat) -> Void)? + + private let list: NSHostingView + private let divider = NSView() + private let resizeHandle = SidebarResizeHandle() + + init(model: PortsModel, theme: CodecTheme) { + self.model = model + list = NSHostingView(rootView: PortsList(model: model, theme: theme)) + super.init(frame: .zero) + wantsLayer = true + divider.wantsLayer = true + // The window sizes the sidebar, not what's listed in it. + list.sizingOptions = [] + resizeHandle.onDrag = { [weak self] delta in + guard let self else { return } + self.onResize?(self.frame.width - delta) + } + for view in [list, divider, resizeHandle] as [NSView] { + view.translatesAutoresizingMaskIntoConstraints = false + addSubview(view) + } + NSLayoutConstraint.activate([ + divider.topAnchor.constraint(equalTo: topAnchor), + divider.bottomAnchor.constraint(equalTo: bottomAnchor), + divider.leadingAnchor.constraint(equalTo: leadingAnchor), + divider.widthAnchor.constraint(equalToConstant: 1), + resizeHandle.topAnchor.constraint(equalTo: topAnchor), + resizeHandle.bottomAnchor.constraint(equalTo: bottomAnchor), + resizeHandle.centerXAnchor.constraint(equalTo: divider.centerXAnchor), + resizeHandle.widthAnchor.constraint(equalToConstant: 8), + list.topAnchor.constraint(equalTo: topAnchor), + list.leadingAnchor.constraint(equalTo: divider.trailingAnchor), + list.trailingAnchor.constraint(equalTo: trailingAnchor), + list.bottomAnchor.constraint(equalTo: bottomAnchor), + ]) + apply(theme: theme) + } + + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + func apply(theme: CodecTheme) { + list.rootView = PortsList(model: model, theme: theme) + layer?.backgroundColor = theme.foreground.withAlphaComponent(theme.isDark ? 0.025 : 0.035).cgColor + divider.layer?.backgroundColor = theme.divider.cgColor + } +} + +/// The list: a heading, then each port with who's listening and where, a window at a time. +struct PortsList: View { + @ObservedObject var model: PortsModel + let theme: CodecTheme + + var body: some View { + VStack(spacing: 0) { + HStack(spacing: 6) { + Image(systemName: "network") + .font(.system(size: 11, weight: .medium)) + .foregroundStyle(.secondary) + Text("Listening") + .font(.system(size: 12, weight: .semibold)) + Text(Self.count(model.rows.count)) + .font(.system(size: 11)) + .foregroundStyle(.secondary) + Spacer(minLength: 4) + } + .padding(.leading, 12) + .frame(height: 34) + if model.sections.isEmpty { + Text("Nothing is listening. Start a server in any pane, and its port shows up here.") + .font(.system(size: 12)) + .foregroundStyle(.secondary) + .multilineTextAlignment(.center) + .padding(.horizontal, 20) + .padding(.top, 28) + Spacer(minLength: 0) + } else { + ScrollView { + LazyVStack(alignment: .leading, spacing: 2) { + ForEach(model.sections) { section in + if let title = section.title { + Label(title, systemImage: "macwindow") + .font(.system(size: 11, weight: .semibold)) + .foregroundStyle(.secondary) + .lineLimit(1) + .padding(.horizontal, 10) + .padding(.top, 8) + .padding(.bottom, 2) + } + ForEach(section.rows) { row in + PortRow(model: model, row: row, theme: theme) + } + } + } + .padding(.bottom, 8) + } + } + } + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + } + + /// "1 port", "3 ports"; nothing for none, which the list says in full. + static func count(_ count: Int) -> String { + count == 0 ? "" : count == 1 ? "1 port" : "\(count) ports" + } +} + +/// One port: its number, the name its process goes by, and where its pane is. Click to go there. +private struct PortRow: View { + @ObservedObject var model: PortsModel + let row: PortsModel.Row + let theme: CodecTheme + @State private var hovering = false + + var body: some View { + let naming = model.naming == row.id + HStack(alignment: .firstTextBaseline, spacing: 8) { + Text(row.port.label) + .font(.system(size: 12, weight: .semibold, design: .monospaced)) + .foregroundStyle(theme.accentColor) + VStack(alignment: .leading, spacing: 2) { + if naming { + InlineNameEditor(initialName: row.port.name ?? "", placeholder: row.port.program, label: "Process name", + onFinish: { model.finishNaming(row, as: $0) }) + } else { + Text(row.port.displayName) + .font(.system(size: 12, weight: .medium)) + .lineLimit(1) + .truncationMode(.middle) + } + Text(row.detail) + .font(.system(size: 10.5)) + .foregroundStyle(.secondary) + .lineLimit(1) + .truncationMode(.middle) + } + Spacer(minLength: 4) + if hovering, !naming { + RowButton(systemImage: "pencil", help: row.port.name == nil ? "Name This Process" : "Rename") { model.naming = row.id } + RowButton(systemImage: "safari", help: "Open \(row.port.url.absoluteString)") { model.openInBrowser(row) } + } + } + .padding(.horizontal, 10) + .padding(.vertical, 5) + .frame(maxWidth: .infinity, alignment: .leading) + .background(RoundedRectangle(cornerRadius: 6).fill(Color.primary.opacity(hovering ? 0.07 : 0)).padding(.horizontal, 6)) + .contentShape(Rectangle()) + .onTapGesture { if !naming { model.goToPane(row) } } + .onHover { hovering = $0 } + .contextMenu { + Button("Go to Pane") { model.goToPane(row) } + Button("Open in Browser") { model.openInBrowser(row) } + Button("Copy Address") { model.copyAddress(row) } + Divider() + Button(row.port.name == nil ? "Name Process…" : "Rename…") { model.naming = row.id } + if row.port.name != nil { + Button("Remove Name") { model.finishNaming(row, as: "") } + } + } + .help("Go to the pane: \(row.port.program) is listening on \(row.port.label) in \(row.location.place)") + .accessibilityElement(children: .combine) + .accessibilityLabel("Port \(row.port.port), \(row.port.displayName), \(row.detail)") + .accessibilityAddTraits(.isButton) + } +} + +private struct RowButton: View { + let systemImage: String + let help: String + var action: () -> Void + + var body: some View { + Button(action: action) { + Image(systemName: systemImage) + .font(.system(size: 11, weight: .medium)) + .frame(width: 20, height: 18) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .foregroundStyle(.secondary) + .help(help) + .accessibilityLabel(help) + } +} diff --git a/Sources/CodecUI/Session.swift b/Sources/CodecUI/Session.swift index 71d9a6a..8a958a6 100644 --- a/Sources/CodecUI/Session.swift +++ b/Sources/CodecUI/Session.swift @@ -49,6 +49,8 @@ final class Session: ObservableObject { @Published var toolchain = Toolchain() /// A virtual environment found where the shell is, waiting for the user to say whether to activate it. @Published var pendingVenv: Toolchain.PythonEnvironment? + /// The TCP ports the programs started from the pane listen on, lowest first. + @Published var listeningPorts: [ListeningPort] = [] var abbreviatedDirectory: String { (directory as NSString).abbreviatingWithTildeInPath diff --git a/Sources/CodecUI/StatusBar.swift b/Sources/CodecUI/StatusBar.swift index d45ea10..280c2a8 100644 --- a/Sources/CodecUI/StatusBar.swift +++ b/Sources/CodecUI/StatusBar.swift @@ -49,6 +49,7 @@ private struct TabStatus: View { SessionStatus(session: pane.session, theme: theme, onBranchChanged: { [weak pane] in pane?.gitBranchDidChange() }, run: { [weak pane] command in pane?.runAtPrompt(command) ?? false }, + open: { [weak pane] port in pane?.open(port) }, explain: explain.map { explain in { [weak pane] in if let pane { explain(pane) } } }) .id(ObjectIdentifier(pane)) } @@ -60,6 +61,8 @@ private struct SessionStatus: View { var onBranchChanged: () -> Void /// Runs a command at the pane's prompt; false when the shell is busy. var run: (String) -> Bool + /// Opens what a port serves in the browser. + var open: (ListeningPort) -> Void /// Explain, beside a failed command; nil when explaining isn't offered. var explain: (() -> Void)? @State private var choosingBranch = false @@ -85,6 +88,7 @@ private struct SessionStatus: View { } } ToolchainStatus(session: session, theme: theme, run: run) + PortsStatus(ports: session.listeningPorts, open: open) commandStatus } } @@ -132,6 +136,51 @@ private struct SessionStatus: View { } } +/// The ports the pane's programs listen on. One opens in the browser at a click; several make a menu. +struct PortsStatus: View { + let ports: [ListeningPort] + var open: (ListeningPort) -> Void + + var body: some View { + if ports.count == 1, let port = ports.first { + Button { open(port) } label: { + Chip(systemImage: "network", text: port.label) + .contentShape(Capsule()) + } + .buttonStyle(.plain) + .fixedSize() + .help(Self.help(for: port)) + .accessibilityLabel(Self.help(for: port)) + } else if !ports.isEmpty { + Menu { + ForEach(ports) { port in + Button(Self.menuTitle(for: port)) { open(port) } + } + } label: { + Chip(systemImage: "network", text: ListeningPorts.label(ports), trailingSymbol: "chevron.up.chevron.down") + .contentShape(Capsule()) + } + .menuStyle(.button) + .buttonStyle(.plain) + .menuIndicator(.hidden) + .fixedSize() + .help(ListeningPorts.phrase(ports, namingPrograms: true, capitalized: true)) + .accessibilityLabel("\(ListeningPorts.phrase(ports, capitalized: true)). Open in the browser") + } + } + + /// "Open http://localhost:3000/app: “node” is listening on :3000". + static func help(for port: ListeningPort) -> String { + "Open \(port.url.absoluteString): “\(port.displayName)” is listening on \(port.label)" + } + + /// "localhost:3000/app — node": the address without its scheme unless it's not plain HTTP. + static func menuTitle(for port: ListeningPort) -> String { + let address = port.url.absoluteString + return "\(address.hasPrefix("http://") ? String(address.dropFirst(7)) : address) — \(port.displayName)" + } +} + private struct Chip: View { let systemImage: String let text: String diff --git a/Sources/CodecUI/TerminalTab.swift b/Sources/CodecUI/TerminalTab.swift index 9e35f0e..51d44c3 100644 --- a/Sources/CodecUI/TerminalTab.swift +++ b/Sources/CodecUI/TerminalTab.swift @@ -97,6 +97,16 @@ final class TerminalTab: ObservableObject, Identifiable { /// The title the tab has without a custom name: what's running in its focused pane. var automaticTitle: String { focused.session.title } + /// What shows when the pointer rests on the tab: where its focused pane is (and what it's running, + /// when the tab has a name of its own), then what its panes' programs are listening on. + var toolTip: String { + let directory = focused.session.abbreviatedDirectory + let ports = panes.flatMap(\.session.listeningPorts) + let lines = [customTitle == nil ? directory : "\(automaticTitle) — \(directory)", + ports.isEmpty ? nil : ListeningPorts.phrase(ports, namingPrograms: true, capitalized: true)] + return lines.compactMap { $0 }.joined(separator: "\n") + } + /// Names the tab. Blank names (or nil) go back to the automatic title. func rename(to name: String?) { let trimmed = name?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" diff --git a/Sources/CodecUI/TerminalWindowController.swift b/Sources/CodecUI/TerminalWindowController.swift index 9f8506f..f4a1924 100644 --- a/Sources/CodecUI/TerminalWindowController.swift +++ b/Sources/CodecUI/TerminalWindowController.swift @@ -37,6 +37,12 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe private(set) var timelineSidebar: CommandTimelineSidebar! private var timelineWidthConstraint: NSLayoutConstraint! private static let timelineVisibleKey = "CommandsVisible" + /// The right sidebar: the Commands and Ports tabs above the pane's commands or what's listening. + private let inspector = NSView() + private var inspectorBar: NSHostingView! + private(set) var portsSidebar: PortsSidebar! + let ports: PortsModel + private static let inspectorTabKey = "InspectorTab" let intel: IntelLibrary private(set) var intelSidebar: IntelSidebar! /// The left sidebar: the Files and Intel tabs above the file tree or the Intel list. @@ -52,6 +58,7 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe self.environment = environment fileTree = FileTreeModel(defaults: environment.preferences.stateDefaults) intel = IntelLibrary(personalFolder: environment.intelFolder) + ports = PortsModel(directory: environment.panes) let window = NSWindow( contentRect: NSRect(origin: .zero, size: Self.defaultSize(font: environment.preferences.font())), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], @@ -80,7 +87,8 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe observeState() model.navigatorTab = preferences.stateDefaults.string(forKey: Self.navigatorTabKey).flatMap(NavigatorTab.init) ?? .files setNavigatorVisible(preferences.stateDefaults.bool(forKey: Self.fileTreeVisibleKey)) - setTimelineVisible(preferences.stateDefaults.bool(forKey: Self.timelineVisibleKey)) + model.inspectorTab = preferences.stateDefaults.string(forKey: Self.inspectorTabKey).flatMap(InspectorTab.init) ?? .commands + setInspectorVisible(preferences.stateDefaults.bool(forKey: Self.timelineVisibleKey)) } @available(*, unavailable) @@ -118,7 +126,10 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe guard let self else { return } self.setNavigatorVisible(!self.model.fileTreeVisible) }, - toggleTimeline: { [weak self] in self?.toggleCommandTimeline(nil) }, + toggleTimeline: { [weak self] in + guard let self else { return } + self.setInspectorVisible(!self.model.timelineVisible) + }, beginRenaming: { [weak self] in self?.beginRenaming($0) }, finishRenaming: { [weak self] in self?.finishRenaming($0, to: $1) }))) tabBar.movesWindow = false @@ -166,7 +177,30 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe return self.environment.explainer } timelineSidebar.isHidden = true - timelineWidthConstraint = timelineSidebar.widthAnchor.constraint(equalToConstant: 0) + ports.host = self + portsSidebar = PortsSidebar(model: ports, theme: preferences.theme) + portsSidebar.onResize = { [weak self] width in self?.resizeTimeline(to: width) } + portsSidebar.isHidden = true + inspectorBar = NSHostingView(rootView: InspectorBar(model: model, theme: preferences.theme, select: { _ in })) + inspectorBar.rootView = makeInspectorBar() + for view in [inspectorBar!, timelineSidebar!, portsSidebar!] as [NSView] { + view.translatesAutoresizingMaskIntoConstraints = false + inspector.addSubview(view) + } + let underTheBar: [NSLayoutConstraint] = [timelineSidebar!, portsSidebar!].flatMap { view -> [NSLayoutConstraint] in [ + view.topAnchor.constraint(equalTo: inspectorBar.bottomAnchor), + view.leadingAnchor.constraint(equalTo: inspector.leadingAnchor), + view.trailingAnchor.constraint(equalTo: inspector.trailingAnchor), + view.bottomAnchor.constraint(equalTo: inspector.bottomAnchor), + ] } + NSLayoutConstraint.activate(underTheBar + [ + inspectorBar.topAnchor.constraint(equalTo: inspector.topAnchor), + inspectorBar.leadingAnchor.constraint(equalTo: inspector.leadingAnchor), + inspectorBar.trailingAnchor.constraint(equalTo: inspector.trailingAnchor), + inspectorBar.heightAnchor.constraint(equalToConstant: 30), + ]) + inspector.isHidden = true + timelineWidthConstraint = inspector.widthAnchor.constraint(equalToConstant: 0) let storedTimelineWidth = preferences.stateDefaults.double(forKey: Self.timelineWidthKey) timelineWidth = storedTimelineWidth > 0 ? min(max(CGFloat(storedTimelineWidth), CommandTimelineSidebar.widthRange.lowerBound), CommandTimelineSidebar.widthRange.upperBound) @@ -180,7 +214,7 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe editorWidth = editorPanel.widthAnchor.constraint(equalToConstant: 0) editor.confirmClose = { [weak self] document, done in self?.confirmClosing(document, then: done) ?? done(true) } - for view in [backdrop, tint, tabBar!, navigator, editorPanel!, paneContainer, timelineSidebar!, statusBar!, palette!] as [NSView] { + for view in [backdrop, tint, tabBar!, navigator, editorPanel!, paneContainer, inspector, statusBar!, palette!] as [NSView] { view.translatesAutoresizingMaskIntoConstraints = false content.addSubview(view) } @@ -188,9 +222,9 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe let filling: [NSLayoutConstraint] = backdrop.constraintsFilling(content) + tint.constraintsFilling(content) + palette.constraintsFilling(content) let commands: [NSLayoutConstraint] = [ - timelineSidebar.topAnchor.constraint(equalTo: tabBar.bottomAnchor), - timelineSidebar.trailingAnchor.constraint(equalTo: content.trailingAnchor), - timelineSidebar.bottomAnchor.constraint(equalTo: statusBar.topAnchor), + inspector.topAnchor.constraint(equalTo: tabBar.bottomAnchor), + inspector.trailingAnchor.constraint(equalTo: content.trailingAnchor), + inspector.bottomAnchor.constraint(equalTo: statusBar.topAnchor), timelineWidthConstraint, ] NSLayoutConstraint.activate(filling + commands) @@ -209,7 +243,7 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe editorPanel.bottomAnchor.constraint(equalTo: statusBar.topAnchor), editorWidth, paneContainer.leadingAnchor.constraint(equalTo: editorPanel.trailingAnchor), - paneContainer.trailingAnchor.constraint(equalTo: timelineSidebar.leadingAnchor), + paneContainer.trailingAnchor.constraint(equalTo: inspector.leadingAnchor), paneContainer.bottomAnchor.constraint(equalTo: statusBar.topAnchor), statusBar.leadingAnchor.constraint(equalTo: content.leadingAnchor), statusBar.trailingAnchor.constraint(equalTo: content.trailingAnchor), @@ -246,6 +280,8 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe intelSidebar?.applyTheme(theme) if navigatorBar != nil { navigatorBar.rootView = makeNavigatorBar() } timelineSidebar?.apply(theme: theme, codeFont: preferences.font()) + portsSidebar?.apply(theme: theme) + if inspectorBar != nil { inspectorBar.rootView = makeInspectorBar() } editorPanel?.apply(theme: theme, font: preferences.font()) allPanes.forEach { $0.applyPreferences() } installSelectedTab(force: true) @@ -281,7 +317,7 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe focusedPaneCameToFront() updateWindowTitle() followFocusedDirectory() - if model.timelineVisible { timelineSidebar.follow(focusedPane) } + if model.timelineVisible, model.inspectorTab == .commands { timelineSidebar.follow(focusedPane) } } private func updateWindowTitle() { @@ -487,13 +523,40 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe private var timelineWidth: CGFloat = CommandTimelineSidebar.defaultWidth + /// Shows the Commands sidebar, or hides the right sidebar. func setTimelineVisible(_ visible: Bool) { - if !visible { giveTerminalTheKeyboard(ifIn: timelineSidebar) } + setInspectorVisible(visible, tab: visible ? .commands : nil) + } + + /// Shows or hides the right sidebar, on `tab` when given or the tab it was on. + func setInspectorVisible(_ visible: Bool, tab: InspectorTab? = nil) { + if let tab, tab != model.inspectorTab { + model.inspectorTab = tab + preferences.stateDefaults.set(tab.rawValue, forKey: Self.inspectorTabKey) + } + let shown = visible ? model.inspectorTab : nil + // Before hiding it: AppKit would leave the keyboard with the window, not the terminal. + if shown != .commands { giveTerminalTheKeyboard(ifIn: timelineSidebar) } + if shown != .ports { giveTerminalTheKeyboard(ifIn: portsSidebar) } model.timelineVisible = visible preferences.stateDefaults.set(visible, forKey: Self.timelineVisibleKey) - timelineSidebar.isHidden = !visible + inspector.isHidden = !visible + timelineSidebar.isHidden = shown != .commands + portsSidebar.isHidden = shown != .ports timelineWidthConstraint.constant = visible ? fittingTimelineWidth : 0 - timelineSidebar.follow(visible ? focusedPane : nil) + timelineSidebar.follow(shown == .commands ? focusedPane : nil) + ports.isActive = shown == .ports + } + + private func makeInspectorBar() -> InspectorBar { + InspectorBar(model: model, theme: preferences.theme) { [weak self] tab in + guard let self else { return } + self.setInspectorVisible(true, tab: tab) + if tab == .commands { + self.window?.layoutIfNeeded() + self.timelineSidebar.focusList() + } + } } /// The sidebar's width, narrower than the user made it when the window can't leave the terminal room @@ -512,11 +575,16 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe /// ⇧⌘L: shows the Commands sidebar with the keyboard on it, or hides it. @objc func toggleCommandTimeline(_ sender: Any?) { - setTimelineVisible(!model.timelineVisible) - if model.timelineVisible { - window?.layoutIfNeeded() - timelineSidebar.focusList() - } + if model.timelineVisible, model.inspectorTab == .commands { return setInspectorVisible(false) } + setInspectorVisible(true, tab: .commands) + window?.layoutIfNeeded() + timelineSidebar.focusList() + } + + /// ⇧⌘O: shows what's listening in every pane, or hides it when it's showing. + @objc func togglePorts(_ sender: Any?) { + if model.timelineVisible, model.inspectorTab == .ports { return setInspectorVisible(false) } + setInspectorVisible(true, tab: .ports) } /// Keeps the tree on the focused pane's directory. @@ -710,6 +778,7 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe guard let self, let tab else { return } // Its splits, its name or a pane's directory may have changed. self.onStateChange?() + self.environment.panes.placesDidChange() guard tab === self.model.selected else { return } self.updateWindowTitle() } @@ -781,7 +850,13 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe private func observeState() { model.objectWillChange .receive(on: RunLoop.main) - .sink { [weak self] _ in MainActor.assumeIsolated { self?.onStateChange?() } } + .sink { [weak self] _ in + MainActor.assumeIsolated { + self?.onStateChange?() + // Tabs came, went or moved: "Tab 2" may be another tab now. + self?.environment.panes.placesDidChange() + } + } .store(in: &cancellables) for name in [NSWindow.didMoveNotification, NSWindow.didResizeNotification] { NotificationCenter.default.publisher(for: name, object: window) @@ -806,15 +881,25 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe /// Shows the pane with this session ID. Returns false if it isn't in this window. func reveal(sessionID: String) -> Bool { - for tab in model.tabs { - if let pane = tab.panes.first(where: { $0.session.id.uuidString == sessionID }) { - select(tab) - tab.focus(pane) - window?.makeKeyAndOrderFront(nil) - return true - } - } - return false + guard let pane = allPanes.first(where: { $0.session.id.uuidString == sessionID }) else { return false } + reveal(pane) + return true + } + + func reveal(_ pane: Pane) { + guard let tab = model.tabs.first(where: { $0.layout.contains(pane) }) else { return } + if tab !== model.selected { select(tab) } + tab.focus(pane) + window?.makeKeyAndOrderFront(nil) + window?.makeFirstResponder(pane.view.preferredResponder) + } + + var windowTitle: String? { window?.title } + + func place(of pane: Pane) -> String? { + guard let index = model.tabs.firstIndex(where: { $0.layout.contains(pane) }) else { return nil } + let tab = "Tab \(index + 1)" + return model.tabs[index].layout.position(of: pane).map { "\(tab) › \($0) pane" } ?? tab } private func remove(_ pane: Pane) { @@ -875,17 +960,14 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe /// Asks before closing panes that have programs running in them. private func confirmClosing(_ panes: [Pane], what: String, then close: @escaping () -> Void) { - var programs: [String] = [] - for pane in panes { - for program in pane.runningPrograms where !programs.contains(program) { programs.append(program) } - } - guard !programs.isEmpty, let window else { + let running = panes.running + guard !running.programs.isEmpty, let window else { close() return } let alert = NSAlert() alert.messageText = "Close \(what)?" - alert.informativeText = "\(RunningPrograms.list(programs)) \(programs.count == 1 ? "is" : "are") still running and will be terminated." + alert.informativeText = "\(running.list) \(running.count == 1 ? "is" : "are") still running and will be terminated." alert.addButton(withTitle: "Close") alert.addButton(withTitle: "Cancel") alert.beginSheetModal(for: window) { response in @@ -893,15 +975,6 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe } } - /// Everything the window's panes would terminate if it closed, each program once. - var runningPrograms: [String] { - var programs: [String] = [] - for pane in allPanes { - for program in pane.runningPrograms where !programs.contains(program) { programs.append(program) } - } - return programs - } - var hasRunningJobs: Bool { allPanes.contains(where: \.hasRunningJob) } @@ -963,7 +1036,7 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe guard let tab = model.tabs.first(where: { $0.layout.contains(pane) }) else { return } if tab !== model.selected { select(tab) } tab.focus(pane) - if !model.timelineVisible { setTimelineVisible(true) } + if !model.timelineVisible || model.inspectorTab != .commands { setTimelineVisible(true) } window?.layoutIfNeeded() let row = timelineSidebar.rows.firstIndex { $0.entry?.id == entry.id } if let row { @@ -1375,8 +1448,10 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe .init(id: "new-intel-doc", title: "New Intel Document…", systemImage: "doc.text") { [weak self] in self?.newIntel(.doc) }, - .init(id: "commands", title: model.timelineVisible ? "Hide Commands Sidebar" : "Show Commands Sidebar", shortcut: "⇧⌘L", - systemImage: "sidebar.right") { [weak self] in self?.toggleCommandTimeline(nil) }, + .init(id: "commands", title: model.timelineVisible && model.inspectorTab == .commands ? "Hide Commands Sidebar" : "Show Commands Sidebar", + shortcut: "⇧⌘L", systemImage: "sidebar.right") { [weak self] in self?.toggleCommandTimeline(nil) }, + .init(id: "ports", title: model.timelineVisible && model.inspectorTab == .ports ? "Hide Listening Ports" : "Show Listening Ports", + shortcut: "⇧⌘O", systemImage: "network") { [weak self] in self?.togglePorts(nil) }, .init(id: "command-history", title: "Search Command History", shortcut: "⌘Y", systemImage: "clock.arrow.circlepath") { [weak self] in self?.showCommandHistory(nil) }, @@ -1417,6 +1492,20 @@ final class TerminalWindowController: NSWindowController, NSWindowDelegate, NSMe self?.environment.coordinator?.showSettings() }, ] + // What's listening, in any window: type a port to go to its pane, or to open it. + for location in environment.panes.listening().flatMap(\.ports) { + let id = "\(location.port.port)-\(location.pane.session.id.uuidString)" + let elsewhere = location.pane.host !== self + let place = (elsewhere ? "another window, " : "") + location.place + commands.append(.init(id: "port-\(id)", title: "Go to \(location.port.label) — \(location.port.program), \(place)", + systemImage: "network") { + location.goToPane() + }) + commands.append(.init(id: "open-port-\(id)", title: "Open \(location.port.url.absoluteString) in the Browser", + systemImage: "safari") { + location.openInBrowser() + }) + } let preferences = self.preferences for theme in CodecTheme.all { commands.append(.init(id: "theme-\(theme.id)", title: "Theme: \(theme.name)", systemImage: "paintpalette") { diff --git a/Sources/CodecUI/WindowChrome.swift b/Sources/CodecUI/WindowChrome.swift index b4efe4d..97f346a 100644 --- a/Sources/CodecUI/WindowChrome.swift +++ b/Sources/CodecUI/WindowChrome.swift @@ -15,6 +15,8 @@ final class WindowModel: ObservableObject { @Published var timelineVisible = false /// The left sidebar's tab; `fileTreeVisible` says whether it's showing. @Published var navigatorTab: NavigatorTab = .files + /// The right sidebar's tab; `timelineVisible` says whether it's showing. + @Published var inspectorTab: InspectorTab = .commands var selected: TerminalTab? { tabs.first { $0.id == selectedID } } } @@ -84,7 +86,7 @@ struct TabBar: View { BarIconButton(systemImage: "plus", help: "New Tab (⌘T)", action: actions.newTab) Spacer(minLength: 24) BarIconButton(systemImage: "command", help: "Command Palette (⇧⌘P)", action: actions.showPalette) - BarIconButton(systemImage: "sidebar.right", help: model.timelineVisible ? "Hide Commands (⇧⌘L)" : "Show Commands (⇧⌘L)", + BarIconButton(systemImage: "sidebar.right", help: model.timelineVisible ? "Hide Commands and Ports" : "Show Commands and Ports", active: model.timelineVisible, action: actions.toggleTimeline) } .padding(.leading, model.fullScreen ? 10 : 84) @@ -206,7 +208,6 @@ private struct TabButton: View { @State private var hovering = false var body: some View { - let session = tab.focused.session let attention = tab.panes.contains { $0.session.needsAttention } let unseen = !selected && tab.panes.contains { $0.session.unseenOutput } @@ -225,8 +226,8 @@ private struct TabButton: View { .frame(width: 12) if renaming { - TabNameEditor(initialName: tab.customTitle ?? "", placeholder: tab.automaticTitle, - onFinish: { actions.finishRenaming(tab, $0) }) + InlineNameEditor(initialName: tab.customTitle ?? "", placeholder: tab.automaticTitle, label: "Tab name", + onFinish: { actions.finishRenaming(tab, $0) }) .frame(maxWidth: .infinity, alignment: .leading) } else { Text(tab.title) @@ -283,7 +284,7 @@ private struct TabButton: View { Divider() Button("Close Tab") { actions.close(tab) } } - .help(tab.customTitle == nil ? session.abbreviatedDirectory : "\(tab.automaticTitle) — \(session.abbreviatedDirectory)") + .help(tab.toolTip) .accessibilityElement(children: .combine) .accessibilityAddTraits(selected ? [.isButton, .isSelected] : .isButton) } @@ -325,17 +326,20 @@ struct UsualProgressBar: View { } } -/// Inline editor for a tab's name. Return saves, Escape cancels, clicking elsewhere saves. -/// A blank name goes back to the automatic title, shown as the placeholder. -private struct TabNameEditor: View { +/// Inline editor for a name the user gives: a tab's, or a listening process's. Return saves, Escape +/// cancels, clicking elsewhere saves. A blank name goes back to the automatic one, shown as the placeholder. +struct InlineNameEditor: View { let placeholder: String + /// What it's the name of, for VoiceOver: "Tab name". + let label: String var onFinish: (String?) -> Void @State private var text: String @State private var finished = false @FocusState private var focused: Bool - init(initialName: String, placeholder: String, onFinish: @escaping (String?) -> Void) { + init(initialName: String, placeholder: String, label: String, onFinish: @escaping (String?) -> Void) { self.placeholder = placeholder + self.label = label self.onFinish = onFinish _text = State(initialValue: initialName) } @@ -351,7 +355,7 @@ private struct TabNameEditor: View { if !isFocused { finish(text) } } .task { focused = true } - .accessibilityLabel("Tab name") + .accessibilityLabel(label) } private func finish(_ name: String?) { diff --git a/Tests/CodecCoreTests/ListeningPortsTests.swift b/Tests/CodecCoreTests/ListeningPortsTests.swift new file mode 100644 index 0000000..3291fae --- /dev/null +++ b/Tests/CodecCoreTests/ListeningPortsTests.swift @@ -0,0 +1,229 @@ +import Testing +import Foundation +@testable import CodecCore + +@Suite("Listening ports") +struct ListeningPortsTests { + /// A shell (10) running npm (11), which runs sh (12), which runs node (13) and a worker it forked + /// (14); and a job in the background (20). + private let children: [pid_t: [pid_t]] = [10: [11, 20], 11: [12], 12: [13], 13: [14]] + private let names: [pid_t: String] = [11: "npm", 12: "sh", 13: "node", 14: "node", 20: "python3.13"] + private let ports: [pid_t: [Int]] = [13: [9229, 3000], 14: [3000], 20: [8000]] + private let groups: [pid_t: pid_t] = [11: 11, 12: 11, 13: 11, 14: 11, 20: 20] + + private func scan(foreground: pid_t?) -> [ListeningPort] { + ListeningPorts.scan(shell: 10, foregroundGroup: foreground, + descendants: { shell in + var found: [pid_t] = [], next = children[shell] ?? [] + while !next.isEmpty { + found += next + next = next.flatMap { children[$0] ?? [] } + } + return found + }, + ports: { ports[$0] ?? [] }, group: { groups[$0] }, name: { names[$0] }) + } + + @Test func findsWhatTheShellsProgramsListenOn() { + // Lowest first, each once, held by the process nearest the shell, and whether it's the command in front. + #expect(scan(foreground: 11) == [ + ListeningPort(port: 3000, program: "node", pid: 13, foreground: true), + ListeningPort(port: 8000, program: "python3.13", pid: 20, foreground: false), + ListeningPort(port: 9229, program: "node", pid: 13, foreground: true), + ]) + // At the prompt, the shell is in front: everything listening is a job in the background. + #expect(scan(foreground: 10).allSatisfy { !$0.foreground }) + #expect(scan(foreground: nil).map(\.port) == [3000, 8000, 9229]) + } + + @Test func keepsAnAddressWhileTheSameProcessHoldsThePort() { + let known = [ListeningPort(port: 3000, program: "node", pid: 13, address: "http://localhost:3000/app"), + ListeningPort(port: 8000, program: "python", pid: 20, address: "http://localhost:8000")] + let scanned = [ListeningPort(port: 3000, program: "node", pid: 13), ListeningPort(port: 8000, program: "ruby", pid: 31)] + let merged = ListeningPorts.merging(scanned, keepingAddressesOf: known) + #expect(merged.map(\.address) == ["http://localhost:3000/app", nil]) + } + + @Test func aProcessGoesByTheNameItWasGiven() { + let ports = [ListeningPort(port: 3000, program: "node", pid: 13), ListeningPort(port: 9229, program: "node", pid: 13), + ListeningPort(port: 8000, program: "python", pid: 20)] + #expect(ports[0].displayName == "node") + // The process is named, so every port it has is. + let named = ListeningPorts.naming(ports[0], " Storefront ", in: ports) + #expect(named.map(\.name) == ["Storefront", "Storefront", nil]) + #expect(named.map(\.displayName) == ["Storefront", "Storefront", "python"]) + #expect(ListeningPorts.phrase(named, namingPrograms: true) == "listening on :3000 (Storefront), :9229 (Storefront) and :8000 (python)") + // It keeps its name while it runs, on ports it opens later too; another process in its place doesn't get it. + let later = [ListeningPort(port: 3000, program: "node", pid: 13), ListeningPort(port: 3001, program: "node", pid: 13), + ListeningPort(port: 8000, program: "python", pid: 21)] + #expect(ListeningPorts.merging(later, keepingAddressesOf: named).map(\.name) == ["Storefront", "Storefront", nil]) + let restarted = [ListeningPort(port: 3000, program: "node", pid: 14)] + #expect(ListeningPorts.merging(restarted, keepingAddressesOf: named).map(\.name) == [nil]) + // A blank name, or none, takes it away. + #expect(ListeningPorts.naming(named[1], " ", in: named).map(\.name) == [nil, nil, nil]) + #expect(ListeningPorts.naming(named[0], nil, in: named).map(\.name) == [nil, nil, nil]) + } + + @Test func opensTheAddressPrintedOrPlainHTTP() { + #expect(ListeningPort(port: 3000, program: "node").url.absoluteString == "http://localhost:3000") + #expect(ListeningPort(port: 3000, program: "node", address: "https://localhost:3000/app").url.absoluteString + == "https://localhost:3000/app") + #expect(ListeningPort(port: 3000, program: "node").label == ":3000") + } + + @Test func saysWhatIsListening() { + let ports = [3000, 3001, 5173, 9229].map { ListeningPort(port: $0, program: $0 == 5173 ? "vite" : "node") } + #expect(ListeningPorts.label(Array(ports.prefix(1))) == ":3000") + #expect(ListeningPorts.label(Array(ports.prefix(3))) == ":3000 :3001 :5173") + #expect(ListeningPorts.label(ports) == ":3000 :3001 :5173 +1") + #expect(ListeningPorts.phrase(Array(ports.prefix(1))) == "listening on :3000") + #expect(ListeningPorts.phrase(Array(ports.prefix(2)), capitalized: true) == "Listening on :3000 and :3001") + #expect(ListeningPorts.phrase(Array(ports.prefix(3))) == "listening on :3000, :3001 and :5173") + #expect(ListeningPorts.phrase(Array(ports.suffix(2)), namingPrograms: true) == "listening on :5173 (vite) and :9229 (node)") + } + + @Test func findsTheAddressAProgramAnnounced() { + let vite = """ + VITE v7.1.0 ready in 212 ms + + ➜ Local: http://localhost:5173/app/ + ➜ Network: http://192.168.1.20:5173/app/ + """ + #expect(ListeningPorts.address(for: 5173, in: vite) == "http://localhost:5173/app/") + #expect(ListeningPorts.address(for: 3000, in: vite) == nil) + // The first one printed, without the sentence's punctuation. + #expect(ListeningPorts.address(for: 3000, in: "Ready on https://127.0.0.1:3000. GET http://localhost:3000/api/users 200") + == "https://127.0.0.1:3000") + #expect(ListeningPorts.address(for: 8080, in: "(see http://[::1]:8080/docs?tab=1#top)") == "http://[::1]:8080/docs?tab=1#top") + #expect(ListeningPorts.address(for: 4000, in: "Serving at http://api.myapp.localhost:4000") == "http://api.myapp.localhost:4000") + // Every interface: a browser opens it as localhost. + #expect(ListeningPorts.address(for: 8000, in: "Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)") + == "http://localhost:8000") + #expect(ListeningPorts.address(for: 8000, in: "listening on http://[::]:8000/") == "http://localhost:8000/") + // Another port, another machine, or no address at all. + #expect(ListeningPorts.address(for: 300, in: "http://localhost:3000") == nil) + #expect(ListeningPorts.address(for: 3000, in: "proxying to http://api.example.com:3000") == nil) + #expect(ListeningPorts.address(for: 3000, in: "Listening on port 3000") == nil) + } + + @Test func readsTheSocketsOfAProcess() throws { + let descriptor = socket(AF_INET, SOCK_STREAM, 0) + try #require(descriptor >= 0) + defer { close(descriptor) } + var address = sockaddr_in() + address.sin_len = UInt8(MemoryLayout.size) + address.sin_family = sa_family_t(AF_INET) + address.sin_addr.s_addr = inet_addr("127.0.0.1") + var length = socklen_t(MemoryLayout.size) + let bound = withUnsafeMutablePointer(to: &address) { + $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { pointer in + bind(descriptor, pointer, length) == 0 && getsockname(descriptor, pointer, &length) == 0 + } + } + try #require(bound) + let port = Int(UInt16(bigEndian: address.sin_port)) + // Bound isn't listening yet. + #expect(!ProcessInspector.listeningPorts(of: getpid()).contains(port)) + try #require(listen(descriptor, 1) == 0) + #expect(ProcessInspector.listeningPorts(of: getpid()).contains(port)) + #expect(ProcessInspector.listeningPorts(of: -1).isEmpty) + #expect(ProcessInspector.processGroup(of: getpid()) == getpgrp()) + #expect(ProcessInspector.processGroup(of: -1) == nil) + } + + @Test func findsTheProcessesAProcessStartedAndTheirs() throws { + // A shell that starts a sleep and waits for it: a child, and a child of that child. + let shell = Process() + shell.executableURL = URL(fileURLWithPath: "/bin/sh") + shell.arguments = ["-c", "sleep 20 & wait"] + try shell.run() + var grandchildren: [pid_t] = [] + for _ in 0..<100 where grandchildren.isEmpty { + grandchildren = ProcessInspector.children(of: shell.processIdentifier) + if grandchildren.isEmpty { Thread.sleep(forTimeInterval: 0.05) } + } + defer { + shell.terminate() + grandchildren.forEach { kill($0, SIGTERM) } + } + try #require(!grandchildren.isEmpty) + let found = ProcessInspector.descendants(of: getpid()) + // Nearest first. + let child = try #require(found.firstIndex(of: shell.processIdentifier)) + let grandchild = try #require(found.firstIndex(of: grandchildren[0])) + #expect(child < grandchild) + #expect(!ProcessInspector.children(of: getpid()).contains(grandchildren[0])) + #expect(ProcessInspector.descendants(of: getpid(), limit: 1).count == 1) + #expect(ProcessInspector.descendants(of: -1).isEmpty) + } +} + +@Suite("Port conflicts") +struct PortConflictTests { + @Test(arguments: [ + ("Error: listen EADDRINUSE: address already in use :::3000", "npm run dev", 3000), + ("[12:30:45] Error: listen EADDRINUSE: address already in use 127.0.0.1:8080", "node server.js", 8080), + ("2026/11/12 10:02:11 listen tcp :8081: bind: address already in use", "go run .", 8081), + (#"Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)"#, "bin/rails server", 3000), + ("ERROR: [Errno 48] error while attempting to bind on address ('127.0.0.1', 8000): address already in use", + "uvicorn main:app", 8000), + ("nginx: [emerg] bind() to 0.0.0.0:8443 failed (48: Address already in use)", "nginx", 8443), + ("Address already in use\nPort 5000 is in use by another program. Either identify and stop that program, or start the server with a different port.", + "flask run", 5000), + ("Error: That port is already in use.", "python manage.py runserver 8001", 8001), + // The error names no port: the command does. + ("OSError: [Errno 48] Address already in use", "python3 -m http.server 8000", 8000), + ("nc: Address already in use", "nc -l 127.0.0.1 47631", 47631), + ("java.net.BindException: Address already in use", "java -jar app.jar --server.port=9090", 9090), + (#"Error: Os { code: 48, kind: AddrInUse, message: "Address already in use" }"#, "PORT=4000 cargo run", 4000), + ("Error: bind: address already in use", "caddy file-server --listen localhost:2015", 2015), + ("bind: Address already in use", "docker-proxy -p 8088:80", 8088), + ]) + func findsThePortACommandFoundTaken(output: String, command: String, port: Int) { + #expect(PortConflict.port(inOutput: "Starting…\n" + output + "\n at Server.setupListenHandle (node:net:1908:16)", + command: command) == port) + } + + @Test func saysNothingWhenItCantTell() { + // Not about a port. + #expect(PortConflict.port(inOutput: "ls: nope: No such file or directory", command: "ls nope --port 3000") == nil) + #expect(PortConflict.port(inOutput: "error: the file is in use by another process", command: "cp a b") == nil) + // About one, but which? + #expect(PortConflict.port(inOutput: "OSError: [Errno 48] Address already in use", command: "python3 -m http.server") == nil) + #expect(PortConflict.port(inOutput: "bind: Address already in use", command: "relay 8000 9000") == nil) + #expect(PortConflict.port(inOutput: "Error: listen EADDRINUSE: address already in use :::99999", command: "node x.js") == nil) + } + + @Test func saysWhoHasThePort() { + let conflict = PortConflict(port: 3000, program: "node", pane: "A") + #expect(conflict.sentence() == "Port 3000 is in use by “node”") + #expect(conflict.sentence(place: "Tab 2 › left pane") == "Port 3000 is in use by “node” in Tab 2 › left pane") + #expect(conflict.sentence(stillHeld: false, place: "Tab 2") == "Port 3000 was in use by “node”") + } + + @Test func aTimelineRemembersIt() throws { + var timeline = CommandTimeline() + let id = timeline.begin(command: "npm run dev", directory: "/tmp", started: Date(timeIntervalSince1970: 0), block: nil) + timeline.finish(exitCode: 1, duration: 1, output: CapturedOutput(lines: ["Error: listen EADDRINUSE :::3000"])) + let conflict = PortConflict(port: 3000, program: "node", pane: "A") + timeline.setPortConflict(conflict, of: id) + #expect(timeline.entry(id: id)?.portConflict == conflict) + // Kept with the pane's commands, and read back; older ones saved without it still read. + let data = try JSONEncoder().encode(timeline) + #expect(try JSONDecoder().decode(CommandTimeline.self, from: data).entry(id: id)?.portConflict == conflict) + var plain = CommandTimeline() + plain.begin(command: "ls", directory: "/tmp", started: Date(timeIntervalSince1970: 0), block: nil) + let old = try JSONDecoder().decode(CommandTimeline.self, from: JSONEncoder().encode(plain)) + #expect(old.entries.first?.portConflict == nil) + } + + @Test func explainingIsToldWhoHasThePort() throws { + var entry = TimelineEntry(id: 1, command: "npm run dev", directory: "/tmp/web", started: Date(timeIntervalSince1970: 0), block: nil) + entry.exitCode = 1 + #expect(FailureReport(entry: entry, output: "EADDRINUSE")?.prompt.contains("Known:") == false) + entry.portConflict = PortConflict(port: 3000, program: "node", pane: "A") + let report = try #require(FailureReport(entry: entry, output: "EADDRINUSE")) + #expect(report.known == "Port 3000 is in use by “node”, a program running in one of this terminal’s panes.") + #expect(report.prompt.contains("Exit status: 1\nKnown: Port 3000 is in use by “node”, a program running in one of this terminal’s panes.\nOutput:\nEADDRINUSE")) + } +} diff --git a/Tests/CodecCoreTests/SplitLayoutTests.swift b/Tests/CodecCoreTests/SplitLayoutTests.swift index 7ac7267..4285202 100644 --- a/Tests/CodecCoreTests/SplitLayoutTests.swift +++ b/Tests/CodecCoreTests/SplitLayoutTests.swift @@ -114,6 +114,24 @@ struct SplitLayoutTests { #expect(SplitLayout.leaf(a).leaf(after: b) === a) } + @Test func saysWhereALeafIs() { + #expect(SplitLayout.leaf(a).position(of: a) == nil) + let sideBySide = SplitLayout.split(.horizontal, [.leaf(a), .leaf(b), .leaf(c)]) + #expect([a, b, c].map { sideBySide.position(of: $0) } == ["left", "middle", "right"]) + #expect(sideBySide.position(of: d) == nil) + let stacked = SplitLayout.split(.vertical, [.leaf(a), .leaf(b)]) + #expect([a, b].map { stacked.position(of: $0) } == ["top", "bottom"]) + // A pane on the left, and two stacked on the right. + let nested = SplitLayout.split(.horizontal, [.leaf(a), .split(.vertical, [.leaf(b), .leaf(c)])]) + #expect([a, b, c].map { nested.position(of: $0) } == ["left", "top right", "bottom right"]) + // Deeper on the same side, the outermost split along each axis says where. + let deep = SplitLayout.split(.horizontal, [.leaf(a), .split(.vertical, [.leaf(b), .split(.horizontal, [.leaf(c), .leaf(d)])])]) + #expect([c, d].map { deep.position(of: $0) } == ["bottom right", "bottom right"]) + let grid = SplitLayout.split(.vertical, [.leaf(a), .split(.horizontal, [.leaf(b), .leaf(c), .leaf(d)]), .leaf(Leaf("e"))]) + #expect(grid.position(of: c) == "middle") + #expect(grid.position(of: b) == "middle left") + } + @Test func sameShapeComparesLeavesByIdentityAndStructure() { let one = SplitLayout.leaf(a).splitting(a, with: b, axis: .horizontal) let same = SplitLayout.leaf(a).splitting(a, with: b, axis: .horizontal) diff --git a/Tests/CodecCoreTests/SystemTests.swift b/Tests/CodecCoreTests/SystemTests.swift index 42a2f11..9b17bd5 100644 --- a/Tests/CodecCoreTests/SystemTests.swift +++ b/Tests/CodecCoreTests/SystemTests.swift @@ -156,6 +156,16 @@ struct RunningProgramsTests { #expect(RunningPrograms.list(["make", "npm", "ssh"]) == "“make”, “npm” and “ssh”") } + @Test func saysWhatTheProgramsAreListeningOn() { + let node = [ListeningPort(port: 3000, program: "node"), ListeningPort(port: 9229, program: "node")] + // The server is named even when the shell only knows what started it. + #expect(RunningPrograms.programs(["npm"], listening: node) == ["npm", "node"]) + #expect(RunningPrograms.list(["npm"], listening: node) == "“npm” and “node” (listening on :3000 and :9229)") + #expect(RunningPrograms.list(["node"], listening: Array(node.prefix(1))) == "“node” (listening on :3000)") + #expect(RunningPrograms.list(["make", "nc", "ssh"], listening: [ListeningPort(port: 8080, program: "nc")]) + == "“make”, “nc” (listening on :8080) and “ssh”") + } + @Test func findsChildProcesses() throws { let child = Process() child.executableURL = URL(fileURLWithPath: "/bin/sleep") diff --git a/Tests/CodecUITests/ListeningPortsUITests.swift b/Tests/CodecUITests/ListeningPortsUITests.swift new file mode 100644 index 0000000..45712aa --- /dev/null +++ b/Tests/CodecUITests/ListeningPortsUITests.swift @@ -0,0 +1,401 @@ +import Testing +import Foundation +import AppKit +import SwiftUI +import CodecCore +@testable import CodecUI + +/// The ports a pane's programs listen on, with real shells and `nc` listening for real. +@Suite("Listening ports", .serialized, .timeLimit(.minutes(2)), + .enabled(if: FileManager.default.isExecutableFile(atPath: "/usr/bin/nc"))) +@MainActor +struct ListeningPortsUITests { + @Test func followsWhatAPanesProgramsListenOn() async throws { + let env = try TestEnvironment() + defer { env.tearDown() } + let pane = env.makePane(host: FakeHost()) + defer { pane.shutDown() } + let window = makeTestWindow() + window.contentView = pane.view + pane.view.layoutSubtreeIfNeeded() + var opened: [URL] = [] + pane.openURL = { opened.append($0) } + #expect(await waitUntil { pane.terminal.process.running }) + #expect(pane.session.listeningPorts.isEmpty) + + // In the background, so it isn't the command in front; the pane finds it by itself. + let port = try freePort() + pane.terminal.send(txt: "nc -l 127.0.0.1 \(port) 0 && widths[2] > widths[1]) + } + + @Test func theWindowMenuListsEveryPaneThatsListening() async throws { + let env = try TestEnvironment() + defer { env.tearDown() } + let menu = ListeningPortsMenu(directory: env.environment.panes) + #expect(menu.items().map(\.title) == ["No Listening Ports"]) + #expect(menu.items().first?.action == nil) + + // Two windows, a pane listening in each. + let front = FakeHost(), back = FakeHost() + front.windowTitle = "web" + back.windowTitle = "api" + back.place = "Tab 2 › left pane" + let panes = [env.makePane(host: front), env.makePane(host: back)] + defer { panes.forEach { $0.shutDown() } } + var opened: [URL] = [] + panes[1].openURL = { opened.append($0) } + let ports = [try freePort(), try freePort()] + for (pane, port) in zip(panes, ports) { + #expect(await waitUntil { pane.terminal.process.running }) + pane.terminal.send(txt: "nc -l 127.0.0.1 \(port) new(Listen => 1, LocalAddr => "127.0.0.1", LocalPort => $ARGV[0]) or die "bind: $!\n"; + sleep 30; + """.write(to: env.directory.appendingPathComponent("listen.pl"), atomically: true, encoding: .utf8) + let controller = TerminalWindowController(directory: env.directory.path, environment: env.environment) + controller.window?.setContentSize(NSSize(width: 1100, height: 600)) + defer { + controller.model.tabs.flatMap(\.panes).forEach { $0.shutDown() } + controller.window?.close() + } + let tab = try #require(controller.model.selected) + let server = tab.focused + #expect(await waitUntil { server.isAtCommandLine }) + #expect(controller.place(of: server) == "Tab 1") + + // A server in the first pane, in the foreground. + let port = try freePort() + server.terminal.send(txt: "nc -l 127.0.0.1 \(port)\r") + #expect(await waitUntil { server.session.listeningPorts.map(\.port) == [port] }) + #expect(server.session.listeningPorts.first?.foreground == true) + #expect(tab.toolTip.hasSuffix("\nListening on :\(port) (nc)")) + #expect(controller.allPanes.running.list == "“nc” (listening on :\(port))") + + controller.toggleCommandTimeline(nil) + controller.window?.layoutIfNeeded() + let sidebar = controller.timelineSidebar! + let runningRow = try #require(sidebar.rows.lastIndex { $0.entry?.isRunning == true }) + #expect(await waitUntil { + (sidebar.table.view(atColumn: 0, row: runningRow, makeIfNecessary: true) as? TimelineCell)?.shown.detail == "Listening on :\(port)" + }) + + // The same in a second pane: refused, and Codec knows who has the port. + controller.splitRight(nil) + let client = tab.focused + #expect(client !== server) + #expect(controller.place(of: server) == "Tab 1 › left pane") + #expect(await waitUntil { client.isAtCommandLine }) + + // The command palette knows the way to the server, and what it serves. + var opened: [URL] = [] + server.openURL = { opened.append($0) } + let commands = controller.paletteCommands() + let goTo = try #require(commands.first { $0.title == "Go to :\(port) — nc, Tab 1 › left pane" }) + goTo.action() + #expect(tab.focused === server) + try #require(commands.first { $0.title == "Open http://localhost:\(port) in the Browser" }).action() + #expect(opened.map(\.absoluteString) == ["http://localhost:\(port)"]) + tab.focus(client) + + client.terminal.send(txt: "perl listen.pl \(port)\r") + #expect(await waitUntil { client.timeline.entries.last?.portConflict != nil }) + let failed = try #require(client.timeline.entries.last) + #expect(failed.portConflict == PortConflict(port: port, program: "nc", pane: server.session.id.uuidString)) + let status = try #require(client.portConflictStatus(of: failed)) + #expect(status.text == "Port \(port) is in use by “nc” in Tab 1 › left pane") + #expect(status.holder === server) + + // Its row says so, with the way there. + #expect(sidebar.pane === client) + let row = try #require(sidebar.rows.firstIndex { $0.entry?.id == failed.id }) + #expect(await waitUntil { sidebar.tableView(sidebar.table, heightOfRow: row) == TimelineCell.heightSayingWhyAndWhere }) + let cell = try #require(sidebar.table.view(atColumn: 0, row: row, makeIfNecessary: true) as? TimelineCell) + #expect(cell.shown.detail == status.text) + #expect(cell.offersGoToPane) + #expect(sidebar.contextMenuItems(for: failed, row: row).map(\.title).contains("Go to Pane Listening on :\(port)")) + + // So does its output, and what's sent to explain it. + sidebar.showOutput(of: failed, row: row) + #expect(sidebar.outputViewer?.portConflict?.text == status.text) + #expect(sidebar.outputViewer?.explanation.report?.known.hasPrefix("Port \(port) is in use by “nc”") == true) + + cell.pressGoToPane() + #expect(tab.focused === server) + #expect(!sidebar.isShowingOutput) + + // Once the server is stopped, there's nowhere to go. + server.terminal.send(txt: "\u{03}") + #expect(await waitUntil { server.session.listeningPorts.isEmpty }) + let after = try #require(client.portConflictStatus(of: failed)) + #expect(after.text == "Port \(port) was in use by “nc”" && after.holder == nil) + tab.focus(client) + #expect(await waitUntil { sidebar.pane === client }) + let rowAfter = try #require(sidebar.rows.firstIndex { $0.entry?.id == failed.id }) + #expect(sidebar.tableView(sidebar.table, heightOfRow: rowAfter) == TimelineCell.heightSayingWhy) + let cellAfter = try #require(sidebar.table.view(atColumn: 0, row: rowAfter, makeIfNecessary: true) as? TimelineCell) + #expect(cellAfter.shown.detail == after.text && !cellAfter.offersGoToPane) + #expect(!sidebar.contextMenuItems(for: failed, row: rowAfter).map(\.title).contains { $0.hasPrefix("Go to Pane") }) + } + + @Test func aPortHeldInTheSamePaneOrAnotherWindowSaysSo() async throws { + let env = try TestEnvironment() + defer { env.tearDown() } + let host = FakeHost(), other = FakeHost() + other.place = "Tab 3 › top pane" + let pane = env.makePane(host: host), elsewhere = env.makePane(host: other) + defer { [pane, elsewhere].forEach { $0.shutDown() } } + var entry = TimelineEntry(id: 1, command: "npm run dev", directory: "/tmp", started: Date(), block: nil) + entry.exitCode = 1 + #expect(pane.portConflictStatus(of: entry) == nil) + + entry.portConflict = PortConflict(port: 3000, program: "node", pane: pane.session.id.uuidString) + // Nothing listens: it has let go of the port since. + #expect(pane.portConflictStatus(of: entry)?.text == "Port 3000 was in use by “node”") + pane.session.listeningPorts = [ListeningPort(port: 3000, program: "node")] + let here = try #require(pane.portConflictStatus(of: entry)) + #expect(here.text == "Port 3000 is in use by “node” in this pane" && here.holder == nil) + + entry.portConflict = PortConflict(port: 3000, program: "node", pane: elsewhere.session.id.uuidString) + elsewhere.session.listeningPorts = [ListeningPort(port: 3000, program: "node")] + let there = try #require(pane.portConflictStatus(of: entry)) + #expect(there.text == "Port 3000 is in use by “node” in another window, Tab 3 › top pane") + #expect(there.holder === elsewhere) + + // A pane that's gone, as after quitting and coming back. + entry.portConflict = PortConflict(port: 3000, program: "node", pane: UUID().uuidString) + #expect(pane.portConflictStatus(of: entry)?.holder == nil) + } +} diff --git a/Tests/CodecUITests/ModelTests.swift b/Tests/CodecUITests/ModelTests.swift index f58ff51..048f4d5 100644 --- a/Tests/CodecUITests/ModelTests.swift +++ b/Tests/CodecUITests/ModelTests.swift @@ -196,4 +196,25 @@ struct MainMenuTests { #expect(hidden.map(\.keyEquivalent) == [key(NSRightArrowFunctionKey), key(NSDownArrowFunctionKey)]) #expect(hidden.allSatisfy { $0.keyEquivalentModifierMask == [.command, .control] && $0.allowsKeyEquivalentWhenHidden }) } + + @Test func theViewMenuShowsListeningPorts() throws { + _ = NSApplication.shared + let entry = try #require(item(MainMenu.build(), path: ["View", "Listening Ports"])) + #expect(entry.keyEquivalent == "o" && entry.keyEquivalentModifierMask == [.command, .shift]) + #expect(entry.action == #selector(TerminalWindowController.togglePorts(_:))) + } + + @Test func theWindowMenuListsListeningPorts() throws { + let env = try TestEnvironment() + defer { env.tearDown() } + let ports = ListeningPortsMenu(directory: env.environment.panes) + let menu = MainMenu.build(listeningPorts: ports) + let submenu = try #require(item(menu, path: ["Window", "Listening Ports"])?.submenu) + // Filled in as it opens, by the object the app keeps for that. + #expect(submenu.delegate === ports) + submenu.delegate?.menuNeedsUpdate?(submenu) + submenu.update() + #expect(submenu.items.map(\.title) == ["No Listening Ports"]) + #expect(submenu.items.first?.isEnabled == false) + } } diff --git a/Tests/CodecUITests/ScreenshotTour.swift b/Tests/CodecUITests/ScreenshotTour.swift index 355e403..50e732f 100644 --- a/Tests/CodecUITests/ScreenshotTour.swift +++ b/Tests/CodecUITests/ScreenshotTour.swift @@ -47,18 +47,25 @@ struct ScreenshotTour { defer { Self.windowsSayTheyreVisible(false) } NSApplication.shared.setActivationPolicy(.regular) - try await hero(env, project: project) - try await intel(env, project: project) - try await history(env, project: project) - try await editor(env, project: project) - try await openFile(env, project: project) - try await listing(env, project: project) - try await branches(env, project: project) - try await themes(env, project: project) - try await usualDuration(env, project: project) - try await environments(env, project: project) - try await environmentList(env, project: project) - try await environmentSettings(env) + let shots: [(name: String, take: () async throws -> Void)] = [ + ("hero", { try await hero(env, project: project) }), + ("intel", { try await intel(env, project: project) }), + ("history", { try await history(env, project: project) }), + ("editor", { try await editor(env, project: project) }), + ("open-file", { try await openFile(env, project: project) }), + ("listing", { try await listing(env, project: project) }), + ("branches", { try await branches(env, project: project) }), + ("themes", { try await themes(env, project: project) }), + ("usual-duration", { try await usualDuration(env, project: project) }), + ("environments", { try await environments(env, project: project) }), + ("environment-list", { try await environmentList(env, project: project) }), + ("environment-settings", { try await environmentSettings(env) }), + ("ports", { try await ports(env, project: project, home: home) }), + ] + // Only the shots asked for, so a change to one feature doesn't retake every image: + // `CODEC_SHOT=ports make screenshots`, or several, `CODEC_SHOT=hero,ports`. + let only = ProcessInfo.processInfo.environment["CODEC_SHOT"]?.split(separator: ",").map(String.init) + for shot in shots where only?.contains(shot.name) != false { try await shot.take() } } /// Swaps `NSWindow.occlusionState` for one that's always visible, or back. @@ -223,6 +230,40 @@ struct ScreenshotTour { try await waitFor { pane.session.running == nil } } + /// A dev server running: its port in the status bar and on its row. Then the same command in a + /// second pane, refused the port: its row says which pane has it. Then the list of what's listening. + private func ports(_ env: TestEnvironment, project: URL, home: URL) async throws { + try makeDevServer(home) + let (controller, pane) = try await window(env, project: project, size: NSSize(width: 1360, height: 600)) + defer { close(controller) } + controller.toggleCommandTimeline(nil) + try await run("git status --short", in: pane) + try await settle(seconds: 0.3) + pane.terminal.send(txt: "npm run dev\r") + try await waitFor { pane.session.listeningPorts.first?.address != nil } + controller.window?.makeFirstResponder(pane.view.preferredResponder) + try await settle(seconds: 4) + try await capture(controller.window!, as: "ports") + + controller.splitRight(nil) + let right = try #require(controller.model.selected?.focused) + try await waitFor { right.isAtCommandLine } + try await settle(seconds: 0.3) + right.terminal.send(txt: "npm run dev\r") + try await waitFor { right.timeline.entries.last?.portConflict != nil && right.isAtCommandLine } + try await settle() + try await capture(controller.window!, as: "port-in-use") + + // Another server beside it, the first one given a name: the Ports tab lists both. + try await settle(seconds: 0.3) + right.terminal.send(txt: "PORT=8080 node api/server.js\r") + try await waitFor { right.session.listeningPorts.first?.address != nil } + pane.name(try #require(pane.session.listeningPorts.first), as: "Storefront") + controller.togglePorts(nil) + try await settle(seconds: 3) + try await capture(controller.window!, as: "ports-list") + } + /// Going into a project with a Python environment and mise tools: the question whether to /// activate it, and the versions in the status bar, one of them not installed. private func environments(_ env: TestEnvironment, project: URL) async throws { @@ -461,6 +502,66 @@ struct ScreenshotTour { try #require(process.terminationStatus == 0, "\(command) failed") } + /// Stand-ins for `npm run dev` and the Node server it starts: a program called `node` that listens + /// for real and says where, as a server does, or fails the way Node does when the port is taken. + /// It's compiled here, as a program goes by its file's own name, whatever links to it. + private func makeDevServer(_ home: URL) throws { + let bin = home.appendingPathComponent("bin") + try FileManager.default.createDirectory(at: bin, withIntermediateDirectories: true) + let source = home.appendingPathComponent("server.c") + try #""" + #include + #include + #include + #include + + int main(int argc, char **argv) { + int port = getenv("PORT") ? atoi(getenv("PORT")) : argc > 1 ? atoi(argv[1]) : 3000; + int descriptor = socket(AF_INET, SOCK_STREAM, 0); + struct sockaddr_in address = {0}; + address.sin_family = AF_INET; + address.sin_port = htons(port); + address.sin_addr.s_addr = inet_addr("127.0.0.1"); + if (bind(descriptor, (struct sockaddr *)&address, sizeof address) != 0 || listen(descriptor, 8) != 0) { + printf("node:events:497\n throw er; // Unhandled 'error' event\n ^\n\n" + "Error: listen EADDRINUSE: address already in use 127.0.0.1:%d\n" + " at Server.setupListenHandle [as _listen2] (node:net:1908:16)\n" + " at listenInCluster (node:net:1965:12)\n" + " at Server.listen (node:net:2067:7) {\n" + " code: 'EADDRINUSE',\n syscall: 'listen',\n address: '127.0.0.1',\n port: %d\n}\n\n" + "Node.js v24.12.0\n", port, port); + return 1; + } + printf("Server ready on http://localhost:%d\n", port); + fflush(stdout); + for (;;) pause(); + } + + """#.write(to: source, atomically: true, encoding: .utf8) + try shell("cc -o '\(bin.path)/node' '\(source.path)' && rm '\(source.path)'", in: home) + // A port nothing else on this Mac has, so the first server gets it. + let port = [3000, 4000, 5173, 8080, 8000].first { port in + let descriptor = socket(AF_INET, SOCK_STREAM, 0) + defer { Darwin.close(descriptor) } + var address = sockaddr_in() + address.sin_len = UInt8(MemoryLayout.size) + address.sin_family = sa_family_t(AF_INET) + address.sin_port = in_port_t(port).bigEndian + address.sin_addr.s_addr = inet_addr("127.0.0.1") + return withUnsafePointer(to: &address) { + $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { bind(descriptor, $0, socklen_t(MemoryLayout.size)) == 0 } + } + } ?? 3000 + let npm = bin.appendingPathComponent("npm") + try #""" + #!/bin/sh + printf '\n> storefront@1.4.0 dev\n> node server.js\n\n' + exec "$(dirname "$0")/node" \#(port) + + """#.write(to: npm, atomically: true, encoding: .utf8) + try FileManager.default.setAttributes([.posixPermissions: 0o755], ofItemAtPath: npm.path) + } + /// A project with a uv environment and tools from mise, and a `mise` that reports them there. private func makeStorefront(_ home: URL) throws { let store = home.appendingPathComponent("Developer/storefront") @@ -548,6 +649,12 @@ struct ScreenshotTour { try (zshrc + "\n").write(to: home.appendingPathComponent(".zshrc"), atomically: true, encoding: .utf8) try makeStorefront(home) try shell("git clone --quiet '\(Self.repository.path)' '\(project.path)'", in: home) + // The clone is on whatever branch this checkout is on. Taken from a feature branch, as the shots + // of a new feature are, that branch would show in `git log`: it goes by `main` instead. + try shell(""" + b=$(git branch --show-current); [ "$b" = main ] || \ + { git branch -M main && git update-ref -d "refs/remotes/origin/$b" && git remote set-head origin main; } + """, in: project) try shell(""" git config user.name 'Solid Snake' && git config user.email snake@example.com && \ git branch feature/intel-folders && git branch fix/history-ranking && git branch release/1.2 && \ diff --git a/Tests/CodecUITests/TestSupport.swift b/Tests/CodecUITests/TestSupport.swift index a54609b..779406e 100644 --- a/Tests/CodecUITests/TestSupport.swift +++ b/Tests/CodecUITests/TestSupport.swift @@ -59,6 +59,31 @@ final class FakeHost: PaneHost { func explainFailure(of entry: TimelineEntry, in pane: Pane) { explained.append(entry) } private(set) var openedFiles: [URL] = [] func openFile(_ url: URL, from pane: Pane) { openedFiles.append(url) } + /// Where the host says its panes are. + var place: String? = "Tab 1" + func place(of pane: Pane) -> String? { place } + private(set) var revealed: [Pane] = [] + func reveal(_ pane: Pane) { revealed.append(pane) } + var windowTitle: String? +} + +/// A TCP port nothing is listening on, as far as can be told: the system picked it a moment ago. +func freePort() throws -> Int { + let descriptor = socket(AF_INET, SOCK_STREAM, 0) + guard descriptor >= 0 else { throw POSIXError(.EMFILE) } + defer { close(descriptor) } + var address = sockaddr_in() + address.sin_len = UInt8(MemoryLayout.size) + address.sin_family = sa_family_t(AF_INET) + address.sin_addr.s_addr = inet_addr("127.0.0.1") + var length = socklen_t(MemoryLayout.size) + let bound = withUnsafeMutablePointer(to: &address) { + $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { pointer in + bind(descriptor, pointer, length) == 0 && getsockname(descriptor, pointer, &length) == 0 + } + } + guard bound else { throw POSIXError(.EADDRINUSE) } + return Int(UInt16(bigEndian: address.sin_port)) } /// Never reports anything, so tests don't depend on the machine's load. diff --git a/docs/commands-sidebar.md b/docs/commands-sidebar.md index 1b62092..dbe7707 100644 --- a/docs/commands-sidebar.md +++ b/docs/commands-sidebar.md @@ -4,7 +4,7 @@ You tried a few things, went on for a while, and now you want to see what happened earlier. The Commands sidebar is that pane's story: every command it ran, with how it went and what it printed. -Open it with ⇧⌘L, or the sidebar button at the right end of the tab bar. It follows the focused pane, like the file tree. +Open it with ⇧⌘L, or the sidebar button at the right end of the tab bar. It follows the focused pane, like the file tree. It shares the right sidebar with the **Ports** tab (⇧⌘O), which lists [what's listening](prompt-and-status-bar.md#every-port-in-one-place) in every pane. ## What it shows @@ -12,7 +12,7 @@ Commands are listed oldest first, under the folder they ran in. When a [Python e - a green or red dot for whether it worked (pulsing while it runs), - when it ran and how long it took, -- the last line it printed (`Build complete!`, `3 tests failed`), or the exit status of a failed one. +- the last line it printed (`Build complete!`, `3 tests failed`), or the exit status of a failed one. While a command is running a server, its row says so instead: `Listening on :3000` (see [listening ports](prompt-and-status-bar.md#listening-ports)). ## How long it usually takes @@ -56,13 +56,25 @@ When the fix is a command (`git push --set-upstream origin feature/login`, `npm Turn it off in Settings › Shell › Offer to explain failed commands. +## Port already in use + +You start the dev server and it dies with `EADDRINUSE`: something already has the port, and it's usually the same server, left running in a pane you forgot. Codec knows what [each pane's programs listen on](prompt-and-status-bar.md#listening-ports), so it can say which. + +![npm run dev refused its port: the row says Node has it in Tab 1's left pane, with Go to Pane](images/port-in-use.png) + +When a command fails saying the address or port is in use, and a program in one of Codec's panes holds that port, the command's row says so: "Port 3000 is in use by “node” in Tab 2 › left pane", with **Go to Pane**, which brings that pane to the front, in another window if that's where it is. The output viewer says the same, and so does right-click › Go to Pane Listening on :3000. [Explain](#why-did-it-fail) is told too, so its answer starts from who has the port rather than guessing. + +- The port comes from the error (`address already in use :::3000`, `bind(2) for "127.0.0.1" port 3000`), or from the command when the error names none (`python -m http.server 8000`). +- Once the other program lets go of the port, the row says it *was* in use, and there's no pane to go to. +- A port held by something Codec didn't start (another app, a container, a system service) gets no such line: the row shows the command's last line, as usual. + ## Filtering The filter field searches commands and what they printed. A row shows the line that matched, and going to it scrolls to that line. ⚠ shows failed commands only; the bin clears the list (the commands are still tracked, just hidden). ## Right-click -Go to Command, Show Output, Explain Failure (failed commands), Save to Intel…, Copy Command, Copy Output, Select Output, Insert Command, Run Again, Copy Folder Path. +Go to Command, Show Output, Explain Failure (failed commands), Go to Pane Listening on… (a command that found its [port taken](#port-already-in-use)), Save to Intel…, Copy Command, Copy Output, Select Output, Insert Command, Run Again, Copy Folder Path. ## Saving a command for later diff --git a/docs/development.md b/docs/development.md index a81a8f9..51a1dbf 100644 --- a/docs/development.md +++ b/docs/development.md @@ -19,7 +19,7 @@ Three targets, compiled in Swift 6 language mode (strict concurrency): | Target | What's in it | |---|---| -| `CodecCore` | Logic with no UI, all of it unit-tested: the split layout tree and pane geometry, shell integration scripts and environment, integration event parsing, bell and exit policies, preferences, git branch lookup and switching, the changed lines of a file (a line diff), smart selection, command block tracking, each pane's command timeline and kept output, Intel files and their variables, syntax highlighting, Markdown rendering, file types and their colors (for the file tree and `ls`), command history ranking and storage, process inspection, system sampling, versions and release lookup for the update check, and downloading, checking and putting a new version in place. | +| `CodecCore` | Logic with no UI, all of it unit-tested: the split layout tree and pane geometry, shell integration scripts and environment, integration event parsing, bell and exit policies, preferences, git branch lookup and switching, the changed lines of a file (a line diff), smart selection, command block tracking, each pane's command timeline and kept output, Intel files and their variables, syntax highlighting, Markdown rendering, file types and their colors (for the file tree and `ls`), command history ranking and storage, process inspection (what's running under a shell, and the ports it listens on), system sampling, versions and release lookup for the update check, and downloading, checking and putting a new version in place. | | `CodecUI` | AppKit and SwiftUI: app delegate and menus, window controller, tabs, panes, chrome, sidebars, editor, palette, settings, sounds, notifications, the update check and installing. | | `Codec` | The executable; calls `CodecApp.run()`. | @@ -46,6 +46,6 @@ Terminal emulation is provided by [SwiftTerm](https://github.com/migueldeicaza/S ## Screenshots -The images in `docs/images` come from `make screenshots`, which runs `Tests/CodecUITests/ScreenshotTour.swift`: real Codec windows, a real zsh, and a fresh clone of this repository with a few demo changes, branches, history and Intel items, all in a throwaway home folder under `.build`, so none of your own history, Intel or files show up. +The images in `docs/images` come from `make screenshots`, which runs `Tests/CodecUITests/ScreenshotTour.swift`: real Codec windows, a real zsh, and a fresh clone of this repository with a few demo changes, branches, history and Intel items, all in a throwaway home folder under `.build`, so none of your own history, Intel or files show up. `CODEC_SHOT=ports make screenshots` retakes one shot alone, and `CODEC_SHOT=hero,ports` several (the names are in the tour's list), which keeps a change to one feature from touching every image. Windows open on screen while it runs (about a minute); leave the Mac alone, and unlocked, until it's done. When a feature's look changes, retake them and commit the new images with it. diff --git a/docs/images/commands.png b/docs/images/commands.png index 6dce0e2733d4fcba0f45b892a4e99a58d4376d14..79950839f35268ed5bee72facb93777a58698608 100644 GIT binary patch literal 916096 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�&rR$B;DC1fyAo4sWkRg6{c(b?$rH$H&on0^aI{N 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