bonfire/config/tmux/tmux.conf
2023-06-06 23:18:09 +05:00

124 lines
4.0 KiB
Plaintext

# tmux.conf
########################################
set -s default-terminal "xterm-256color"
setw -g automatic-rename on # rename window after current program
set -g renumber-windows on # renumber windows when one is closed
# Zero-based indexing is fine in programming languages, but not so much in a
# multiplexer when zero is on the other side of the keyboard.
set -g base-index 1
setw -g pane-base-index 1
# display tmux messages longer
set -g display-time 1500
set -g display-panes-time 800
# Address vim-mode switching delay (http://superuser.com/a/252717/65504)
set -s escape-time 0
set -sg repeat-time 600
set -g history-limit 50000
# Update status-{left,right} more often (default: 15)
set -g status-interval 5
# Rather than constraining window size to the maximum size of any client
# connected to the *session*, constrain window size to the maximum size of any
# client connected to *that window*. Much more reasonable.
setw -g aggressive-resize off
# For terminals that support them, propagate these events to programs that
# understand them.
set -s focus-events on
# Enable mouse + mouse wheel
set -g mouse on
########################################
# Keybinds #
########################################
# Rebind prefix to C-c. Press twice to send literal C-c.
unbind C-b
set -g prefix C-c
bind C-c send-prefix
# Vi-style keybinds
set -g status-keys vi
set -g mode-keys vi
bind c new-window -c "#{pane_current_path}"
bind v split-window -h -c "#{pane_current_path}"
bind s split-window -v -c "#{pane_current_path}"
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
bind H run '$TMUX_HOME/swap-pane.sh left'
bind J run '$TMUX_HOME/swap-pane.sh down'
bind K run '$TMUX_HOME/swap-pane.sh up'
bind L run '$TMUX_HOME/swap-pane.sh right'
bind M run '$TMUX_HOME/swap-pane.sh master'
bind o resize-pane -Z
bind S choose-session
bind W choose-window
bind / choose-session
bind . choose-window
# bind = select-layout tiled
bind | select-layout even-horizontal
bind _ select-layout even-vertical
# Disable confirmation
bind x kill-pane
bind X kill-window
bind q kill-session
bind Q kill-server
# Smart pane switching with awareness of vim splits
# See: https://github.com/christoomey/vim-tmux-navigator
is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?x?)(diff)?$"'
bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
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"
bind C-w last-pane
bind C-n next-window
bind C-p previous-window
# break pane into a window
bind = select-layout even-vertical
bind + select-layout even-horizontal
bind - break-pane
bind _ join-pane
# reload config without killing server
bind r source-file $DOTFILES/config/tmux/tmux.conf \; display-message " Config reloaded..".
bind ^r refresh-client
########################################
# Copy mode #
########################################
bind Enter copy-mode # enter copy mode
bind b list-buffers # list paster buffers
bind B choose-buffer # choose which buffer to paste from
bind p paste-buffer # paste from the top paste buffer
bind P run "xclip -selection clipboard -o | tmux load-buffer - ; tmux paste-buffer"
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind -T copy-mode-vi Escape send-keys -X cancel
bind -T copy-mode-vi C-g send-keys -X cancel
bind -T copy-mode-vi H send-keys -X start-of-line
bind -T copy-mode-vi L send-keys -X end-of-line
########################################
# Local config #
########################################
set -g @open-editor 'C-e'
set -g @open-S 'https://www.duckduckgo.com/'
set -g @resurrect-processes 'ssh sqlite3 "git log"'
run-shell $TMUX_HOME/extraInit
if '[ -f ~/.tmux.conf ]' 'source-file ~/.tmux.conf'