Core Library0.xAPI Reference

Choose documentation 3

latest

Current version

latest
English

Early release libtmux is released, and its APIs may still change between releases. This site's structure and URLs may change too.

method libtmux-rs latest

Server.sessions

List every session on the server, preserving any failure.

Source and package
Qualified name
libtmux::server::Server::sessions
Module
server
Declared in
Server
Package
libtmux
Source
crates/libtmux/src/server/discovery.rs
Other languages
Perlmethod Erlangfunction PowerShellcmdlet Juliafunction Elixirfunction Haskell Common Lispfunction PythonRubyLuaTypeScriptGoJavaC#C++SwiftKotlinScalaOCamlfunction F#function Clojurefunction
pub async fn sessions(&self) -> Result<Vec<Session>, Error>

Description#

Errors

Returns an error when the list command cannot run, or when its output cannot be decoded into snapshots.

Examples#

let guard = libtmux::test::TestServer::new().await?;
guard.session("work").await?;
let sessions = guard.server().sessions().await?;
assert_eq!(sessions.len(), 1);
assert!(sessions[0].id().to_string().starts_with('$'));
guard.shutdown().await?;

List sessions, windows and panes. Read each collection and its relations, then inspect a hierarchy snapshot. Use Rust 1.85 or newer with Cargo, and tmux 3.3a or newer, on a Unix system. In an empty directory, create a project and add the published crates:

Terminal window
$ cargo init --name libtmux-api-example &&
cargo add libtmux@0.1.2 tempfile@3.20 &&
cargo add tokio@1.40 --features macros,rt,time

Replace src/main.rs with this complete program. It owns a private tmux socket, applies a ten-second task deadline, and reports both task and cleanup errors. Server::kill() stops its daemon; Server::shutdown() closes its client executor. Successful cleanup removes the temporary directory even when the task fails. View source

//! List sessions, windows and panes, then read their hierarchy.
use std::error::Error;
use std::time::Duration;
use libtmux::{NewSessionOptions, NewWindowOptions, Server};
type ExampleError = Box<dyn Error>;
fn check(condition: bool, message: &str) -> Result<(), ExampleError> {
if condition {
Ok(())
} else {
Err(message.into())
}
}
async fn demonstrate(server: &Server) -> Result<(), ExampleError> {
let session = server
.new_session(
NewSessionOptions::new("work")
.window_name("editor")
.command("cat"),
)
.await?;
session
.new_window(NewWindowOptions::new("logs").command("cat"))
.await?;
let sessions = server.sessions().await?;
let windows = server.windows().await?;
let panes = server.panes().await?;
check(sessions.len() == 1, "expected one session")?;
check(windows.len() == 2, "expected two windows")?;
check(panes.len() == 2, "expected two panes")?;
check(
session.windows().await?.len() == 2,
"expected two session windows",
)?;
check(
session.panes().await?.len() == 2,
"expected two session panes",
)?;
for window in &windows {
check(
window.session_id() == session.id(),
"window belongs to another session",
)?;
check(
window.panes().await?.len() == 1,
"expected one pane per window",
)?;
}
let hierarchy = server.hierarchy().await?;
let branch = hierarchy.first().ok_or("hierarchy has no session")?;
check(
branch.session.id() == session.id(),
"hierarchy session differs",
)?;
check(branch.windows.len() == 2, "expected two hierarchy windows")?;
check(
branch.windows.iter().all(|window| window.panes.len() == 1),
"hierarchy panes differ",
)?;
println!("listings: 1 session, 2 windows, 2 panes");
Ok(())
}
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), ExampleError> {
let root = std::path::Path::new("/tmp/libtmux-rs-dev");
std::fs::create_dir_all(root)?;
let directory = tempfile::Builder::new()
.prefix("api-listings-")
.tempdir_in(root)?;
std::fs::write(
directory.path().join("owner"),
std::process::id().to_string(),
)?;
let server = Server::builder()
.socket_path(directory.path().join("tmux.sock"))
.config_file("/dev/null")
.default_timeout(Duration::from_secs(5))
.build()?;
let outcome = tokio::time::timeout(Duration::from_secs(10), demonstrate(&server)).await;
// Stop the owned daemon before closing the client executor.
let killed = server.kill().await;
let closed = server.shutdown().await;
let cleanup_failed = killed.is_err() || closed.is_err();
let mut failures = Vec::new();
match outcome {
Ok(Ok(())) => {}
Ok(Err(error)) => failures.push(format!("example failed: {error}")),
Err(error) => failures.push(format!("example deadline: {error}")),
}
if let Err(error) = killed {
failures.push(format!("daemon cleanup: {error}"));
}
if let Err(error) = closed {
failures.push(format!("executor cleanup: {error}"));
}
if cleanup_failed {
let retained = directory.keep();
failures.push(format!("inspect retained directory {}", retained.display()));
} else if let Err(error) = directory.close() {
failures.push(format!("directory cleanup: {error}"));
}
if failures.is_empty() {
Ok(())
} else {
Err(failures.join("; ").into())
}
}

Run the consumer. Success exits with status 0; setup, operation, deadline or cleanup failures exit unsuccessfully and print diagnostics to stderr:

Terminal window
$ cargo run --quiet

Expected output:

listings: 1 session, 2 windows, 2 panes

Guides#

Pages that discuss sessions.

Topics

In other ports#

List the server’s sessions

Equivalents of List the server’s sessions in other languages
Language Equivalent
Python libtmux.Server.sessions
Ruby LibTmux::Server#list_sessions
Lua libtmux.Snapshot.sessions
PowerShell LibTmux\Get-TmuxSession Acquires sessions through -Server, with optional exact -Id and -Name selectors.
Julia LibTmux.sessions sessions reads membership from a captured Snapshot without contacting tmux.
Erlang tmux_snapshot:sessions/1 Returns captured rows without tmux I/O.
Elixir LibTmux.Snapshot.sessions/1 Returns a Selection of captured sessions without contacting tmux.
Haskell No public Haskell equivalent is implemented; the current modules expose scalar values and version parsing.
Common Lisp libtmux:sessions sessions returns a fresh vector from a captured snapshot without contacting tmux.
TypeScript server.Server.sessions
Go tmux.Server.Sessions
Java io.github.libtmux.Server.sessions
Clojure libtmux.core/sessions! Acquires a new captured graph and returns its session maps; acquisition failure throws.
Kotlin io.github.libtmux.kotlin.Server.sessions
Scala io.github.libtmux.scaladsl.Server.sessions
C# LibTmux.Server.Sessions
F# LibTmux.FSharp.Server.sessions Builds a deferred session query on LibTmux.Server. Query.list acquires the results; it does not traverse the handle’s captured membership.
C++ libtmux::Server::sessions
Swift Server.sessions()
OCaml Libtmux.Snapshot.sessions Reads an immutable array of already captured sessions without I/O.
Perl LibTmux::Snapshot::sessions Reads captured membership locally, preserving order.
Esc

Type to search.

Reference previewOpen reference