# ============================= run-shell "tmux setenv -g TMUX_VERSION $(tmux -V | sed 's/[^0-9.]//g')" run-shell "tmux setenv -g TMUX_VERSION_29 $(awk 'BEGIN {print (\"'$(tmux -V | sed 's/[^0-9.]//g')'\" >= 2.9)}')" # ----------------------------- # Global settings # ----------------------------- # set -g default-terminal xterm-256color set -g default-terminal screen-256color set-option -ga terminal-overrides ",*256col*:Tc" # scrollback buffer n lines set -g history-limit 10000 # listen for activity on all windows set -g bell-action any # start window indexing at 1 window so the 1 is easier to reach set -g base-index 1 # xterm-style function key sequences setw -g xterm-keys on # control automatic window renaming setw -g automatic-rename off # enable wm window titles set -g set-titles on # remove key press delay set -sg escape-time 0 # ----------------------------- # Key bindings # ----------------------------- unbind-key C-v # Create window bind-key C-n new-window # use C-n to create new windows because C-c is to interrupt # split windows (create pane) bind-key _ split-window -v -c '#{pane_current_path}' bind-key | split-window -h -c '#{pane_current_path}' # kill current pane when the inner process is unable to exit for whatever reason # bind-key q confirm-before kill-pane # or Ctrl- or Ctrl- # k --- previous pane # h l --- previous window / next window # j --- next pane # navigate windows unbind-key l bind-key h select-window -t :- bind-key C-h select-window -t :- bind-key -n C-h select-window -t :- bind-key l select-window -t :+ bind-key C-l select-window -t :+ bind-key -n C-l select-window -t :+ # navigate panes # bind-key j select-pane -t :.- # bind-key C-j select-pane -t :.- # bind-key -n C-j select-pane -t :.- # bind-key k select-pane -t :.+ # bind-key C-k select-pane -t :.+ # bind-key -n C-k select-pane -t :.+ # Copy-mode (vi-mode) # # vi-style controls for copy mode setw -g mode-keys vi # C-v (the original '[' is still availible) to enter vi-mode bind-key [ copy-mode # select and copy like vi in vi-mode bind-key -T copy-mode-vi v send -X begin-selection bind-key -T copy-mode-vi y send -X copy-selection # if encounter incompatible with send-keys/send -X, use lagacy setting: # bind-key -t vi-copy 'v' begin-selection # bind-key -t vi-copy 'y' copy-selection # enable navigation in vi mode bind-key -T copy-mode-vi C-h select-window -t :- bind-key -T copy-mode-vi C-l select-window -t :+ bind-key -T copy-mode-vi C-j select-pane -t :.- bind-key -T copy-mode-vi C-k select-pane -t :.+ # reload settings bind-key R source-file ~/.tmux.conf # ----------------------------- # Statusbar settings # ----------------------------- # use vi-style key bindings in the status line set -g status-keys vi # amount of time for which status line messages and other indicators # are displayed. time is in milliseconds. set -g display-time 2000 # default statusbar colors if-shell -b '[ "$TMUX_VERSION_29" = 0 ]' \ "set -g status-fg white \ set -g status-bg default \ set -g status-attr default" if-shell -b '[ "$TMUX_VERSION_29" = 1 ]' \ "set -g status-style fg=white,bg=default" # default window title colors if-shell -b '[ "$TMUX_VERSION_29" = 0 ]' \ "setw -g window-status-fg white \ setw -g window-status-bg default \ setw -g window-status-attr dim" if-shell -b '[ "$TMUX_VERSION_29" = 1 ]' \ "set -g window-status-style fg=white,bg=default,dim" # active window title colors if-shell -b '[ "$TMUX_VERSION_29" = 0 ]' \ "setw -g window-status-current-fg cyan \ setw -g window-status-current-bg default \ setw -g window-status-current-attr bright \ setw -g window-status-current-attr underscore" if-shell -b '[ "$TMUX_VERSION_29" = 1 ]' \ "set -g window-status-current-style fg=cyan,bg=default,bright,underscore" # command/message line colors if-shell -b '[ "$TMUX_VERSION_29" = 0 ]' \ "set -g message-fg white \ set -g message-bg black \ set -g message-attr bright" if-shell -b '[ "$TMUX_VERSION_29" = 1 ]' \ "set -g message-style fg=white,bg=black,bright" # what to be displayed on the right status set -g status-interval 1 set -g status-right ' } %Y-%m-%d %H:%M:%S' set -g status-right-length 60 # what to be displayed on the left status set -g status-left-length 30 set-option -g status-left "#[fg=green]#(echo $USER)#[default].#[fg=blue]#h#[default] { " # ----------------------------- # Platform fix # ----------------------------- if-shell "hash reattach-to-user-namespace 2> /dev/null" 'set-option -g default-command "reattach-to-user-namespace bash"'