8354 sync regcomp(3C) with upstream (fix make catalog)
[unleashed/tickless.git] / usr / src / lib / libshell / common / fun / title
blobcf3efdcb0016e3187258e2374d3585ac7d44296f
1 # add to (+), delete from (-), set [=], or print (.) window title
2 # arguments are eval'd before printing
3 # title text string exported in TITLE_TEXT
5 function title # [ + | - | = | . ] title ...
7         typeset x t="$TITLE_TEXT"
9         case $1 in
10         +)      shift
11                 case $# in
12                 0)      ;;
13                 *)      for x
14                         do      case " $t " in
15                                 *" $x "*)       ;;
16                                 "  ")           t=$x ;;
17                                 *)              t="$t $x" ;;
18                                 esac
19                         done
20                         case $t in
21                         $TITLE_TEXT)    return 1 ;;
22                         esac
23                         ;;
24                 esac
25                 ;;
26         -)      shift
27                 case $# in
28                 0)      ;;
29                 *)      for x
30                         do      case " $t " in
31                                 *" $x "*)       t="${t%?( )$x*}${t##*$x?( )}" ;;
32                                 esac
33                         done
34                         case $t in
35                         $TITLE_TEXT)    return 1 ;;
36                         esac
37                         ;;
38                 esac
39                 ;;
40         .)      print -r -- "$TITLE_TEXT"
41                 return 0
42                 ;;
43         =)      shift
44                 t="$*"
45                 ;;
46         *)      t="$*"
47                 ;;
48         esac
49         export TITLE_TEXT="$t"
50         eval x=\"$t\"
51         case $TERM in
52         630*)                   print -nr -- $'\E[?'"${#x}"$';0v'"${x}" ;;
53         uwin*|*vt100|xterm*)    print -nr -- $'\E]0;'"${x}"$'\a' ;;
54         *)                      return 1 ;;
55         esac
56         return 0