dotfiles/.tmux.conf

157 lines
4.5 KiB
Plaintext
Raw Normal View History

2020-07-15 07:56:14 +00:00
# =============================
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-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 <prefix> 1 is easier to reach
set -g base-index 1
# tell tmux to use 256 colour terminal
set -g default-terminal "screen-256color"
# 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 <esc> 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
# <prefix> or Ctrl- or <prefix> 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"'