really hated the ad hoc scheme for doing this before, so have moved everything into a terminal_titler file. also have implemented a stack of titles, since you never know how many things have gone on before you; just one title is not enough for a cascade of operations that could possibly set titles.
#!/bin/bash
-# wraps our calling the secure shell and lets us pick our credentials.
+# wraps calling the secure shell to let us pick our appropriate credentials.
-source "$FEISTY_MEOW_LOADING_DOCK/custom/scripts/pick_credentials.sh"
-
-if [ -z "$PRIOR_TERMINAL_TITLE" ]; then
- # save the former terminal title if we're running in X with xterm.
-# PRIOR_TERMINAL_TITLE=
- which xprop &>/dev/null
- if [ $? -eq 0 ]; then
- if [[ "$TERM" =~ .*"xterm".* ]]; then
- PRIOR_TERMINAL_TITLE="$(xprop -id $WINDOWID | perl -nle 'print $1 if /^WM_NAME.+= \"(.*)\"$/')"
+source "$FEISTY_MEOW_SCRIPTS/tty/terminal_titler.sh"
-echo "no prior title record existed, so saving prior title as '$PRIOR_TERMINAL_TITLE'"
+#hmmm: is this still used???
+# it seems redundant with the ssh config file that says which creds to use.
+source "$FEISTY_MEOW_LOADING_DOCK/custom/scripts/pick_credentials.sh"
- fi
- fi
-fi
+# remember the old title.
+save_terminal_title
# force the TERM variable to a more generic version for other side.
# we don't want the remote side still thinking it's running xterm.
if [ ! -z "$keyfile" ]; then
\ssh -i "$keyfile" -X -C $*
-#-c blowfish-cbc
else
\ssh -X -C $*
-#-c blowfish-cbc
-fi
-
-if [ $? -eq 0 ]; then
- # we don't want to emit anything extra if this is being driven by git.
- if [ -z "$(echo $* | grep git)" ]; then
- # re-run the terminal labeller after coming back from ssh.
- # we check the exit value because we don't want to update this for a failed connection.
- if [ -z "$PRIOR_TERMINAL_TITLE" ]; then
-echo prior title nil new label
- bash $FEISTY_MEOW_SCRIPTS/tty/label_terminal_with_infos.sh
- else
-echo "using prior title of '$PRIOR_TERMINAL_TITLE'"
- bash $FEISTY_MEOW_SCRIPTS/tty/set_term_title.sh "$PRIOR_TERMINAL_TITLE"
- # remove the value for this, since we did our job on it.
- unset PRIOR_TERMINAL_TITLE
- fi
- fi
fi
+restore_terminal_title
# or at least suse doesn't, which is the other one we've tested on.
/bin/su -l $*
fi
-
-#NO! # relabel the console after returning.
-#NO! bash $FEISTY_MEOW_SCRIPTS/tty/label_terminal_with_infos.sh
-# fix this to set the old title back in place!
-
}
# sudo function wraps the normal sudo by ensuring we replace the terminal
# label if they're doing an su with the sudo.
function sudo() {
- local first_command="$1"
+# local first_command="$1"
+ save_terminal_title
/usr/bin/sudo "$@"
- if [ "$first_command" == "su" ]; then
- # yep, they were doing an su, but they're back now.
- bash $FEISTY_MEOW_SCRIPTS/tty/label_terminal_with_infos.sh
- fi
+ restore_terminal_title
+# if [ "$first_command" == "su" ]; then
+# # yep, they were doing an su, but they're back now.
+# label_terminal_with_info
+# fi
}
# trashes the .#blah files that cvs and svn leave behind when finding conflicts.
# having migrated from korn shell...).
source "$FEISTY_MEOW_SCRIPTS/core/functions.sh"
+# load some helper methods for the terminal which we'll use below.
+source "$FEISTY_MEOW_SCRIPTS/tty/terminal_titler.sh"
+
##############
# check hash table before searching path.
source "$FEISTY_MEOW_LOADING_DOCK/fmc_core_and_custom_aliases.sh"
fi
-## disabled since we don't think is needed any more, and it's just an
-## attack surface if the other users on the host are not trusted.
-# # allow connections to our x server from the local host.
-# if [ ! -z "$DISPLAY" ]; then
-# if [ ! -z "$(echo "$OS_TYPE" | grep -i darwin)" ]; then
-# if [ ! -z "$SHELL_DEBUG" ]; then echo "Enabling localhost X connections..."; fi
-# xhost + localhost >/dev/null 2>&1
-# fi
-# fi
-
- # a minor tickle of the title of the terminal, in case there is one.
- bash $FEISTY_MEOW_SCRIPTS/tty/label_terminal_with_infos.sh
+ # a minor tickle of the title of the terminal, unless we already have some history.
+ if ptt_stack_empty; then
+ label_terminal_with_info
+ fi
if [ ! -z "$SHELL_DEBUG" ]; then echo "heavyweight init is done."; fi
fi
+++ /dev/null
-#!/bin/bash
-
-# this script makes a new title for the terminal window that matches the
-# hostname and some other details.
-
-source $FEISTY_MEOW_SCRIPTS/core/functions.sh
-
-# we only label the terminal anew if there's no saved title.
-
-#hmmm: how about putting that title back in place?
-# we currently do this manually in places, like ssh, which is dumb.
-
-
-if [ -z "$PRIOR_TERMINAL_TITLE" ]; then
- pruned_host=$(echo $HOSTNAME | sed -e 's/^\([^\.]*\)\..*$/\1/')
- date_string=$(date +"%Y %b %e @ %T")
-
- user=$USER
- if [ -z "$user" ]; then
- # try snagging the windoze name.
- user=$USERNAME
- fi
-
- new_title="-- $user@$pruned_host -- [$date_string]"
-
- bash "$FEISTY_MEOW_SCRIPTS/tty/set_term_title.sh" "$new_title"
-fi
+++ /dev/null
-#!/bin/bash
-
-# terminal labeller: sets the current terminal's title to the arguments
-# specified on the command line, or if those are blank, set the title to
-# the hostname.
-
-title="$*"
-if [ -z "${title}" ]; then
- title="$(hostname)"
-fi
-#echo title will be $title
-
-echo -n -e "\033]0;${title}\007"
-
--- /dev/null
+#!/bin/bash
+
+source $FEISTY_MEOW_SCRIPTS/core/functions.sh
+
+# just saying this is an array...
+declare -a PRIOR_TERMINAL_TITLES
+# set the stack position if not already set.
+if [ -z "$PTT_STACK_INDEX" ]; then
+ # this variable records where we will push new items on the stack.
+ PTT_STACK_INDEX=0
+fi
+
+# adds an entry into the stack of terminal titles.
+function push_ptt_stack()
+{
+ PRIOR_TERMINAL_TITLES[$PTT_STACK_INDEX]="$*"
+echo now list has:
+echo ${PRIOR_TERMINAL_TITLES[@]}
+ ((PTT_STACK_INDEX++))
+echo stack index incremented and now at $PTT_STACK_INDEX
+}
+
+function pop_ptt_stack()
+{
+ if [ $PTT_STACK_INDEX -le 0 ]; then
+ echo nothing to pop from prior terminal titles stack.
+ else
+ ((PTT_STACK_INDEX--))
+echo stack index decremented and now at $PTT_STACK_INDEX
+ CURRENT_TERM_TITLE="${PRIOR_TERMINAL_TITLES[$PTT_STACK_INDEX]}"
+ fi
+}
+
+# returns okay (0) if the stack is empty, or non-zero if not empty.
+function ptt_stack_empty()
+{
+ test $PTT_STACK_INDEX -le 0
+}
+
+# puts a specific textual label on the terminal title bar.
+# this doesn't consider any previous titles; it just labels the terminal.
+# the title may not be visible in some window managers.
+function set_terminal_title()
+{
+ title="$*"
+ # if we weren't given a title, then use just the hostname. this is the degraded functionality.
+ if [ -z "${title}" ]; then
+ title="$(hostname)"
+ fi
+ echo -n -e "\033]0;${title}\007"
+}
+
+# reads the current terminal title, if possible, and saves it to our stack of titles.
+function save_terminal_title()
+{
+ # save the former terminal title if we're running in X with xterm.
+ which xprop &>/dev/null
+ if [ $? -eq 0 ]; then
+ if [[ "$TERM" =~ .*"xterm".* ]]; then
+ local prior_title="$(xprop -id $WINDOWID | perl -nle 'print $1 if /^WM_NAME.+= \"(.*)\"$/')"
+echo "saving prior terminal title as '$prior_title'"
+ push_ptt_stack "$prior_title"
+ fi
+ fi
+}
+
+# using our stored terminal title, this replaces the title on the terminal.
+function restore_terminal_title()
+{
+# we don't want to emit anything extra if this is being driven by git.
+#hmmm... this could be a problem?
+# if [ -z "$(echo $* | grep git)" ]; then
+
+ # run the terminal labeller to restore the prior title, if there was one.
+ if ptt_stack_empty; then
+echo prior titles were empty, so doing nothing.
+ else
+ pop_ptt_stack
+echo "restoring prior terminal title of '$CURRENT_TERM_TITLE'"
+ set_terminal_title "$CURRENT_TERM_TITLE"
+ fi
+}
+
+# sets a title for the terminal with the hostname and other details.
+function label_terminal_with_info()
+{
+ # we only label the terminal anew if there's no saved title.
+# if [ -z "$PRIOR_TERMINAL_TITLE" ]; then
+ if ptt_stack_empty; then
+ pruned_host=$(echo $HOSTNAME | sed -e 's/^\([^\.]*\)\..*$/\1/')
+ date_string=$(date +"%Y %b %e @ %T")
+ user=$USER
+ if [ -z "$user" ]; then
+ # try snagging the windoze name.
+ user=$USERNAME
+ fi
+ new_title="-- $user@$pruned_host -- [$date_string]"
+ set_terminal_title "$new_title"
+ else
+ # restore the former title.
+ restore_terminal_title
+ fi
+}
+
+