various changes
authorJoerg Jaspert <joerg@ganneff.de>
Wed, 17 Apr 2013 08:39:20 +0000 (10:39 +0200)
committerJoerg Jaspert <joerg@ganneff.de>
Wed, 17 Apr 2013 08:39:20 +0000 (10:39 +0200)
- add new variable, TMSESSHOST. decides if our automatic session name
  has our hostname prepended, or not. Default true (backwards compatible)
- fix the generation of the session name in ms mode
- allow to attach to session name, even if it doesnt fit our usual schema
- use the session name as window name if opening a session defined from a .tmux.d
  snippet

bin/tm

diff --git a/bin/tm b/bin/tm
index 7bb107d..2785370 100755 (executable)
--- a/bin/tm
+++ b/bin/tm
@@ -55,11 +55,17 @@ TMOPTS=${TMOPTS:-"-2"}
 # as a shortcut.
 declare -r TMDIR=${TMDIR:-"${HOME}/.tmux.d"}
 
+# Should we prepend the hostname to autogenerated session names?
+# Example: Call tm ms host1 host2.
+# TMSESSHOST=true  -> session name is HOSTNAME_host1_host2
+# TMSESSHOST=false -> session name is host1_host2
+declare -r TMSESSHOST=${TMSESSHOST:-"true"}
+
 # Where does your tmux starts numbering its windows? Mine does at 1,
 # default for tmux is 0. We try to find it out, but if we fail, (as we
 # only check $HOME/.tmux.conf you can set this variable to whatever it
 # is for your environment.
-if [ -f "${HOME}/.tmux.conf" ]; then
+if [[ -f ${HOME}/.tmux.conf ]]; then
     bindex=$(grep ' base-index ' ${HOME}/.tmux.conf || echo 0 )
     bindex=${bindex//* }
 else
@@ -138,12 +144,12 @@ case ${cmdline} in
         # with the same hosts again.
         sess="${*}"
 
-        if [[ "${TMSORT}" = "true" ]]; then
+        if [[ ${TMSORT} = true ]]; then
             one=$1
             # get rid of first argument (s|ms), we don't want to sort this
             shift
-            sess="$one $(for i in $sess; do echo $i; done | sort | tr '\n' ' ')"
-            sess=${sess%% *}
+            sess=$(for i in $*; do echo $i; done | sort | tr '\n' ' ')
+            sess="${one} ${sess% *}"
         else
             # no sorting, wanted, so we just get rid of first argument (s|ms)
             shift
@@ -151,14 +157,22 @@ case ${cmdline} in
 
         # Neither space nor dot are friends in the SESSION name
         sess=${sess// /_}
-        sess=${sess//./_}
-
-        declare -r SESSION="${SESSION:-$(hostname -s)}${sess}"
+        SESSION=${sess//./_}
         ;;
     *)
         # Nothing special (or something in our tmux.d)
         if [ $# -lt 1 ]; then
-            usage
+            SESSION=${SESSION:-""}
+            if [[ -n "${SESSION}" ]]; then
+                # Environment has SESSION set, wherever from. So lets
+                # see if its an actual tmux session
+                if ! tmux has-session -t "${SESSION}" 2>/dev/null; then
+                    # It is not. And no argument. Show usage
+                    usage
+                fi
+            else
+                usage
+            fi
         fi
         if [ -r "${TMDIR}/$1" ]; then
             # Set IFS to be NEWLINE only, not also space/tab, as our input files
@@ -170,10 +184,10 @@ case ${cmdline} in
             # Restore IFS
             IFS=${OLDIFS}
 
-            SESSION="$(hostname -s)_${TMDATA[0]}"
+            SESSION=${TMDATA[0]}
             # Neither space nor dot are friends in the SESSION name
             SESSION=${SESSION// /_}
-            declare -r SESSION=${SESSION//./_}
+            SESSION=${SESSION//./_}
 
             if [ "${TMDATA[1]}" != "NONE" ]; then
                 TMOPTS=${TMDATA[1]}
@@ -181,10 +195,18 @@ case ${cmdline} in
         else
             # Not a config file, so just session name.
             TMDATA=""
-            declare -r SESSION="${SESSION:-$(hostname -s)}${cmdline}"
+            if tmux has-session -t "${cmdline}" 2>/dev/null; then
+                # Existing session, just use it
+                SESSION=${cmdline}
+            fi
         fi
         ;;
 esac
+if [[ ${TMSESSHOST} = true ]]; then
+    declare -r SESSION="$(hostname -s)_${SESSION}"
+else
+    declare -r SESSION
+fi
 
 # We only do special work if the SESSION does not already exist.
 if ! tmux has-session -t ${SESSION} 2>/dev/null; then
@@ -250,7 +272,7 @@ if ! tmux has-session -t ${SESSION} 2>/dev/null; then
                 # data in our data array, the user wants his own config
 
                 # So lets start with the "first" line, before dropping into a loop
-                tmux new-session -d -s ${SESSION} -n "Multisession" "ssh ${TMDATA[2]}"
+                tmux new-session -d -s ${SESSION} -n "${TMDATA[0]}" "ssh ${TMDATA[2]}"
 
                 tmcount=${#TMDATA[@]}
                 index=3