Server.split(_:direction:size:startDirectory:environment:shell:)
Splits one pane, returning the pane that appeared.
Source and package
- Qualified name
-
Server.split(_: direction: size: start Directory: environment: shell:) - Declared in
Server- Package
- libtmux-swift
- Source
- Sources/LibTmux/Creation.swift
- Other languages
- Perlmethod Erlang PowerShell Julia Elixir Haskell Common Lisp PythonRubyLuaTypeScriptRustGoJavaC# C++ KotlinScalaOCaml F# Clojure
-
Description#
The same call as
splitWindow(_:direction:size:startDirectory:)with the ambiguity removed: a window has an active pane and tmux splits that one, which is what you want interactively and rarely what you want when building a layout.environmentandshellreach only this one split, the same as tmux's own-eand trailing shell-command onsplit-window.Examples#
Split a specific pane. Split the fixture's pane to the right and give the new pane 40 percent of its width. Address the pane itself so a different active pane cannot change the target. 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 ApiSplitPane {static func main() async {do {try await withTmuxServer { @Sendable server inguard let original = try await server.panes().first else {throw ExampleError.paneMissing}let created = try await server.split(original,direction: .right,size: .percentage(40))let panes = try await server.panes().filter { $0.windowID == original.windowID }print("Panes in window: \(panes.count)")print("Same window: \(created.windowID == original.windowID)")}} catch {FileHandle.standardError.write(Data("Example failed: \(error)\n".utf8))exit(EXIT_FAILURE)}}enum ExampleError: Error {case paneMissing}}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:
Panes in window: 2Same window: true
tmux command#
The tmux commands behind split(_:direction:size:startDirectory:environment:shell:).
tmux C API#
The C declarations in tmux that implement these commands.
Each path starts at a function a command runs, which is degree 1. The degree counts steps from there along the path, and each step is a call or a reference: degree 2 is reached from that function, degree 3 from the next, and so on.
Split a window
- 1
cmd_split_window_exec - references → 2
spawn_pane - calls → 3
window_add_pane - calls → 4
window_pane_create
In other ports#
Split a pane in two
| 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 |
| C++ | no direct pane target; Window.split splits the active pane |
| 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, Common Lisp or F#.