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 -> from_index:int -> session:Libtmux.target .Session -> index:int -> (unit, Libtmux.target .Error ) result.t -
Public owner:
Libtmux_unixExamples#
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 Libtmuxmodule Client = Libtmux_unix.Clientmodule Workspace = Libtmux_unix.Workspacemodule Config = Libtmux_workspace.Configmodule Plan = Libtmux_workspace.Planmodule Execution = Libtmux_workspace.Executionlet 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)inlet destination =get(Client.create_session client ~name:"destination" ~window_name:"landing"~spawn ())inget(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.getinlet link =Query.exactly_one (Iarray.to_seq (Window.links window)) |> Result.get_okinassert (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-" "" inFun.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" inOut_channel.with_open_text config_file (fun output ->output_string output "set-option -s exit-unattached on\n");let wrapper = Filename.concat directory "tmux" inOut_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" |] inlet version =Fun.protect~finally:(fun () ->if Unix.close_process_in channel <> Unix.WEXITED 0 thenfailwith "tmux version discovery failed")(fun () -> String.trim (input_line channel))inif not (String.starts_with ~prefix:"tmux " version) thenfailwith "invalid tmux version";let version = String.sub version 5 (String.length version - 5) inlet ready = Filename.concat directory "ready.txt" inOut_channel.with_open_text ready (fun output ->output_string output "showcase ready\n");let spawn =Spawn.make (Exec { program = "/bin/cat"; args = [ "-u"; ready; "-" ] })inlet config =matchConfig.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)inlet plan =matchPlan.make~endpoint:(Endpoint.socket_path socket)~version ~observed:None configwith| Ok value -> value| Error error -> failwith (Format.asprintf "%a" Plan.pp_error error)inlet operation = get (Workspace.submit_bootstrap ~binary:wrapper plan) inFun.protect~finally:(fun () -> get (Workspace.close operation))(fun () ->let receipt = get (Workspace.await operation) inif receipt.status <> Execution.Succeeded thenfailwith "workspace setup failed";let client = Option.get (Workspace.client operation) inlet initial = List.hd (Iarray.get receipt.steps 0).created inPrintf.printf "socket=%s\n%!" socket;let pane =Snapshot.find_pane(get (Client.capture client))(Pane.Target.id initial.pane)|> Option.getinignore(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" inwith_demo binary move_windowRun the recorded entry point:
Terminal window $ opam exec -- dune exec examples/showcase_move_window.exe -- tmuxExpected outcome line, after the temporary socket path:
moved: build at 7- Parameters
-
-
from_index(int) #
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
| Language | Equivalent |
|---|---|
| Python | libtmux |
| Lua | libtmux |
| Erlang | tmux |
| Haskell | No public Haskell equivalent is implemented; the current modules expose scalar values and version parsing. |
| TypeScript | window |
| Rust | window |
| Go | tmux |
| Java | io |
| C# | Lib |
| C++ | libtmux:: |
| Swift | Server |
| Perl | Lib 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#.