While using `tmux-256color` has been working great for the longest time, `git` on macOS Venture with Apple Silicon does not like it. Complaints of incorrectly configured terminal are resolved in this config by removing this custom termdb entry. Alternative would be to install it again but it doesn't seem to be necessary anymore.
158 lines
5.4 KiB
Bash
158 lines
5.4 KiB
Bash
# Set global hooks to perform actions when events occur
|
|
set-hook -g session-created 'run ~/.config/tmux/hooks/session-create.sh'
|
|
|
|
# Set the tmux version to check for command support
|
|
run 'tmux setenv -g TMUX_VERSION $(tmux -V | cut -c 6-8)'
|
|
|
|
# Use vim keybindings in copy mode
|
|
set -g mode-keys vi
|
|
|
|
# Change prefix to C-Space
|
|
unbind C-b
|
|
set -g prefix C-Space
|
|
bind Space send-prefix
|
|
|
|
# Address vim mode switching delay
|
|
set -s escape-time 0
|
|
|
|
# Increase scrollback buffer size
|
|
set -g history-limit 1000000
|
|
|
|
# Set tmux messages display time to 4 seconds
|
|
set -g display-time 4000
|
|
|
|
# Refresh 'status-left' and 'status-right' more often
|
|
set -g status-interval 2
|
|
|
|
# Upgrade $TERM
|
|
set -g default-terminal "xterm-256color"
|
|
|
|
# Focus events enabled for terminals that support them
|
|
set -g focus-events on
|
|
|
|
# TODO: Change this comment to something that explains the setting
|
|
# super useful when using "grouped sessions" and multi-monitor setup
|
|
setw -g aggressive-resize on
|
|
|
|
# Start window & pane index at 1
|
|
set -g pane-base-index 1
|
|
|
|
# Enable mouse support
|
|
set-option -g mouse on
|
|
# Prevent mouse click up events exiting copy mode
|
|
unbind -T copy-mode-vi MouseDragEnd1Pane
|
|
|
|
# Enable changing cursor shape per pane, vim or zsh should emit escape
|
|
# sequences to change cursor shape.
|
|
# iTerm2 only requires this before tmux 2.9
|
|
if '[ -n $ITERM_PROFILE ] && [[ "$TMUX_VERSION" < "2.9" ]]' \
|
|
'set -ga terminal-overrides "*:Ss=\E]1337;CursorShape=%p1%d\7"'
|
|
# VTE compatible terminals.
|
|
if '[ ! -n $ITERM_PROFILE ]' \
|
|
'set -ga terminal-overrides "*:Ss=\E[%p1%d q:Se=\E[2 q"'
|
|
|
|
# Enable strikethrough on VTE compatible terminals.
|
|
set -ga terminal-overrides 'xterm*:smxx=\E[9m'
|
|
|
|
# Set only on macOS where it's required
|
|
if -b '[ "`uname`" = "Darwin" ]' \
|
|
'set -g default-command "reattach-to-user-namespace -l $SHELL"'
|
|
|
|
# Restore old next/previous window bindings
|
|
bind C-n next-window
|
|
bind C-p previous-window
|
|
|
|
# Make new splits open in current directory
|
|
bind '"' split-window -c '#{pane_current_path}'
|
|
bind '%' split-window -h -c '#{pane_current_path}'
|
|
|
|
# Change word separators to better match Vim.
|
|
set -g word-separators "<>(){}[]/'\";@*+,.-_=!£$%^&:#~?`¬|\\ "
|
|
|
|
# Integrate pane selection with vim
|
|
in_vim='tmux show-window-options | grep -q "@vim#{pane_id}"'
|
|
bind -n C-h if $in_vim 'send-keys C-h' 'select-pane -L'
|
|
bind -n C-j if $in_vim 'send-keys C-j' 'select-pane -D'
|
|
bind -n C-k if $in_vim 'send-keys C-k' 'select-pane -U'
|
|
bind -n C-l if $in_vim 'send-keys C-l' 'select-pane -R'
|
|
|
|
# Integrate urlscan or fallback to urlview
|
|
if -b 'which urlscan' \
|
|
'bind u capture-pane \; split-window "tmux show-buffer | urlscan"' \
|
|
'bind u capture-pane \; split-window "tmux show-buffer | urlview -"'
|
|
|
|
# Unbind copy mode defaults so pane selection works
|
|
unbind -T copy-mode-vi C-h
|
|
unbind -T copy-mode-vi C-j
|
|
# Enter copy mode with C-U
|
|
bind C-u copy-mode -u
|
|
# Begin selection in copy mode with v not Space
|
|
bind -T copy-mode-vi v send-keys -X begin-selection
|
|
|
|
# Enable mouse scrolling up in alternate buffers.
|
|
# If #{mouse_any_flag} is 1 the pane is running with mouse support, e.g. vim.
|
|
# If #{alternate_on} is 1 the terminal is in alternate buffer mode, e.g. less.
|
|
# If #{pane_in_mode} is 1 the pane is in copy-mode.
|
|
bind -n WheelUpPane \
|
|
if -Ft= "#{mouse_any_flag}" \
|
|
"send-keys -M" \
|
|
"if -Ft= \"#{alternate_on}\" \
|
|
\"send-keys -t= Up ; \
|
|
send-keys -t= Up ; \
|
|
send-keys -t= Up ; \" \
|
|
\"select-pane -t= ; \
|
|
if -Ft= '#{pane_in_mode}' \
|
|
'send-keys -M' \
|
|
'copy-mode -e ; send-keys -M' \" "
|
|
# Emulate mouse scrolling down in alternate buffers.
|
|
bind -n WheelDownPane \
|
|
if -Ft= "#{mouse_any_flag}" \
|
|
"send-keys -M" \
|
|
"if -Ft= \"#{alternate_on}\" \
|
|
\"send-keys -t= Down ; \
|
|
send-keys -t= Down ; \
|
|
send-keys -t= Down ; \" \
|
|
\"select-pane -t= ; \
|
|
send-keys -M\" "
|
|
|
|
# Yank to the system clipboard in copy mode.
|
|
# TODO: reattach-to-user-namespace not necessary with tmux > 2.6
|
|
if -b '[ "`uname`" = "Darwin" ]' \
|
|
'bind -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"'
|
|
# When not in WSL2 use xsel, when in WSL use win32yank.exe to avoid UI lockups.
|
|
if -b '[ "$WSLENV" = "" ]' \
|
|
'bind -T copy-mode-vi y send-keys -X copy-pipe "xsel -i --clipboard"' \
|
|
'bind -T copy-mode-vi y send-keys -X copy-pipe "win32yank.exe -i -crlf"'
|
|
|
|
# Left status style
|
|
if -b '[ "$WSL_DISTRO_NAME" != "" ]' \
|
|
'setw -g status-left " #(hostname)|#{WSL_DISTRO_NAME}|#{session_name}"' \
|
|
'setw -g status-left " #(hostname)|#{session_name}"'
|
|
setw -g status-left-style fg=colour240,bg=colour233
|
|
setw -g status-left-length 32
|
|
|
|
# Centre status style
|
|
setw -g status-style fg=colour240,bg=colour233
|
|
|
|
# Right status style shows system info, date, and time.
|
|
setw -g status-right "#[fg=colour240]#(cat ~/.cache/tmux/system-info)#[fg=white] %a %d-%m-%y %H:%M "
|
|
setw -g status-right-style fg=white,bg=colour233
|
|
if -b '[ "`uname`" != "Darwin" ]' \
|
|
'run "tmux setw -g status-right-length $((`nproc --all` + 32))"'
|
|
|
|
# Active window status style
|
|
setw -g window-status-current-format " #{window_index}: #{window_name}"
|
|
setw -g window-status-current-style fg=white,bg=colour233
|
|
|
|
# Inactive window status style
|
|
setw -g window-status-format " #{window_index}: #{window_name}"
|
|
setw -g window-status-style fg=colour240,bg=colour233
|
|
|
|
# Pane border style
|
|
set -g pane-border-style fg=colour233,bg=colour233
|
|
set -g pane-active-border-style fg=colour235,bg=colour235
|
|
|
|
# Command line window list selection
|
|
set-window-option -g mode-style fg=white,bg=colour237
|
|
set-option -g message-style fg=white,bg=colour237
|