diff --git a/tmux.conf b/tmux.conf index 6608f19..69c0175 100644 --- a/tmux.conf +++ b/tmux.conf @@ -1,3 +1,6 @@ +# Set the tmux version to check for command support +run 'tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-8)' + # Use vim keybindings in copy mode set -g mode-keys vi @@ -34,26 +37,29 @@ set -g pane-base-index 1 # Enable mouse support set-option -g mouse on -# Enable changing cursor shape per pane in iTerm2 or VTE compatible terminals, -# vim or zsh should emit VTE compatible escape sequences to change cursor shape -if -b '[ -n $ITERM_PROFILE ]' \ - "set -ga terminal-overrides '*:Ss=\E]1337;CursorShape=%p1%d\7'" \ - "set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[2 q'" +# Enable changing cursor shape per pane, vim or zsh should emit escape +# sequences to change cursor shape. +# iTerm2 only requires this before tmux 2.9 +if '[ -n $ITERM_PROFILE ] && [[ "$TMUX_VERSION" < "2.9" ]]' \ + 'set -ga terminal-overrides "*:Ss=\E]1337;CursorShape=%p1%d\7"' +# VTE compatible terminals. +if '[ ! -n $ITERM_PROFILE ]' \ + 'set -ga terminal-overrides "*:Ss=\E[%p1%d q:Se=\E[2 q"' # Enable strikethrough on VTE compatible terminals. set -ga terminal-overrides 'xterm*:smxx=\E[9m' -# Set only on OS X where it's required +# Set only on macOS where it's required if -b '[ "`uname`" = "Darwin" ]' \ - "set -g default-command 'reattach-to-user-namespace -l $SHELL'" + 'set -g default-command "reattach-to-user-namespace -l $SHELL"' # Restore old next/previous window bindings bind C-n next-window bind C-p previous-window # Make new splits open in current directory -bind "\"" split-window -c "#{pane_current_path}" -bind "%" split-window -h -c "#{pane_current_path}" +bind '"' split-window -c '#{pane_current_path}' +bind '%' split-window -h -c '#{pane_current_path}' # Integrate pane selection with vim is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?)(diff)?$"' @@ -66,49 +72,45 @@ bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R" bind -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l" # Integrate urlview -bind u capture-pane \; split-window "tmux show-buffer | urlview -" +bind u capture-pane \; split-window 'tmux show-buffer | urlview -' +# Unbind copy mode defaults so pane selection works +unbind -T copy-mode-vi C-h +unbind -T copy-mode-vi C-j # Enter copy mode with C-U bind C-u copy-mode -u - # Begin selection in copy mode with v not Space bind -T copy-mode-vi v send-keys -X begin-selection + # Yank to the system clipboard in copy mode if -b '[ "`uname`" = "Darwin" ]' \ - "bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'reattach-to-user-namespace pbcopy'" \ - "bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xsel -i -p && xsel -o -p | xsel -i -b'" + 'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel \ + "reattach-to-user-namespace pbcopy"' \ + 'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel \ + "xsel -i -p && xsel -o -p | xsel -i -b"' # Left status style -set-window-option -g status-left " #S" -set-window-option -g status-left-fg colour240 -set-window-option -g status-left-bg colour233 +setw -g status-left " #{session_name}" +setw -g status-left-style fg=colour240,bg=colour233 # Centre status style -set-window-option -g status-fg colour240 -set-window-option -g status-bg colour233 +setw -g status-style fg=colour240,bg=colour233 # Right status style -set-window-option -g status-right "%a %d-%m-%y %H:%M " -set-window-option -g status-right-fg white -set-window-option -g status-right-bg colour233 +setw -g status-right "%a %d-%m-%y %H:%M " +setw -g status-right-style fg=white,bg=colour233 # Active window status style -set-window-option -g window-status-current-format " #I: #W" -set-window-option -g window-status-current-fg white -set-window-option -g window-status-current-bg colour233 +setw -g window-status-current-format " #{window_index}: #{window_name}" +setw -g window-status-current-style fg=white,bg=colour233 # Inactive window status style -set-window-option -g window-status-format " #I: #W" -set-window-option -g window-status-fg colour240 -set-window-option -g window-status-bg colour233 +setw -g window-status-format " #{window_index}: #{window_name}" +setw -g window-status-style fg=colour240,bg=colour233 -# Active pane border -set-option -g pane-active-border-fg colour235 -set-option -g pane-active-border-bg colour235 - -# Inactive pane border -set-option -g pane-border-fg colour233 -set-option -g pane-border-bg colour233 +# Pane border style +set -g pane-border-style fg=colour233,bg=colour233 +set -g pane-active-border-style fg=colour235,bg=colour235 # Command line window list selection set-window-option -g mode-style fg=white,bg=colour237