Core LibraryalphaExamples

Choose documentation 3

latest

Current version

latest
English

Prerelease This site documents an alpha of libtmux. Its structure, URLs and APIs are subject to change.

Edit this page on GitHub

Attach and send keys

Get a session handle, send a command to a pane, and capture output. These examples use libtmux from your program; to attach your terminal interactively, see Attaching to tmux.

The examples include setup, error handling, and cleanup. Source and verification identifies their files and checks.

package io.github.libtmux.examples;
import io.github.libtmux.Layout;
import io.github.libtmux.Pane;
import io.github.libtmux.Server;
import io.github.libtmux.ServerConfig;
import io.github.libtmux.ServerEndpoint;
import io.github.libtmux.Session;
import io.github.libtmux.Window;
import io.github.libtmux.exception.ServerUnavailableException;
import java.nio.file.Path;
import java.util.Optional;
/**
* Lays out a session the way you would set one up by hand before starting work.
*
* <pre>{@code
* java BuildAWorkspace.java /tmp/libtmux-java-dev/demo/s
* }</pre>
*/
public final class BuildAWorkspace {
private BuildAWorkspace() {}
public static void main(String[] args) {
System.out.println(run(Path.of(args.length > 0 ? args[0] : "/tmp/libtmux-java-dev/demo/s")));
}
/** Separated from {@code main} so the suite can run exactly what a reader runs. */
public static String run(Path socket) {
ServerConfig config = ServerConfig.builder()
.endpoint(ServerEndpoint.socketPath(socket))
.configFile(Path.of("/dev/null"))
.build();
// Closing a server closes this client. The tmux server, and the session, outlive the program
// — which is the whole point of tmux and the reason nothing here kills it.
try (Server server = Server.open(config)) {
// One read decides and answers. An absent daemon means the name cannot be taken, so
// that specific failure is the other way this resolves to "not found".
Optional<Session> existing;
try {
existing = server.session("work");
} catch (ServerUnavailableException absent) {
existing = Optional.empty();
}
Session session = existing.orElseGet(() -> server.newSession("work"));
Window editor = session.newWindow(window -> window.named("editor").detached());
Pane shell = editor.split(split -> split.toRight());
shell.sendLine("git status --short");
editor.selectLayout(Layout.MAIN_VERTICAL);
return "session " + session.name() + " has "
+ session.refresh().windows().size() + " windows";
}
}
}

Finding an existing session instead

For a script that runs repeatedly, look up a session before creating it. Attaching to tmux shows that pattern, and Filtering and querying, in practice covers absent and ambiguous matches.

Where this comes from

Source: examples/src/main/java/io/github/libtmux/examples/BuildAWorkspace.java

In this page: read whole from the file

Checked by: run against real tmux by the examples module’s own ExamplesRunTest

Source inclusion

A file="..." fence reads the named source during the site build. Hand-quoted excerpts are copies; their source files and regions are listed above.

Esc

Type to search.

Reference preview Open reference