mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-03-13 03:12:21 +01:00
Since the default and recommended config for tmux sets TERM to screen or screen-256color, this file was attempting to set tmux's title using screen hardstatus. While tmux can be configured to accept these codes, it makes more sense to simply set the window name normally, so tmux can get the title from the active pane. This commit avoids using screen hardstatus when tmux is detected, and instead uses normal window codes.
66 lines
2 KiB
Bash
66 lines
2 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}
|
|
|
|
if [[ "$TERM" == screen* ]] && [[ -z $TMUX ]]; then
|
|
print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars
|
|
elif [[ "$TERM" == xterm* ]] || [[ "$TERM" == rxvt* ]] || [[ "$TERM" == ansi ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]] || [[ -n $TMUX ]]; then
|
|
print -Pn "\e]2;$2:q\a" #set window name
|
|
print -Pn "\e]1;$1:q\a" #set icon (=tab) name
|
|
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)
|