X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Ftty%2Fterminal_titler.sh;h=e4262498080b5f89d688d2efbd15c2fa00985e65;hb=a5bb115313d0e3fc896b0b5a6746f3900ab999fb;hp=3c01d611faf1bd5ab430e4a7896de45e828ec34c;hpb=f9a2a21830b0ea5f803c17cae56573a6b18e43db;p=feisty_meow.git diff --git a/scripts/tty/terminal_titler.sh b/scripts/tty/terminal_titler.sh index 3c01d611..e4262498 100644 --- a/scripts/tty/terminal_titler.sh +++ b/scripts/tty/terminal_titler.sh @@ -3,21 +3,50 @@ source $FEISTY_MEOW_SCRIPTS/core/functions.sh # just saying this is an array... -declare -a PRIOR_TERMINAL_TITLES +#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 +# returns okay (0) if the stack is empty, or non-zero if not empty. +function ptt_stack_empty() +{ + if [ -z "$PTT_STACK_INDEX" ]; then + # fix the index value. + PTT_STACK_INDEX=0 + true + else + test $PTT_STACK_INDEX -le 0 + fi +} + +# a debugging function that should never have been necessary. +# a little bit furious the restore is failing during regenerate right now. +function show_terminal_titles() +{ + sep 14 + echo "[terminal title list now has...]" + local i=${#PRIOR_TERMINAL_TITLES[@]} + if ptt_stack_empty; then + echo the terminal title list is empty. + else + while ((i--)); do + echo "ent #$i: '${PRIOR_TERMINAL_TITLES[$i]}'" + done + fi + sep 14 +} + # 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 +#echo stack index incremented and now at $PTT_STACK_INDEX +#show_terminal_titles } function pop_ptt_stack() @@ -26,17 +55,13 @@ function pop_ptt_stack() echo nothing to pop from prior terminal titles stack. else ((PTT_STACK_INDEX--)) -echo stack index decremented and now at $PTT_STACK_INDEX +#echo stack index decremented and now at $PTT_STACK_INDEX CURRENT_TERM_TITLE="${PRIOR_TERMINAL_TITLES[$PTT_STACK_INDEX]}" +#echo "got the last title as '$CURRENT_TERM_TITLE'" +#show_terminal_titles 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. @@ -56,10 +81,15 @@ 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 + # make sure we're actually using xterm *and* that we have a window ID. + if [[ "$TERM" =~ .*"xterm".* && ! -z "$WINDOWID" ]]; 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" + if [ ! -z "$prior_title" ]; then +#echo "saving prior terminal title as '$prior_title'" + push_ptt_stack "$prior_title" +# else +#echo "not saving prior terminal title which was empty" + fi fi fi } @@ -72,11 +102,9 @@ function restore_terminal_title() # 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 + if ! ptt_stack_empty; then pop_ptt_stack -echo "restoring prior terminal title of '$CURRENT_TERM_TITLE'" +#echo "restoring prior terminal title of '$CURRENT_TERM_TITLE'" set_terminal_title "$CURRENT_TERM_TITLE" fi } @@ -85,7 +113,6 @@ echo "restoring prior terminal title of '$CURRENT_TERM_TITLE'" 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") @@ -97,8 +124,12 @@ function label_terminal_with_info() new_title="-- $user@$pruned_host -- [$date_string]" set_terminal_title "$new_title" else - # restore the former title. - restore_terminal_title + # use the former title; paste it back up there just in case. +#echo "showing prior terminal title since there was a prior title!" + pop_ptt_stack +#echo "using prior terminal title of '$CURRENT_TERM_TITLE'" + set_terminal_title "$CURRENT_TERM_TITLE" + push_ptt_stack "$CURRENT_TERM_TITLE" fi }