Marty Oehme
ba46f3ba74
Horizontal pane splitting with \ stopped working, it apparently needs to be quoted in order to be registered correctly. Vertical keybinding still worked, but to keep consistency was quoted as well.
196 lines
7.4 KiB
Bash
196 lines
7.4 KiB
Bash
# Layout of this conf file:
|
|
# 1. Global Settings
|
|
# 2. Keybinds
|
|
# 3. Keybinds
|
|
# 4. Theme
|
|
|
|
# For rapid change prototyping, disabled normally:
|
|
# bind-key r source-file ~/.config/tmux/tmux.conf \; display-message "config reloaded."
|
|
|
|
######################
|
|
### 1. GLOBAL SETTINGS
|
|
######################
|
|
|
|
# show that activity happens but don't display a huge 'activity happening' notification
|
|
setw -g monitor-activity on
|
|
set -g visual-activity off
|
|
|
|
# Start counting windows and panes at 1
|
|
set -g base-index 1
|
|
setw -g pane-base-index 1
|
|
set -g renumber-windows on
|
|
|
|
# Terminal improvements
|
|
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@"
|
|
set-window-option -g automatic-rename on
|
|
set-option -g set-titles on
|
|
set -g mouse on
|
|
# set -g default-terminal xterm-256color
|
|
set -g default-terminal tmux-256color
|
|
set -g status-keys vi
|
|
set -g history-limit 10000
|
|
|
|
# Screen size is based on the smallest client looking at the current windows, not the smallest
|
|
# client connected to the overall session. If two clients are connected to the same session but not
|
|
# looking at the same window, why would they care about each others screen size?
|
|
setw -g aggressive-resize on
|
|
|
|
# No delay for escape key press
|
|
set -sg escape-time 0
|
|
|
|
# enable true color support for nvim
|
|
set -ga terminal-overrides ',xterm-256color:RGB'
|
|
# Set Cursor terminal override, so nvim can change cursor style when changing modes
|
|
# more info see nvim, :help tui-cursor-shape
|
|
set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q'
|
|
|
|
####################
|
|
## 2. PLUGINS ##
|
|
####################
|
|
|
|
# Plugins -- TO INITALLY SET UP THE PLUGINS PRESS bind-key I (that is shift i)
|
|
# -- a message will appear after a second saying succes
|
|
#run-shell ~/.tmux-plugins/resurrect/resurrect.tmux
|
|
set -g @plugin 'tmux-plugins/tpm'
|
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
|
set -g @plugin 'tmux-plugins/tmux-yank'
|
|
set -g @plugin 'Morantron/tmux-fingers'
|
|
set -g @plugin 'christoomey/vim-tmux-navigator'
|
|
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
|
|
|
if "test ! -d ${TMUX_PLUGIN_MANAGER_PATH}/tpm" \
|
|
"run 'git clone https://github.com/tmux-plugins/tpm {TMUX_PLUGIN_MANAGER_PATH}/tpm && {TMUX_PLUGIN_MANAGER_PATH}/tpm/bin/install_plugins'"
|
|
|
|
run -b "${TMUX_PLUGIN_MANAGER_PATH}/tpm/tpm"
|
|
|
|
#####################
|
|
## 3. KEYBINDINGS ##
|
|
#####################
|
|
|
|
# Unbind some defaults
|
|
unbind '"'
|
|
unbind %
|
|
|
|
# Custom modifier key
|
|
set -g prefix C-a
|
|
unbind-key C-b
|
|
bind-key -r C-a send-prefix
|
|
|
|
# Pane Navigation - Vim Keys
|
|
bind-key -n C-h select-pane -L
|
|
bind-key -n C-j select-pane -D
|
|
bind-key -n C-k select-pane -U
|
|
bind-key -n C-l select-pane -R
|
|
|
|
# Window Navigation - Prefix + Vim Keys
|
|
bind-key -r C-h select-window -t :-
|
|
bind-key -r C-l select-window -t :+
|
|
|
|
# Resize Panes
|
|
bind-key -r H resize-pane -L 3
|
|
bind-key -r J resize-pane -D 1
|
|
bind-key -r K resize-pane -U 1
|
|
bind-key -r L resize-pane -R 3
|
|
|
|
bind-key -r C-H resize-pane -L 10
|
|
bind-key -r C-J resize-pane -D 5
|
|
bind-key -r C-K resize-pane -U 5
|
|
bind-key -r C-L resize-pane -R 10
|
|
|
|
# Send Pane to a new window (but stay on current window), join it back into the current window
|
|
bind-key B break-pane -d
|
|
bind-key C-b command-prompt -p "join pane from: " "join-pane -h -s '%%'"
|
|
|
|
# Swap panes within the current window (swaps pane # entered with currently selected pane)
|
|
bind-key b display-panes\; command-prompt -p "pane #: " "swap-pane -t '%%'"
|
|
|
|
# Kill tabs quicker
|
|
bind-key x kill-pane
|
|
bind-key C-x kill-window
|
|
|
|
# Split Window into panes - automatically handled by plugin
|
|
bind-key '\' split-window -h -c '#{pane_current_path}'
|
|
bind-key '-' split-window -v -c '#{pane_current_path}'
|
|
|
|
# Open a sessions chooser
|
|
bind C-j split-window -v "tmux list-sessions | sed -E 's/:.*$//' | grep -v \"^$(tmux display-message -p '#S')\$\" | fzf --reverse | xargs tmux switch-client -t"
|
|
|
|
# Quick-View Panes
|
|
bind-key h split-window -h 'glances'
|
|
bind-key t split-window -h 'vim ~/todo.md'
|
|
|
|
#####################
|
|
## 4. THEME ##
|
|
#####################
|
|
|
|
## theme from github.com/jimeh/tmux-themepack, the powerline/default/blue theme.
|
|
## It is integrated with prefix highlight for this tmux conf
|
|
|
|
# Status update interval
|
|
set -g status-interval 1
|
|
# Clock mode
|
|
set -g clock-mode-colour colour24
|
|
set -g clock-mode-style 24
|
|
|
|
# Sets both Prefix mode and Copy mode to be highlighted in the status bar.
|
|
set -g @prefix_highlight_show_copy_mode 'on'
|
|
set -g @prefix_highlight_copy_mode_attr 'fg=black,bg=yellow,bold' # default is 'fg=default,bg=yellow'
|
|
set -g @prefix_highlight_prefix_prompt 'Command'
|
|
set -g @prefix_highlight_copy_prompt 'Copy'
|
|
|
|
# This tmux statusbar config was created by tmuxline.vim
|
|
# on Wed, 13 Mar 2019
|
|
|
|
set -g message-command-style bg="#2e2e2e",fg="#c8c8c8"
|
|
set -g message-style bg="#2e2e2e",fg="#c8c8c8"
|
|
set -g pane-active-border-style fg="#2e2e2e"
|
|
set -g pane-border-style fg="#2e2e2e"
|
|
set -g status-justify "centre"
|
|
set -g status "on"
|
|
set -g status-style "none"
|
|
set -g status-style "none"
|
|
set -g status-left-length "100"
|
|
set -g status-bg "#2e2e2e"
|
|
set -g status-right-length "100"
|
|
setw -g window-status-style fg="#c8c8c8",bg="#2e2e2e","none"
|
|
setw -g window-status-activity-style bg="#2e2e2e",fg="#c8c8c8","underscore"
|
|
setw -g window-status-separator ""
|
|
set -g status-left "#[fg=#c8c8c8,bg=#2e2e2e] #S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #(whoami) #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I:#P #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
|
set -g status-right "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics] #[fg=#c8c8c8,bg=#2e2e2e] #{?client_prefix,#[fg=colour232]#[bg=brightblue],} %H:%M:%S #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] %d-%b-%y #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #H "
|
|
setw -g window-status-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[default] #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
|
setw -g window-status-current-format "#[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]#[fg=#c8c8c8,bg=#2e2e2e] #I #W #[fg=#2e2e2e,bg=#2e2e2e,nobold,nounderscore,noitalics]"
|
|
|
|
########################
|
|
## 5. Nested Sessions ##
|
|
########################
|
|
# from: https://github.com/samoshkin/tmux-config/blob/master/tmux/tmux.conf
|
|
# all credit to samoshkin
|
|
|
|
# Session is considered to be remote when we ssh into host
|
|
if-shell 'test -n "$SSH_CLIENT"' \
|
|
'source-file $XDG_CONFIG_HOME/tmux/tmux.remote.conf'
|
|
|
|
# We want to have single prefix key "C-a", usable both for local and remote session
|
|
# we don't want to "C-a" + "a" approach either
|
|
# Idea is to turn off all key bindings and prefix handling on local session,
|
|
# so that all keystrokes are passed to inner/remote session
|
|
|
|
# see: toggle on/off all keybindings · Issue #237 · tmux/tmux - https://github.com/tmux/tmux/issues/237
|
|
|
|
# Also, change some visual styles when window keys are off
|
|
bind -T root F12 \
|
|
set prefix None \;\
|
|
set key-table off \;\
|
|
set status-style fg="colour245",bg="colour238" \;\
|
|
set window-status-current-format "#[fg=$color_window_off_status_bg,bg=$color_window_off_status_current_bg]$separator_powerline_right#[default] #I:#W# #[fg=$color_window_off_status_current_bg,bg=$color_window_off_status_bg]$separator_powerline_right#[default]" \;\
|
|
set window-status-current-style fg="colour232",bg="colour254","bold" \;\
|
|
if -F '#{pane_in_mode}' 'send-keys -X cancel' \;\
|
|
refresh-client -S \;\
|
|
|
|
bind -T off F12 \
|
|
set -u prefix \;\
|
|
set -u key-table \;\
|
|
set -u status-style \;\
|
|
set -u window-status-current-style \;\
|
|
set -u window-status-current-format \;\
|
|
refresh-client -S
|