tmux/tmux.conf
Kenneth Benzie (Benie) 20be7f3bcc Add urlscan as alternative to urlview
Since urlview is not available with pacman but urlscan is, first check
and integrate urlscan then fallback to urlview.
2019-09-17 22:13:02 +01:00

147 lines
4.8 KiB
Bash

# 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 5
# Upgrade $TERM
set -g default-terminal "tmux-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
# 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}'
# 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'
bind -n C-\ if $in_vim 'send-keys C-\\' 'select-pane -l'
# 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
if -b '[ "`uname`" = "Darwin" ]' \
'bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel \
"reattach-to-user-namespace pbcopy"' \
'bind -T copy-mode-vi y send -X copy-pipe-and-cancel \
"xclip -i -sel p -f | xclip -i -sel c"'
# Left status style
setw -g status-left " #{session_name}"
setw -g status-left-style fg=colour240,bg=colour233
# Centre status style
setw -g status-style fg=colour240,bg=colour233
# Right status style, show data and time (and battery percentage on macOS).
if '[ "`uname`" = "Darwin" ]' \
'setw -g status-right "#(pmset -g batt | grep --color=never -Eo "\\d+%%")\
%a %d-%m-%y %H:%M "' \
'setw -g status-right "%a %d-%m-%y %H:%M "'
setw -g status-right-style fg=white,bg=colour233
# 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