123 lines
5.7 KiB
Text
123 lines
5.7 KiB
Text
## General configuration {
|
|
|
|
set -g default-terminal "xterm-256color"
|
|
if 'infocmp -x tmux-256color > /dev/null 2>&1' 'set -g default-terminal "tmux-256color"'
|
|
|
|
setw -g xterm-keys on # tmux will generate xterm(1) -style function key sequences; these have a number included to indicate modifiers such as Shift, Alt or Ctrl.
|
|
set -s escape-time 10 # (default 500ms) Set the time in milliseconds for which tmux waits after an escape is input to determine if it is part of a function or meta key sequences.
|
|
set -sg repeat-time 600 # (default 500ms) Allow multiple commands to be entered without pressing the prefix-key again in the specified time milliseconds. Whether a key repeats may be set when it is bound using the -r flag to bind-key. Repeat is enabled for the default keys bound to the resize-pane command.
|
|
set -s focus-events on # When enabled, focus events are requested from the terminal if supported and passed through to applications running in tmux. Attached clients should be detached and attached again after changing this option.
|
|
|
|
setw -q -g utf8 on
|
|
|
|
set -g history-limit 100000 # increate the history
|
|
|
|
# edit config
|
|
bind e new-window -n "~/.tmux.conf" "\"\${EDITOR:-vim}\" ~/.tmux.conf && tmux source ~/.tmux.conf && tmux display \"~/.tmux.conf sourced\""
|
|
|
|
# reload config
|
|
bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced'
|
|
|
|
## } General configuration
|
|
|
|
## Display {
|
|
|
|
set -g base-index 1 # start window numbering at 1 -- easier on the hands
|
|
setw -g pane-base-index 1 # make pane numbering consistent with windows
|
|
|
|
setw -g automatic-rename on # rename window to reflect current program
|
|
set -g renumber-windows on # renumber windows when a window is closed
|
|
|
|
set -g set-titles on # set terminal title
|
|
|
|
set -g display-panes-time 800 # slightly longer pane indicators display time
|
|
set -g display-time 1000 # slightly longer status messages display time
|
|
|
|
# clear both screen and history
|
|
bind -n C-l send-keys C-l \; run 'sleep 0.2' \; clear-history
|
|
|
|
# activity
|
|
set -g monitor-activity on
|
|
set -g visual-activity off
|
|
|
|
## Status line {
|
|
|
|
# move status line to the top
|
|
set -q -g status-utf8 on # expect UTF-8 on tmux < 2.2
|
|
set -g status-position top
|
|
set -g status-interval 10 # redraw status line every 10 seconds
|
|
set -g status-style 'bg=terminal, fg=terminal'
|
|
set -g window-status-style 'bg=terminal, fg=green'
|
|
set -g window-status-current-style 'bg=terminal, fg=green bright'
|
|
|
|
set -g status-left-length 20
|
|
set -g status-left-style 'bg=terminal, fg=white dim'
|
|
set -g status-left "[#S] > #(awk '{uptime=$1; days=int(uptime/86400); uptime-=86400*days; hours=int(uptime/3600); uptime-=hours*3600; minutes=int(uptime/60); printf \"%%dd %%dh %%dm\", days, hours, minutes}' /proc/uptime) > "
|
|
|
|
set -g status-right-length 100
|
|
set -g status-right-style 'bg=terminal, fg=green'
|
|
set -g status-right "#(acpi | tr -d , | awk 'NR==1{printf \"%%s %%s < \", $3, $4; exit}')%R < %F < #(echo \"$USER\") < #h"
|
|
|
|
## } Status line
|
|
|
|
## } Display
|
|
|
|
## Navigation {
|
|
|
|
# create session
|
|
bind C-c new-session
|
|
|
|
# find session
|
|
bind C-f new-window -n "session-switcher" "\
|
|
tmux list-sessions -F '#{?session_attached,,#{session_name}}' |\
|
|
awk 'NF>0{print}' |\
|
|
fzf --print0 --reverse --header jump-to-session --preview 'tmux capture-pane -pt {}' |\
|
|
xargs -0 tmux switch-client -t"
|
|
|
|
bind C-n new-window -n "window-switcher" "\
|
|
tmux list-windows -F '#{?window_active,,#{session_id}:#{window_index} #{session_name} > #{window_name}}' |\
|
|
awk 'NF>0{print}' |\
|
|
fzf --reverse --header jump-to-window --preview \"tmux capture-pane -pt {1}\" |\
|
|
awk '{print $1}' |\
|
|
xargs tmux switch-client -t"
|
|
|
|
bind C-w new-window -n "global-window-switcher" "\
|
|
CURRENT_INFO=\"\$(tmux display-message -p '0:#{session_id}:#{window_index}')\";\
|
|
tmux list-windows -aF '#{window_last_flag}:#{session_id}:#{window_index} #{session_name} > #{window_name}' |\
|
|
awk -v cur_info_raw=\"\$CURRENT_INFO\" 'BEGIN{split(cur_info_raw,cur_info,\":\")} {split($1,this_info,\":\"); if($1 == cur_info_raw || (this_info[1] && this_info[2] == cur_info[2])) next; print gensub(\"^[01]:\",\"\",1)}' |\
|
|
fzf --reverse --header global-jump-to-window --preview 'tmux capture-pane -pt {1}' |\
|
|
awk '{print $1}' |\
|
|
xargs tmux switch-client -t"
|
|
|
|
bind C-j new-window -n "pane-switcher" "\
|
|
tmux list-panes -sF '#{?#{&&:#{window_active},#{pane_active}},,#{session_id}:#{window_index}.#{pane_index} #{session_name} > #{window_name} > #{pane_title}}' |\
|
|
awk 'NF>0{print}' |\
|
|
fzf --reverse --header jump-to-pane --preview 'tmux capture-pane -pt {1}' |\
|
|
awk '{print $1}' |\
|
|
xargs tmux switch-client -t"
|
|
|
|
bind C-k new-window -n "global-pane-switcher" "\
|
|
CURRENT_INFO=\"\$(tmux display-message -p '0:#{pane_active}:#{session_id}:#{window_index}.#{pane_index}')\";\
|
|
tmux list-panes -aF '#{window_last_flag}:#{pane_active}:#{session_id}:#{window_index}.#{pane_index} #{session_name} > #{window_name} > #{pane_title}' |\
|
|
awk -v cur_info_raw=\"\$CURRENT_INFO\" 'BEGIN{split(cur_info_raw,cur_info,\":\")} {split($1,this_info,\":\"); if($1 == cur_info_raw || (this_info[1] && this_info[3] == cur_info[3] && this_info[2] == cur_info[2])) next; print gensub(\"^[01]:[01]:\",\"\",1)}' |\
|
|
fzf --reverse --header global-jump-to-pane --preview 'tmux capture-pane -pt {1}' |\
|
|
awk '{print $1}' |\
|
|
xargs tmux switch-client -t"
|
|
|
|
# pane navigation
|
|
bind -r h select-pane -L # move left
|
|
bind -r j select-pane -D # move down
|
|
bind -r k select-pane -U # move up
|
|
bind -r l select-pane -R # move right
|
|
bind > swap-pane -D # swap current pane with the next one
|
|
bind < swap-pane -U # swap current pane with the previous one
|
|
|
|
# pane resizing
|
|
bind -r H resize-pane -L 2
|
|
bind -r J resize-pane -D 2
|
|
bind -r K resize-pane -U 2
|
|
bind -r L resize-pane -R 2
|
|
|
|
bind P paste
|
|
|
|
## } Navigation
|