mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-03-20 03:13:33 +01:00
This patch preserves the current behavior, but also allows a user to set the method they want used. This is useful in certain tmux setups that use both screen and xterm methods, at the very least.
90 lines
2.5 KiB
Bash
90 lines
2.5 KiB
Bash
# Set terminal window and tab/icon title
|
|
#
|
|
# usage: title short_tab_title [long_window_title]
|
|
#
|
|
# See: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#ss3.1
|
|
# Fully supports screen, iterm, and probably most modern xterm and rxvt
|
|
# (In screen, only short_tab_title is used)
|
|
# Limited support for Apple Terminal (Terminal can't set window and tab separately)
|
|
function title {
|
|
[[ "$EMACS" == *term* ]] && return
|
|
|
|
# if $2 is unset use $1 as default
|
|
# if it is set and empty, leave it as is
|
|
: ${2=$1}
|
|
|
|
case $ZSH_THEME_TERM_TITLE_TYPE in
|
|
screen)
|
|
print -Pn "\ek$1:q\e\\" #set screen title string, usually truncated at 20 chars
|
|
;;
|
|
screenlong)
|
|
print -Pn "\ek$2:q\e\\"
|
|
;;
|
|
xterm)
|
|
print -Pn "\e]2;$2:q\a" #set window name
|
|
print -Pn "\e]1;$1:q\a" #set icon (=tab) name
|
|
;;
|
|
both)
|
|
print -Pn "\ek$1:q\e\\"
|
|
print -Pn "\e]2;$2:q\a"
|
|
print -Pn "\e]1;$1:q\a"
|
|
;;
|
|
bothlong)
|
|
print -Pn "\ek$2:q\e\\"
|
|
print -Pn "\e]2;$2:q\a"
|
|
print -Pn "\e]1;$1:q\a"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
if [[ -z $ZSH_THEME_TERM_TITLE_TYPE ]] then;
|
|
if [[ "$TERM" == screen* ]]; then
|
|
ZSH_THEME_TERM_TITLE_TYPE=screen
|
|
elif [[ "$TERM" == xterm* ]] || [[ "$TERM" == rxvt* ]] || [[ "$TERM" == ansi ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
|
|
ZSH_THEME_TERM_TITLE_TYPE=xterm
|
|
fi
|
|
fi
|
|
|
|
ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD
|
|
ZSH_THEME_TERM_TITLE_IDLE="%n@%m: %~"
|
|
|
|
# Runs before showing the prompt
|
|
function omz_termsupport_precmd {
|
|
if [[ $DISABLE_AUTO_TITLE == true ]]; then
|
|
return
|
|
fi
|
|
|
|
title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE
|
|
}
|
|
|
|
# Runs before executing the command
|
|
function omz_termsupport_preexec {
|
|
if [[ $DISABLE_AUTO_TITLE == true ]]; then
|
|
return
|
|
fi
|
|
|
|
emulate -L zsh
|
|
setopt extended_glob
|
|
|
|
# cmd name only, or if this is sudo or ssh, the next cmd
|
|
local CMD=${1[(wr)^(*=*|sudo|ssh|rake|-*)]:gs/%/%%}
|
|
local LINE="${2:gs/%/%%}"
|
|
|
|
title '$CMD' '%100>...>$LINE%<<'
|
|
}
|
|
|
|
precmd_functions+=(omz_termsupport_precmd)
|
|
preexec_functions+=(omz_termsupport_preexec)
|
|
|
|
|
|
# Runs before showing the prompt, to update the current directory in Terminal.app
|
|
function omz_termsupport_cwd {
|
|
# Notify Terminal.app of current directory using undocumented OSC sequence
|
|
# found in OS X 10.9 and 10.10's /etc/bashrc
|
|
if [[ $TERM_PROGRAM == Apple_Terminal ]] && [[ -z $INSIDE_EMACS ]]; then
|
|
local PWD_URL="file://$HOSTNAME${PWD// /%20}"
|
|
printf '\e]7;%s\a' "$PWD_URL"
|
|
fi
|
|
}
|
|
|
|
precmd_functions+=(omz_termsupport_cwd)
|