Core LibraryunreleasedAPI Reference

Choose documentation 2

latest

Current version

latest
English

Unreleased libtmux has not been released. Its API may change during development. This site's structure and URLs may change too.

function libtmux-ocaml latest

Client.move_window_at

Move the source session's current link at from_index. Destination collisions fail.

Source and package
Qualified name
Libtmux_unix.Client.move_window_at
Module
Libtmux_unix
Declared in
Client
Package
libtmux-unix
Source
unix/libtmux_unix.mli
Other languages
Perlmethod Erlang PowerShell Julia Elixir Haskell Common Lisp Python Ruby LuaTypeScriptRustGoJavaC#C++Swift Kotlin Scala F# Clojure
val move_window_at : ?cancel:Cancellation.t -> t -> Libtmux.Session.target -> from_index:int -> session:Libtmux.Session.target -> index:int -> (unit, Libtmux.Error.t) result

Public owner: Libtmux_unix

Examples#

Move a window between sessions. This complete program creates a private daemon, checks its result and closes its clients. Use OCaml 5.5.2 on Linux with tmux 3.3a through 3.8. Run it from the source checkout after following the installation guide. View source

open Libtmux
module Client = Libtmux_unix.Client
module Workspace = Libtmux_unix.Workspace
module Config = Libtmux_workspace.Config
module Plan = Libtmux_workspace.Plan
module Execution = Libtmux_workspace.Execution
let get = function
| Ok value -> value
| Error error -> failwith (Format.asprintf "%a" Error.pp error)
let move_window client (initial : Created.t) spawn =
let moving =
get (Client.create_window client initial.session ~name:"build" ~spawn)
in
let destination =
get
(Client.create_session client ~name:"destination" ~window_name:"landing"
~spawn ())
in
get
(Client.move_window_at client initial.session
~from_index:moving.window_index ~session:destination.session ~index:7);
let window =
Snapshot.find_window
(get (Client.capture client))
(Window.Target.id moving.window)
|> Option.get
in
let link =
Query.exactly_one (Iarray.to_seq (Window.links window)) |> Result.get_ok
in
assert (Window_link.index link = 7);
assert (
Session.Id.equal
(Session.id (Window_link.session link))
(Session.Target.id destination.session));
Printf.printf "moved: %s at %d\n" (Window.name window)
(Window_link.index link)
let with_demo binary use =
let directory = Filename.temp_dir "libtmux-ocaml-showcase-" "" in
Fun.protect
~finally:(fun () ->
Sys.readdir directory
|> Array.iter (fun name -> Sys.remove (Filename.concat directory name));
Unix.rmdir directory)
(fun () ->
let socket = Filename.concat directory "server" in
(* Give this private daemon a lifetime even if startup fails. *)
let config_file = Filename.concat directory "tmux.conf" in
Out_channel.with_open_text config_file (fun output ->
output_string output "set-option -s exit-unattached on\n");
let wrapper = Filename.concat directory "tmux" in
Out_channel.with_open_text wrapper (fun output ->
Printf.fprintf output "#!/bin/sh\nexec %s -f %s \"$@\"\n"
(Filename.quote binary)
(Filename.quote config_file));
Unix.chmod wrapper 0o700;
let channel = Unix.open_process_args_in binary [| binary; "-V" |] in
let version =
Fun.protect
~finally:(fun () ->
if Unix.close_process_in channel <> Unix.WEXITED 0 then
failwith "tmux version discovery failed")
(fun () -> String.trim (input_line channel))
in
if not (String.starts_with ~prefix:"tmux " version) then
failwith "invalid tmux version";
let version = String.sub version 5 (String.length version - 5) in
let ready = Filename.concat directory "ready.txt" in
Out_channel.with_open_text ready (fun output ->
output_string output "showcase ready\n");
let spawn =
Spawn.make (Exec { program = "/bin/cat"; args = [ "-u"; ready; "-" ] })
in
let config =
match
Config.make ~directory ~session:"showcase"
[ Config.window ~name:"editor" [ Config.pane ~spawn () ] ]
with
| Ok value -> value
| Error error -> failwith (Format.asprintf "%a" Config.pp_error error)
in
let plan =
match
Plan.make
~endpoint:(Endpoint.socket_path socket)
~version ~observed:None config
with
| Ok value -> value
| Error error -> failwith (Format.asprintf "%a" Plan.pp_error error)
in
let operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) in
Fun.protect
~finally:(fun () -> get (Workspace.close operation))
(fun () ->
let receipt = get (Workspace.await operation) in
if receipt.status <> Execution.Succeeded then
failwith "workspace setup failed";
let client = Option.get (Workspace.client operation) in
let initial = List.hd (Iarray.get receipt.steps 0).created in
Printf.printf "socket=%s\n%!" socket;
let pane =
Snapshot.find_pane
(get (Client.capture client))
(Pane.Target.id initial.pane)
|> Option.get
in
ignore
(get
(Client.wait_for_text ~timeout:0.5 client pane
~text:"showcase ready"));
use client initial spawn))
let () =
let binary = if Array.length Sys.argv = 2 then Sys.argv.(1) else "tmux" in
with_demo binary move_window

Run the recorded entry point:

Terminal window
$ opam exec -- dune exec examples/showcase_move_window.exe -- tmux

Expected outcome line, after the temporary socket path:

moved: build at 7

tmux command#

The tmux commands behind move_window_at.

tmux C API#

The C declarations in tmux that implement these commands.

In other ports#

Move a window to another session or index

Equivalents of Move a window to another session or index in other languages
Language Equivalent
Python libtmux.Window.move_window
Lua libtmux.WindowLink:move
Erlang tmux_window_link:move/3
Haskell No public Haskell equivalent is implemented; the current modules expose scalar values and version parsing.
TypeScript window.Window.move
Rust window.Window.move_to
Go tmux.Window.Move
Java io.github.libtmux.Window.moveTo
C# LibTmux.Window.MoveAsync
C++ libtmux::Window::move_to
Swift Server.move(_:to:at:)
Perl LibTmux::Server::move_window Requires an explicit WindowLink or session_id:index context; a physical window alone does not select a session placement.

No equivalent is recorded in Ruby, PowerShell, Julia, Elixir, Common Lisp, Clojure, Kotlin, Scala or F#.

Esc

Type to search.

Reference previewOpen reference