From b47c74a33fe3f312cdfa5e028cdc7687ffc3af38 Mon Sep 17 00:00:00 2001
From: "Kenneth Benzie (Benie)" <benie@infektor.net>
Date: Sun, 11 Aug 2019 18:42:02 +0100
Subject: [PATCH] Fix tmux 2.9 config issues & cleanup

---
 tmux.conf | 70 ++++++++++++++++++++++++++++---------------------------
 1 file changed, 36 insertions(+), 34 deletions(-)

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