]> ruderich.org/simon Gitweb - config/dotfiles.git/blobdiff - zsh/rc
zsh/rc: Add option to use tmux instead of screen.
[config/dotfiles.git] / zsh / rc
diff --git a/zsh/rc b/zsh/rc
index 4f5d10029e595ba1af957c5eecdf7d070440323b..a1acba570b2a2686aa85a9538af9d9600478e82c 100644 (file)
--- a/zsh/rc
+++ b/zsh/rc
@@ -370,7 +370,7 @@ if [[ $TERM == screen* || $TERM == xterm* || $TERM == rxvt* ]]; then
         # Replace fg with the resumed job name.
         if [[ $program_name == fg ]]; then
             program_name=${jobtexts[%+]}
-        elif [[ $program_name == fg* ]]; then
+        elif [[ $program_name == fg* ]]; then
             program_name=${jobtexts[${program_name#fg }]}
         fi
 
@@ -541,7 +541,7 @@ zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
 # is no longer displayed. Display current position in percent (%p).
 zstyle ':completion:*:default' list-prompt '%p'
 # Display group name (%d) (like 'external command', 'alias', etc.), in bold.
-# Also display a message if _approximate found errors and if no matches were
+# Also display a message if _approximate found errors and no matches were
 # found.
 zstyle ':completion:*'             format '    %B%d%b:'
 zstyle ':completion:*:corrections' format '    %B%d%b (errors: %e)'
@@ -699,26 +699,47 @@ fi
 
 # LOAD ADDITIONAL CONFIGURATION FILES
 
+# Configuration option for rc.local to use tmux. By default screen is used.
+use_tmux=
+
 source_config ~/.zsh/rc.local
 
 
 # RUN COMMANDS
 
-# If not already in screen reattach to a running session or create a new one.
-# This also starts screen on a remote server when connecting through ssh.
-if [[ $TERM != dumb && $TERM != linux && -z $STY ]]; then
+# If not already in screen or tmux, reattach to a running session or create a
+# new one. This also starts screen/tmux on a remote server when connecting
+# through ssh.
+if [[ $TERM != dumb && $TERM != linux && -z $STY && -z $TMUX ]]; then
     # Get running detached sessions.
+    if [[ -z $use_tmux ]]; then
     session=$(screen -list | grep 'Detached' | awk '{ print $1; exit }')
+    else
+        session=$(tmux list-sessions 2>/dev/null \
+                  | sed '/(attached)$/ d; s/^\([0-9]\{1,\}\).*$/\1/; q')
+    fi
 
     # As we exec later we have to set the title here.
+    if [[ -z $use_tmux ]]; then
     window_preexec "screen"
+    else
+        window_preexec "tmux"
+    fi
 
     # Create a new session if none is running.
     if [[ -z $session ]]; then
+        if [[ -z $use_tmux ]]; then
         exec screen
+        else
+            exec tmux
+        fi
     # Reattach to a running session.
     else
+        if [[ -z $use_tmux ]]; then
         exec screen -r $session
+        else
+            exec tmux attach-session -t $session
+        fi
     fi
 fi
 
@@ -730,7 +751,7 @@ fi
 # cases it doesn't work, the E alias can be used as workaround.
 #
 # Moved in the "run commands" section to prevent one unnecessary zsh process
-# when starting screen (see above).
+# when starting screen/tmux (see above).
 exec 2>>(while read -r -k -u 0 line; do
     printf '\e[91m%s\e[0m' "$line";
     print -n $'\0';
@@ -739,7 +760,7 @@ done &)
 # Run reminder and redisplay it every four hours (if it's available).
 PERIOD=14400
 periodic() {
-    which rem > /dev/null && [ -f ~/.reminders ] && rem -h
+    (( $+commands[rem] )) && [ -f ~/.reminders ] && rem -h
 }