Generic handling of SSH_FORWARDED overrides.
[profile.git] / .profile.d / prompt.bashrc
index e6a8236..6398e3d 100644 (file)
@@ -1,26 +1,48 @@
-# $Id$
-#
-# Set the title of an xterm to the hostname.
-#
-
-SSH_FORWARDED=$(get_remote_ip -n)
+# Set the title of an xterm to the hostname unless the remote IP is matched by 
+# a regular expression in ~/.ssh/forwarded.
+SSH_FORWARDED=$(get_remote_ip)
 if [ ! -z "$SSH_FORWARDED" ]; then
-  if [ ! "$SSH_FORWARDED" = "62.189.242.202" -a ! "$SSH_FORWARDED" = "62.189.241.202" ]; then
-    SSH_FORWARDED=" (from $SSH_FORWARDED)"
-  else
+  if [ "$SSH_FORWARDED" = "localhost" ]; then
     SSH_FORWARDED=
+  elif [ -f ~/.ssh/forwarded ]; then
+    for forwarded in $(< ~/.ssh/forwarded); do
+      if echo "$SSH_FORWARDED" | grep "$forwarded" &>/dev/null; then
+        SSH_FORWARDED=
+      fi
+    done
+    unset forwarded
   fi
+  [ ! -z "$SSH_FORWARDED" ] && SSH_FORWARDED=" (from $(get_remote_ip -n))"
 fi
 
+# Unscientific check for grid jobs.
+case ${SSH_CLIENT##* } in
+  ""|22|2222);;
+  *) SSH_FORWARDED="$SSH_FORWARDED [grid]"
+esac
+
 info="$HOSTNAME$SSH_FORWARDED"
 
 # Check for vim.
 vimchild=" [vim]"
 if ps -o comm= -p $PPID 2>/dev/null | grep '^vim*$' &>/dev/null; then
   # Clear [vim] when exiting.
-  trap "echo -ne '\\033]0;$info\\007'" exit
+  trap "echo -ne '\\033]0;$info\\033\\0134'" exit
   info="$info$vimchild"
 fi
-blank=$(echo "$info" | sed 's/./ /g')
-export PROMPT_COMMAND="echo -ne '\033]0;$info\007\r$blank \r'"
+if [ "${TERM##screen}" = "$TERM" ]; then
+  export PROMPT_COMMAND="echo -ne '\033]0;$info\033\0134\r\033[K'"
+else
+  export PROMPT_COMMAND='echo -ne "\033k\033\0134"'
+fi
 unset blank info vimchild SSH_FORWARDED
+
+# Actual dtterm barfs on escape sequences.
+if [ "$TERMINAL_EMULATOR" = "dtterm" ]; then
+  unset PROMPT_COMMAND
+fi
+
+# As does screen on an ancient Solaris host.
+if [ -n "$OLDSOLARIS" -a ! "${TERM##screen}" = "$TERM" ]; then
+  unset PROMPT_COMMAND
+fi