Server.capture(_:includingHistory:)
The pane's visible contents, one line per row. The source read is capped at 1 MiB; use incremental capture for a large scrollback instead of collecting its entire history.
Source and package
-
Description#
- Parameters:
- pane: the pane to read.
- includingHistory: reads the scrollback too, from its start.
Examples#
Send input and capture its output. Type a printf command literally, send Enter as a key, and wait for its output. Compare a complete output row so terminal echo cannot satisfy the check. The five-second deadline bounds the example; the 25-millisecond pause avoids busy polling. Use Swift 6.2 or newer and tmux 3.3a or newer on Linux or macOS. In an empty directory, save this consumer package as
Package.swift; SwiftPM fetches the library from release 0.1.1:// swift-tools-version: 6.2import PackageDescriptionlet package = Package(name: "ApiExample",platforms: [.macOS(.v13)],dependencies: [.package(url: "https://github.com/libtmux/libtmux-swift.git", from: "0.1.1")],targets: [.executableTarget(name: "ApiExample",dependencies: [.product(name: "LibTmux", package: "libtmux-swift"),.product(name: "TmuxFixture", package: "libtmux-swift"),],path: "Sources")])Create a
Sourcesdirectory and save this complete program asSources/Example.swift. ThewithTmuxServerfixture owns a private tmux server and stops it after success or failure. Ordinary application code usesServerfor its own socket; these examples use the fixture until their setup moves to ordinary server objects. View sourceimport Foundationimport LibTmuximport TmuxFixture@mainstruct ApiCapture {static func main() async {do {try await withTmuxServer { @Sendable server inguard let pane = try await server.panes().first else {throw ExampleError.paneMissing}let marker = "libtmux-swift-api"try await server.sendKeys(["printf '%s\\n' \(marker)"], to: pane, literally: true)try await server.sendKeys(["Enter"], to: pane)let clock = ContinuousClock()let deadline = clock.now.advanced(by: .seconds(5))while clock.now < deadline {let lines = try await server.capture(pane, includingHistory: true)if lines.contains(marker) {print(marker)return}try await Task.sleep(for: .milliseconds(25))}throw ExampleError.outputTimedOut}} catch {FileHandle.standardError.write(Data("Example failed: \(error)\n".utf8))exit(EXIT_FAILURE)}}enum ExampleError: Error {case paneMissingcase outputTimedOut}}Build and run the saved program. An operation or cleanup error produces a failing exit status. Set
LIBTMUX_TMUX_BINto an absolute executable path to select a tmux version:Terminal window $ swift run ApiExampleExpected output:
libtmux-swift-api - Parameters:
tmux command#
The tmux commands behind capture(_:includingHistory:).
tmux C API#
The C declarations in tmux that implement these commands.
In other ports#
Read a pane’s visible contents
| Language | Equivalent |
|---|---|
| Python | libtmux |
| Ruby | Lib |
| Lua | libtmux |
| Erlang | tmux |
| Haskell | No public Haskell equivalent is implemented; the current modules expose scalar values and version parsing. |
| TypeScript | pane |
| Rust | pane |
| Go | tmux |
| Java | io |
| Clojure | libtmux |
| Kotlin | io |
| Scala | io |
| C# | Lib |
| F# | Lib |
| C++ | libtmux:: |
| OCaml | Libtmux |
| Perl | Lib Explicit Server operation. Captured entities remain local observations; use a new snapshot to observe changes. |
No equivalent is recorded in PowerShell, Julia, Elixir or Common Lisp.