# add to (+), delete from (-), set [=], or print (.) window title
# arguments are eval'd before printing
# title text string exported in TITLE_TEXT

function title # [ + | - | = | . ] title ...
{
	typeset	x t="$TITLE_TEXT"

	case $1 in
	+)	shift
		case $# in
		0)	;;
		*)	for x
			do	case " $t " in
				*" $x "*)	;;
				"  ")		t=$x ;;
				*)		t="$t $x" ;;
				esac
			done
			case $t in
			$TITLE_TEXT)	return 1 ;;
			esac
			;;
		esac
		;;
	-)	shift
		case $# in
		0)	;;
		*)	for x
			do	case " $t " in
				*" $x "*)	t="${t%?( )$x*}${t##*$x?( )}" ;;
				esac
			done
			case $t in
			$TITLE_TEXT)	return 1 ;;
			esac
			;;
		esac
		;;
	.)	print -r -- "$TITLE_TEXT"
		return 0
		;;
	=)	shift
		t="$*"
		;;
	*)	t="$*"
		;;
	esac
	export TITLE_TEXT="$t"
	eval x=\"$t\"
	case $TERM in
	630*)			print -nr -- $'\E[?'"${#x}"$';0v'"${x}" ;;
	uwin*|*vt100|xterm*)	print -nr -- $'\E]0;'"${x}"$'\a' ;;
	*)			return 1 ;;
	esac
	return 0
}