# Personal Tmux config file. # Last Changed: 2020-02-15 # Author: Federico Igne # License: This file is placed in the public domain. # {{{1 GENERAL # Set terminal colors. # Note to self: you changed this so many times it doesn't make any sense # anymore. If you have problems with colors/fonts and terminal # applications (e.g., Vim, (Neo)Mutt) come back here and tweak the # option. set -g default-terminal "tmux-256color" set -gas terminal-overrides ",st*:Tc" # Increase history scrollback buffer size (st doesn't have any # `scrollback buffer` feature so this is your only chance!) set -g history-limit 16384 # 2**14 # TMux messages are displayed for 5 seconds set -g display-time 5000 # Focus events enabled (if terminal supports them) # This also integrates with the FocusGained/FocusLost Vim events. Use # `vim-tmux-focus-events` Vim plugin to fix some issues with event # focus. # # https://github.com/tmux-plugins/vim-tmux-focus-events # set -g focus-events on # Set vi bindings for copymode set -g mode-keys vi # Enable mouse control but disable everything apart from pane resizing # and window selection through statusbar. set -g mouse on unbind-key -T copy-mode MouseDown1Pane unbind-key -T copy-mode MouseDrag1Pane unbind-key -T copy-mode MouseDragEnd1Pane unbind-key -T copy-mode WheelDownPane unbind-key -T copy-mode WheelUpPane unbind-key -T copy-mode-vi MouseDown1Pane unbind-key -T copy-mode-vi MouseDrag1Pane unbind-key -T copy-mode-vi MouseDragEnd1Pane unbind-key -T copy-mode-vi WheelDownPane unbind-key -T copy-mode-vi WheelUpPane unbind-key -n MouseDown1Pane #unbind-key -n MouseDown1Status unbind-key -n MouseDown3Pane #unbind-key -n MouseDrag1Border unbind-key -n MouseDrag1Pane unbind-key -n WheelDownStatus unbind-key -n WheelUpPane unbind-key -n WheelUpStatus # {{{1 BINDINGS # Prefix key (CTRL-) unbind-key C-b set -g prefix C-Space bind-key C-Space send-prefix # Re-source config file ($HOME/.tmux.conf) unbind-key r bind-key r source-file $HOME/.tmux.conf \; display "Reloaded ~/.tmux.conf" # Split window vertically/horizontally unbind-key - bind-key - split-window -v unbind-key | bind-key | split-window -h unbind-key \\ bind-key \\ split-window -h # Create a new window. New windows are named with random animal name. # Change `$HOME/.config/tmux/animals.txt` to change the set of names. unbind-key c bind-key c run 'tmux new-window -n "$(shuf -n1 $HOME/.config/tmux/animals.txt)"' # Seamless navigation between TMux panes and special splits # (Vim/Weechat). This works well with a Vim plugin that does the same # from Vim perspective. # See # https://github.com/christoomey/vim-tmux-navigator # for more information. is_special="ps -o state= -o comm= -t '#{pane_tty}' \ | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|weechat|n?vim?x?)(diff)?$'" bind-key -n C-h if-shell "$is_special" "send-keys C-h" "select-pane -L" bind-key -n C-j if-shell "$is_special" "send-keys C-j" "select-pane -D" bind-key -n C-k if-shell "$is_special" "send-keys C-k" "select-pane -U" bind-key -n C-l if-shell "$is_special" "send-keys C-l" "select-pane -R" bind-key -T copy-mode-vi C-h select-pane -L bind-key -T copy-mode-vi C-j select-pane -D bind-key -T copy-mode-vi C-k select-pane -U bind-key -T copy-mode-vi C-l select-pane -R # In the Weechat case, we don't have a way to seemlessly jump in the # Weechat->Tmux direction, so we need to escape the binding with # . #bind-key C-h select-pane -L #bind-key C-j select-pane -D #bind-key C-k select-pane -U #bind-key C-l select-pane -R # Next/Previous window bind-key -r C-n next-window bind-key -r C-p previous-window # Make some copy-mode bindings more Vim-like: # + v: start selection # + C-v: toggle block selection # + Enter: pipes the selected text into the clipboard (without exiting # copy-mode) bind-key -T copy-mode-vi v send-keys -X begin-selection bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle bind-key -T copy-mode-vi Enter send-keys -X copy-pipe "xclip -i -selection clipboard" \; send-keys -X clear-selection # {{{1 STYLE/COLOURS # Show statusline set -g status on # Set position set -g status-position bottom # Statusline update interval (seconds) set -g status-interval 15 # Position of the window list set -g status-justify right # Main statusline style set -g status-style bg=default # Left part: # It show the session name and "lights up" when the prefix is used. set -g status-left ' #{?#(echo $SSH_SESSION),(#h) #{?client_prefix,#[fg=colour4],}#{client_session},#{?client_prefix,#[fg=colour3],}#{client_session}} ' set -g status-left-length 50 set -g status-left-style fg=colour8,bold # Right part: # Empty status to move the window list on the right. set -g status-right '' # Statusline window list set -g window-status-format ' #W ' set -g window-status-style fg=colour8 set -g window-status-current-format ' #{?#(echo $SSH_SESSION),#[fg=colour4],#[fg=colour3]}#W ' # Messages and Command line set -g message-style fg=colour15 set -g message-command-style fg=colour15 # Panes set -g pane-border-style fg=colour15 set -g pane-active-border-style fg=colour3