See https://github.com/tmux/tmux/wiki/Advanced-Use ### Socket Tmux by default creates a socket in `/tmp/tmux-$UID/default`. We can change this ```bash tmux -Lhello -- creates/uses server and socket in /tmp/tmux-$UID/hello tmux -Shello -- creates/uses server and socket in file 'hello' ``` to see socket path within a session ``` :display -p '#{socket_path}' ``` If a socket is accidentally deleted, it can be recreated via ```bash pkill -USR1 tmux ``` ### Session ``` :kill-session -C -- clear alert flags ``` ### Working directory By default the working directory is the directory we were in when launching tmux. This can be changed via ``` :attach -c/tmp ``` Or when creating a new session, window or pane ``` :new -c/tmp -- new session with working directory /tmp :neww -c/tmp -- new window with working directory /tmp :splitw -c/etc -- new pane (split one above other) with cwd=/etc :splitw -h -c/usr -- new pane (split one beside other) with cwd=/usr ``` ### Respawning pane By default, when the command running in a pane exits, the pane closes. We can change this ``` :set-option remain-on-exit ``` and then ``` :respawn-pane -- start new process in a pane :respawn-pane cmd -- run cmd in (dead) pane :respawn-pane -k cmd -- kill current process and run cmd in pane ``` ### Window sizes ``` :show -g default-size ``` ``` :set-option window-size largest/smallest/latest/manual ``` Then there are keys when the window is larger than our terminal: {{{Ctrl-B}}} followed by ``` S-Up S-Down S-Left S-Right Delete -- return to tracking the cursor position ``` and commands ``` :resizew -x200 -y100 -- resize to 200x100 :resizew -A -- work out size from attached clients :resizew -L20 -- adjust size left :resizew -R20, -D20, -U20 -- same but for right, down, up ``` ### Piping pane changes ``` :pipe-pane 'cat > /tmp/log1' -- pipes changes to terminal to cat :pipe-pane -- stop piping :pipe-pane -I 'cat /tmp/log1' :pipe-pane -o 'cat > /tmp/log1' -- toggles piping ``` ### Pane commands ``` :selectp -Tmytitle -- set title for pane ``` The pane title is in quotes to the lower right, the window name is next to its number, and the session name is in square brackets to the lower left. ### Terminal window stuff With e.g. xterm and friends, we can set the title using ``` set -g set-titles on ``` and change what the title is set to via ``` set -g set-titles-string '#{pane_title}' ``` where `'#{pane_title}'` is a format string for the title. By default this is `'session-name:window-number:window-name - pane-name'`. ### Format strings For things like setting the title, the format string looks like e.g. ``` '#{pane_title}' ``` and there are a few variables we can use in here. These are ``` #{pane_title} -- pane title #{session_name}, #{window_name} -- names #{pane_id}, #{window_id}, #{session_id} -- ids ``` For example to list ids in current window ```bash $ tmux lsp -F '#{session_id} #{window_id} #{pane_id}' $0 @8 %8 ``` ### Addressing panes Note that variable `TMUX_PANE` is set to the appropriate `pane_id` when spawning a pane, and is unique for that pane (it is never reused by a given tmux server). For example ```bash tmux send -t%22 "echo hello world" Enter -- types echo hello world and presses Enter tmux send -t%21 -l "echo hello" Enter -- Enter is sent as text ``` note that this can't send e.g "\n" -- that literally sends a backslash followed by n. ``` tmux capturep -pt%21 -- dump contents of pane %21 to stdout ... -e includes escape sequences for colours and attributes -C escapes nonprintable chatacters as octal sequences -N preserves trailing spaces at the end of lines -J preserves trailing spaces and joins wrapped lines ``` ### More panes Empty pane ```bash $ tmux splitw '' $ echo 'hello world' | tmux splitw -I -- takes content of new pane from stdin ``` ### Windows A window can belong to more than one session. ### Escape sequences ```bash $ printf '\033]2;newtitle\007' -- sets terminal title ``` ### Options Options, set with `:setw`