dotfiles/tmux/.tmux.conf
Sanchayan Maity faa5ccb3a7
tmux: Do not show panes when switching sessions
Seeing panes while switching is not helpful enough with our naming
scheme for panes. Just show sessions and use exact option with fzf
to switch quickly.
2022-12-30 13:26:21 +05:30

165 lines
6.1 KiB
Bash

# change the prefix from 'C-b' to 'M-a'
unbind C-b
set-option -g prefix M-a
bind-key M-a send-prefix
# start with window 1 (instead of 0)
set -g base-index 1
# start with pane 1
set -g pane-base-index 1
# split panes using | and -, make sure they open in the same path
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# open new windows in the current path
bind c new-window -c "#{pane_current_path}"
# reload config file
bind r source-file ~/.tmux.conf \; display "Reloaded tmux.conf!"
# shorten command delay
set -sg escape-time 1
# Increase scrollback buffer size
set -g history-limit 131072
# don't rename windows automatically
set-option -g allow-rename off
# mouse control (clickable windows, panes, resizable panes)
set -g mouse on
set -g focus-events on
# Smart pane switching with awareness of Vim splits.
# See: https://github.com/christoomey/vim-tmux-navigator
is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
| grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind-key -n 'C-Left' if-shell "$is_vim" 'send-keys C-Left' 'select-pane -L'
bind-key -n 'C-Down' if-shell "$is_vim" 'send-keys C-Down' 'select-pane -D'
bind-key -n 'C-Up' if-shell "$is_vim" 'send-keys C-Up' 'select-pane -U'
bind-key -n 'C-Right' if-shell "$is_vim" 'send-keys C-Right' 'select-pane -R'
tmux_version='$(tmux -V | sed -En "s/^tmux ([0-9]+(.[0-9]+)?).*/\1/p")'
if-shell -b '[ "$(echo "$tmux_version < 3.0" | bc)" = 1 ]' \
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\' 'select-pane -l'"
if-shell -b '[ "$(echo "$tmux_version >= 3.0" | bc)" = 1 ]' \
"bind-key -n 'C-\\' if-shell \"$is_vim\" 'send-keys C-\\\\' 'select-pane -l'"
bind-key -T copy-mode-vi 'C-Left' select-pane -L
bind-key -T copy-mode-vi 'C-Down' select-pane -D
bind-key -T copy-mode-vi 'C-Up' select-pane -U
bind-key -T copy-mode-vi 'C-Right' select-pane -R
# Pane resizing with arrow keys
bind Left resize-pane -L 10
bind Down resize-pane -D 10
bind Up resize-pane -U 10
bind Right resize-pane -R 10
# Move windows back/forward
bind -n S-left swap-window -t -1
bind -n S-right swap-window -t +1
bind m command-prompt -p "Merge pane to:" "join-pane -t '%%'"
bind M command-prompt -p "Merge pane from:" "join-pane -s '%%'"
bind e setw synchronize-panes on \; display "Synchronize panes ON (E: off)"
bind E setw synchronize-panes off \; display "Synchronize panes OFF (e: on)"
bind -n M-0 select-window -t 0
bind -n M-1 select-window -t 1
bind -n M-2 select-window -t 2
bind -n M-3 select-window -t 3
bind -n M-4 select-window -t 4
bind -n M-5 select-window -t 5
bind -n M-6 select-window -t 6
bind -n M-7 select-window -t 7
bind -n M-8 select-window -t 8
bind -n M-9 select-window -t 9
bind 0 select-pane -t 0
bind 1 select-pane -t 1
bind 2 select-pane -t 2
bind 3 select-pane -t 3
bind 4 select-pane -t 4
bind 5 select-pane -t 5
bind 6 select-pane -t 6
bind 7 select-pane -t 7
bind 8 select-pane -t 8
bind 9 select-pane -t 9
bind P paste-buffer
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection
bind -T copy-mode-vi r send-keys -X rectangle-toggle
# Save scrollback buffer to a file
bind S command-prompt -p 'Save history to filename:' -I '/tmp/tmux.history' 'capture-pane -S - -E -; save-buffer %1 ; delete-buffer'
# Session selector
bind T display-popup -E "tmux list-sessions -F '#{session_name}' \
| grep -v \"^$(tmux display-message -p '#S')\$\" \
| fzf --reverse --exact \
| sed -E 's/\s-.*$//' \
| xargs tmux switch-client -t"
# Last command output
set -g @command-capture-key t
set -g @command-capture-prompt-pattern '] % '
set -g @command-capture-editor-cmd 'nvim -R'
# Fuzzback
set -g @fuzzback-popup 1
set -g @fuzzback-popup-size '90%'
# This effects color rendering and typing on terminal.
set-option -g default-terminal "tmux-256color"
## Status Bar settings
# Gruvbox dark color scheme
set-option -g status "on"
# Default statusbar color
set-option -g status-style bg=colour237,fg=colour223 # bg=bg1, fg=fg1
# Default window title colors
set-window-option -g window-status-style bg=colour214,fg=colour237 # bg=yellow, fg=bg1
# Default window with an activity alert
set-window-option -g window-status-activity-style bg=colour237,fg=colour248 # bg=bg1, fg=fg3
# Active window title colors
set-window-option -g window-status-current-style bg=red,fg=colour237 # fg=bg1
# Pane border
set-option -g pane-active-border-style fg=colour250 #fg2
set-option -g pane-border-style fg=colour237 #bg1
# Message infos
set-option -g message-style bg=colour239,fg=colour223 # bg=bg2, fg=fg1
# Writing commands inactive
set-option -g message-command-style bg=colour239,fg=colour223 # bg=fg3, fg=bg1
# Pane number display
set-option -g display-panes-active-colour colour250 #fg2
set-option -g display-panes-colour colour237 #bg1
# Clock
set-window-option -g clock-mode-colour colour109 #blue
# Bell
set-window-option -g window-status-bell-style bg=colour167,fg=colour235 # bg=red, fg=bg
# Theme settings mixed with colors (unfortunately, but there is no cleaner way)
set-option -g status-justify "centre"
set-option -g status-left-style none
set-option -g status-left-length "80"
set-option -g status-right-style none
set-option -g status-right-length "80"
set-window-option -g window-status-separator ""
set-option -g status-left "#[bg=colour248,fg=colour237] #S #[bg=colour237,fg=colour241,nobold,noitalics,nounderscore]"
set-option -g status-right "#[bg=colour248,fg=colour237] %d-%m-%Y  %H:%M "
set-window-option -g window-status-current-format "#[bg=colour214,fg=colour237,nobold,noitalics,nounderscore]#[bg=colour214,fg=colour239] #I #[bg=colour214,fg=colour239,bold] #W #[bg=colour237,fg=colour214,nobold,noitalics,nounderscore]"
set-window-option -g window-status-format "#[bg=colour239,fg=colour237,noitalics]#[bg=colour239,fg=colour223] #I #[bg=colour239,fg=colour223] #W #[bg=colour237,fg=colour239,noitalics]"
# Plugins
run-shell '~/.tmux/plugins/tmux-yank/yank.tmux'
run-shell '~/.tmux/plugins/tmux-open/open.tmux'
run-shell '~/.tmux/plugins/tmux-butler/tmux-butler.tmux'
run-shell '~/.tmux/plugins/tmux-fuzzback/fuzzback.tmux'
run-shell '~/.tmux/plugins/tmux-cmd-capture/tmux_capture_last_command_output.tmux'