Update fzf location
[dotfiles] / .tmux.conf
old mode 100644 (file)
new mode 100755 (executable)
index c6582c4..c1a77b0
+# https://leanpub.com/the-tao-of-tmux/read
 
-# how to send tmux commands to nested tmux session
+#  Escape codes for status bars and titles
+#  #H  Hostname of local host
+#  #F  Current window flag
+#  #I  Current window index
+#  #P  Current pane index
+#  #S  Session name
+#  #T  Current window title
+#  #W  Current window name
+
+#  %h %d %Y - date in the [Mon DD YYYY] format
+#  %l:%M %p - time in the [HH:MM AM/PM] format
+
+
+#------------------------------------------------------------------------------
+#   SETTINGS
+#------------------------------------------------------------------------------
+
+# Ensure color rendered properly?
+set -g default-terminal "screen-256color"
+# set -g default-terminal "tmux-256color"
+# set -gs default-terminal xterm-256color
+
+
+
+# Allow mouse to select windows
+set -g mouse on
+
+# utf8 support? seems outdated?
+# set-window-option -g utf8 on
+
+# for being able to send one input to all panes
+# synchronize-panes on # off
+
+# set the prefix to Ctrl-b
 set -g prefix C-b
 unbind C-a
 bind C-b send-prefix
 
-# utf8 support
-set-window-option -g utf8 on
+# Sane scrolling ???
+# set -g terminal-overrides 'xterm*:smcup@:rmcup@'
+#set -g terminal-overrides ",xterm-256color:Tc"
 
-# bind kill-session to C-b k
-bind k kill-session
+# Allow xterm titles in terminal window,
+# terminal scrolling with scrollbar,
+# and setting overrides of C-Up, C-Down, C-Left, C-Right
+# set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"
+
+
+# update window number when one of them is deleted
+set -g  renumber-windows on
+
+# Not renaming windows ???
+# set -g  allow-rename off
 
-# windows starts at 1
-set -g base-index 1
+# automatic window rename on fg program change
+set -g automatic-rename
 
-# Sane scrolling
-set -g terminal-overrides 'xterm*:smcup@:rmcup@'
+# begin index count to 1, not 0
+set -g  base-index 1
+
+# 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 -s  escape-time 20
 
-# intuitive splitting
-bind | split-window -h
-bind - split-window -v
-bind _ split-window -v
 
 #------------------------------------------------------------------------------
 #   STATUSBAR
 #------------------------------------------------------------------------------
 
-# default statusbar colors
-set -g status-fg white
-set -g status-bg black
-set -g status-attr dim
+set -g  status-position bottom
+set -g  status-style bg=black
+
+set -g  status-left ""
+set -g  status-right ""
+
+# print the prefix if prefix pressed
+set -ga status-right " #{?client_prefix, #[bright]#{prefix}#[nobright] ,}"
+
+set -ga status-right ' #(echo \#"{last_exit_status_#{pane_id}}") '
+#set -ga status-right ' #(cd #{pane_current_path} && sh -c "print -P %%~") '
 
-# Left side of status bar
-set -g status-left-length 20
-#set -g status-left '#[fg=green][#[bg=black,fg=cyan]#S#[bg=black,fg=blue,dim]:#H#[fg=green]]'
+# print the current git branch
+# set -ga status-right '#(head="$(git -C #{pane_current_path} rev-parse --abbrev-ref HEAD 2>/dev/null)" && echo " $head ")'
+set -ga status-right " [#H:#S] #[fg=yellow,dim] %d-%m %H:%M"
+set -g  status-right-length 200
 
-# Right side of status bar
-set -g status-right-length 100
-set -g status-right '#[fg=cyan]#T #[fg=yellow]| #[fg=cyan]%d %h - %H:%M #[default]'
+# Left, display host and session name
+#set -ga status-left " [#H:#S]"
+#set -g  status-left-length 50
 
-# Example of using a shell command in the status line
-#set -g status-right "#[fg=yellow]#(uptime | cut -d ',' -f 2-)"
-#set -g status-right ' #[fg=red] | #[fg=white] #T #[fg=red] | #[fg=yellow] #(date) %H:%M #[default] #[fg=red] |'
+# Window title in red if there is something
+set -gw window-status-activity-style fg=brightred
+set -gw window-status-bell-style fg=brightcyan
+
+# 1 space between each window
+set -gw window-status-separator ' '
 
 # Inactive windows in status bar
-set-window-option -g window-status-format '#[fg=cyan,dim]#I#[fg=blue]:#[default]#W#[fg=yellow,dim]#F'
+set-window-option -g window-status-format '#[fg=cyan,dim]#I#[fg=blue,dim]:#[default,dim]#W'
+
+set-window-option -g window-status-current-format '#[bg=black,fg=cyan,bold]#I#[bg=black,fg=red]:#[bg=black,fg=yellow]#W#[fg=dim]'
+
+# put useful info in the window status bar lol
+# set-option -g set-titles on
+# set-option -g set-titles-string '#H:#S.#I.#P #W #T'
+
+
+#------------------------------------------------------------------------------
+#   PANES
+#------------------------------------------------------------------------------
+
+# pane border style
+set -gw pane-active-border-style fg=brightyellow
+
+# pane border colors
+# set -g pane-border-fg colour249
+# set -g pane-border-bg default
+# set -g pane-active-border-fg colour245
+# set -g pane-active-border-bg default
+
+# pane index starts at 1, not 0
+set -gw pane-base-index 1
+
+# do you want to see something pane related?
+#set -gw pane-border-status top
+
+# what do you want to see pane related?
+#set -gw pane-border-format ' #{pane_current_command} '
 
