## 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 # window/pane creation, retain PWD bind c new-window -c "#{pane_current_path}" bind '"' split-window -c "#{pane_current_path}" bind % split-window -h -c "#{pane_current_path}" bind P paste ## } Navigation