# A script to display $USER@$HOST:$PWD with PWD shortened in terminal title
# Taken mostly verbatim from 'vte.sh' provided with VTE-based shells

__term_title_urlencode() (
# This is important to make sure string manipulation is handled
# byte-by-byte.
LC_ALL=C
str="$1"
while [ -n "$str" ]; do
    safe="${str%%[!a-zA-Z0-9/:_\.\-\!\'\(\)~]*}"
    printf "%s" "$safe"
    str="${str#"$safe"}"
    if [ -n "$str" ]; then
        printf "%%%02X" "'$str"
        str="${str#?}"
    fi
done
)

__term_title () {
    printf "\033]7;file://%s%s\033\\" "${HOST:-}" "$(__term_title_urlencode "${PWD}")"
}

__term_title_prompt_command() {
    local pwd='~'
    [ "$PWD" != "$HOME" ] && pwd=${PWD/#$HOME\//\~\/}
    pwd="${pwd//[[:cntrl:]]}"
    if [ -n "$BASH_VERSION" ]; then
        if command -v hostname &>/dev/null; then
            export HOSTNAME="$(hostname)"
            export HOST="$HOSTNAME"
        fi
    fi
    printf "\033]0;%s@%s:%s\033\\%s" "${USER}" "${HOST%%.*}" "${pwd}" "$(__term_title)"
}

case "$TERM" in
    xterm*|term_title*)
        [ -n "$BASH_VERSION" ] && PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }__term_title_prompt_command"
        [ -n "$ZSH_VERSION"  ] && precmd_functions+=(__term_title_prompt_command)
        ;;
esac

# Launch it once to make sure we display the wanted title
__term_title