-# Current or active window in status bar
-#set-window-option -g window-status-current-bg yellow
-#set-window-option -g window-status-current-fg black
-set-window-option -g window-status-current-format '#[bg=black,fg=cyan,bold]#I#[bg=black,fg=red]:#[bg=black,fg=white]#W#[fg=dim]#F'
 
-#---------------------
-# ACTIVITY MONITORING
-#---------------------
 
-#set- -g monitor-activity on
-#set -g visual-activity on
+#------------------------------------------------------------------------------
+#   BINDINGS
+#------------------------------------------------------------------------------
+
+# map Fns to Windows
+bind -n   F1  select-window -t :1
+bind -n   F2  select-window -t :2
+bind -n   F3  select-window -t :3
+bind -n   F4  select-window -t :4
+# bind -n   F5  select-window -t :5
+# bind -n   F6  select-window -t :6
+# bind -n   F7  select-window -t :7
+# bind -n   F8  select-window -t :8
+# bind -n   F9  select-window -t :9
+# bind -n   F10 select-window -t :10
+# bind -n   F11 select-window -t :11
+# bind -n   F12 select-window -t :12
+# bind -n S-F1  select-window -t :13
+# bind -n S-F2  select-window -t :14
+# bind -n S-F3  select-window -t :15
+# bind -n S-F4  select-window -t :16
+# bind -n S-F5  select-window -t :17
+# bind -n S-F6  select-window -t :18
+# bind -n S-F7  select-window -t :19
+# bind -n S-F8  select-window -t :20
+
+
+# clear screen then clear history
+# bind -n <-- means no need to send the prefix
+
+# obsolete?
+# bind -n C-l send-keys 'C-l'
+# bind -n C-l send-keys C-l \; run-shell "sleep 0.3" \; clear-history
+# Turns out hitting Ctrl+l (lowercase L) twice will clear the visible lines and then the buffer with default tmux bindings
+
+# Intuitive splitting
+# Split into panes, but stay in the current path
+bind | split-window -h -c '#{pane_current_path}'
+bind - split-window -v -c '#{pane_current_path}'
+bind _ split-window -v -c '#{pane_current_path}'
+
+# create new window, stay in the current path
+bind c new-window -c '#{pane_current_path}'
+
+# bind kill-session to C-b k
+bind k kill-session
+
+
+# switch panes using Alt-arrow without prefix
+# bind M-Left select-pane -L
+# bind M-Right select-pane -R
+# bind M-Up select-pane -U
+# bind M-Down select-pane -D
+
+#------------------------------------------------------------------------------
+
+#   HOOKS
+#------------------------------------------------------------------------------
 
+# To refresh status bar after selecting a pane or when there is an alert
+set-hook -g after-select-pane "refresh-client -S"
+set-hook -g alert-activity "refresh-client -S"
 
-# Highlight active window
-#set-window-option -g window-status-current-bg red
 
-#----------------
-# CUSTOMIZATION
-#----------------
+
+#------------------------------------------------------------------------------
+#   ACTIVITY MONITORING
+#------------------------------------------------------------------------------
+
+# Monitor and alert whenever the output changes
+set -gw monitor-activity on
+set -gw activity-action none
+set -g visual-activity on
+
+
+
+
+#------------------------------------------------------------------------------
+#   SOME KATA
+#------------------------------------------------------------------------------
 
 #reload this file
-bind M-r source-file ~/.tmux.conf \; display-message "tmux configuration reloaded!"
+bind F5 source-file ~/.tmux.conf \; \
+     display-message "tmux configuration reloaded!"
 
 # launch ssh in another window
 bind M-s command-prompt -p "ssh" "new-window -n ssh:%1 'exec ssh %1'"
@@ -81,7 +229,7 @@ bind M-i new-window -n irc \; \
 
 # open postgresql on another window
 bind M-p new-window -n psql \; \
-     send-keys -t :psql 'psql -d template1' C-m \; \
+     send-keys -t :psql 'psql -U postgres -W -h localhost' C-m \; \
      select-window -t :psql
 
 #
@@ -98,3 +246,14 @@ bind M-v command-prompt -p "vlc " "new-window -n vlc -c /home/nsukami/Musique 'e
      send-key -t :vlc.0 'playlist' C-m \; \
      select-pane -t :vlc.0 \; \
      last-window -t : "
+
+
+
+#------------------------------------------------------------------------------
+#   OFTEN USED SESSIONS
+#------------------------------------------------------------------------------
+
+bind F source-file ~/.tmux/etudes.conf
+bind G source-file ~/.tmux/events.conf
+bind J source-file ~/.tmux/jalv2.conf
+bind P source-file ~/.tmux/pelican.conf