My current replacement for screen, which I use with the following ~/.tmux.conf
under iTerm and via SSH on my iPad.
Synchronized Input To Multiple Sessions
Want to send the same commands to multiple sessions/machines? Hit Ctrl+B
and toggle that with:
:setw synchronize-panes
Saner Resizing
When having multiple clients connected to the same window, constrain window size only when necessary:
setw -g aggressive-resize on
Peeking at a file (using a bash function)
peek() { tmux split-window -p 33 "$EDITOR" "$@" || exit; }
Re-attaching a “lost” session
Send SIGUSR1 to the process to have it re-create the socket in /tmp:
killall -s SIGUSR1 tmux tmux attach
Getting the mouse to work
When using iTerm or recent versions of Cygwin, you can set these options in ~/.tmux.conf
to have tmux
respond to mouse clicks over an SSH session:
# For tmux 2.1 as shipped with Cygwin set -g mode-mouse
# For tmux 1.8 as shipped with Ubuntu 14.04 set -g mode-mouse on set -g mouse-resize-pane on set -g mouse-select-pane on set -g mouse-select-window on
Getting the cursor keys to work “right”
As seen here, the default movement bindings between panes are defined with -r
, which causes some confusion when, say, you switch panes “down” and then try to fetch the last command from bash
history with the up key but instead end up in the up pane again.
The solution is to redefine those bindings without repeat like so:
bind-key Up select-pane -U bind-key Down select-pane -D bind-key Left select-pane -L bind-key Right select-pane -R
My base config
# make mouse useful in iTerm
set -g mouse-select-pane on
# automatically set window title
setw -g automatic-rename
# act like vim
setw -g mode-keys vi
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind-key -r C-h select-window -t :-
bind-key -r C-l select-window -t :+
bind < resize-pane -L 4
bind > resize-pane -R 4
bind - resize-pane -D 4
bind + resize-pane -U 4
# disable repeat on cursors
bind-key Up select-pane -U
bind-key Down select-pane -D
bind-key Left select-pane -L
bind-key Right select-pane -R
# look good
set -g default-terminal "screen-256color"
# status indicators
#set -g status-right '#(uptime | cut -d, -f 2-)'
#### COLOUR
# default statusbar colors
set-option -g status-bg colour235 #base02
set-option -g status-fg colour136 #yellow
set-option -g status-attr default
# default window title colors
set-window-option -g window-status-fg colour244
set-window-option -g window-status-bg default
#set-window-option -g window-status-attr dim
# active window title colors
set-window-option -g window-status-current-fg colour166 #orange
set-window-option -g window-status-current-bg default
#set-window-option -g window-status-current-attr bright
# pane border
set-option -g pane-border-fg colour235 #base02
set-option -g pane-active-border-fg colour240 #base01
# message text
set-option -g message-bg colour235 #base02
set-option -g message-fg colour166 #orange
# pane number display
set-option -g display-panes-active-colour colour33 #blue
set-option -g display-panes-colour colour166 #orange
# clock
set-window-option -g clock-mode-colour colour64 #green
Quickie guide for installing it anywhere (like, say, funky Debian servers from last century):
- Get libevent (2.0.12 at the time of this writing)
- Get the source (1.4 at the time of this writing)
make
, shake, but not stir.