# Scott Rochford's tmux configuration # # change the prefix to the GNU screen default (avoids clash with page up in vi) set -g prefix C-a unbind-key C-b bind-key C-a send-prefix # toggle sending input to all panes bind-key b set-window-option synchronize-panes # alternative to ',' which doesn't pre-fill the prompt with the existing name bind-key < command-prompt "rename-window '%%'" # Disabled all of these in favour of changing 'default-command' below. #bind-key C-p pipe-pane -o 'cat >>~/tmux_logs/output.$(echo #I-#P-#W-#T | sed "s/[^[:alnum:].-]/_/g")' \; display-message 'Toggled logging' # From http://unix.stackexchange.com/questions/5832/is-there-an-equivalent-of-gnu-screens-log-command-in-tmux # bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Toggled logging to $HOME/#W-tmux.log' #bind-key H pipe-pane "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Started logging to $HOME/#W-tmux.log' #bind-key h pipe-pane \; display-message 'Ended logging to $HOME/#W-tmux.log' #set -g utf8 on set-option -g history-limit 32768 # no longer available in 2.2 #set-option -g mouse-select-pane on #set-option -g mouse-select-window on set-option -g mouse on # increase the amount of time status bar messages are displayed for (default 1000 I think) set-option -g display-time 1500 # unfortunately this seems to have no effect in putty :-( set-option -g set-clipboard on set-option -g default-command 'tmux pipe-pane -o "cat >>~/tmux_logs/output-`date +%Y%m%d-%H%M%S-$$`" ; /bin/ksh -l' # # allow yank into system clipboard # from http://stackoverflow.com/questions/17255031/how-to-copy-from-tmux-running-in-putty-to-windows-clipbard # # for some reason this is wrapping at 80 cols, using save- instead of show- helps # -b for background is needed because xclip continues to run to service the clipboard paste reqeusts until the # clipboard buffer is replaced with some new contents #bind C-y run-shell -b "tmux save-buffer - | DISPLAY=$(<~/.xdisplay) xclip -selection clipboard -in && tmux display-message 'xclipped successfully'" bind C-y save-buffer ~/etc/clipboard.pipe # # this was just for testing, but interestingly for some reason tmux-show-buffer >/tmp/t never terminates, writing to a pipe works fine?? #bind C-z run-shell "tmux show-buffer | cat >/tmp/t" # move x clipboard into tmux paste buffer #bind C-p run-shell -b "xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer" bind C-p run-shell "DISPLAY=$(<~/.xdisplay) xclip -o -selection clipboard | tmux load-buffer - ; tmux paste-buffer" # switch to last-but-one window (like prefix-l but last, last) # only works on tmux-2.4 + with Nicholas Marriott's patch from my feature request, unless it reached mainline.... #bind k run-shell "tmux select-window -t $(tmux list-windows -F '#{session_stack}' | awk -F, '{print $3;exit}END{print $1}')" bind k run-shell "tmux select-window -t $(echo #{session_stack} | awk -F, '{w=$1}NF>=3{w=$3;exit}END{print w}')" # switch to oldest window (for clean-up), not sure why brackets are required around (NF) here... bind K run-shell "tmux select-window -t $(echo #{session_stack} | awk -F, '{print $(NF)}')" # prompt for hosts to connect to, open a new synchronized window with horizontally split panes for each host, supports brace expansion bind N command-prompt -p hosts: 'run-shell -b "bash -c \"~/lbin/nw %% >/dev/null\""' # seems to cause unexpected resizes when focussing on putty :-( #set-option mouse-resize-pane on #05:59 < Celti> annihilannic: I believe the #{pane_in_mode} format does what you want #05:59 < Celti> put it in your statusline #05:59 < Celti> annihilannic: No, my mistake, I should have read farther down, you want #{pane_synchronized} # only works in tmux 2.0?, higher than 1.6.3 anyawy set-option -g window-status-format ' #I:#W#F#{?pane_synchronized,S,}' #set-option -g window-status-current-format ' #I:#W#{?pane_synchronized,[sync],}#F' # to highlight in red when sync is on... not sure why I did this with set-window-option instead of set-option, perhaps # both work? set-window-option -g window-status-current-format "#{?pane_synchronized,#[bg=red],}#{?window_zoomed_flag,#[bg=yellow],} #I:#W#F#{?pane_synchronized,S,}" # # also only in 2.0? if I use this, don't need #F in window-status-*-format? - actually, nah, # still useful for showing [Z]oomed, or - last active, etc. set-option -g window-status-current-style bg=blue # Toggle input on a pane (from Thomas Sattler) bind-key R if -F '#{pane_input_off}' "select-pane -e; select-pane -P fg=default" "select-pane -d; select-pane -P fg=yellow"