dot-files/scripts/term-title

46 lines
1.3 KiB
Plaintext
Raw Normal View History

# 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="__term_title_prompt_command;$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