@ -2,122 +2,123 @@
# Sets terminal window and tab titles.
# Sets terminal window and tab titles.
#
#
# Authors:
# Authors:
# James Cox <james@imaj.es>
# Sorin Ionescu <sorin.ionescu@gmail.com>
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
#
# Return if requirements are not found.
# Return if requirements are not found.
if [ [ " $TERM " = = 'dumb' ] ] ; then
if [ [ " $TERM " = = ( dumb| linux| *bsd*) ] ] ; then
return 1
return 1
fi
fi
# Set the GNU Screen window number.
# Sets the terminal or terminal multiplexer window title.
if [ [ -n " $WINDOW " ] ] ; then
function set-window-title {
export SCREEN_NO = " %B ${ WINDOW } %b "
local title_format{ ,ted}
else
zstyle -s ':prezto:module:terminal:window-title' format 'title_format' || title_format = "%s"
export SCREEN_NO = ""
zformat -f title_formatted " $title_format " " s: $argv "
fi
# Sets the GNU Screen title.
function set-screen-window-title {
if [ [ " $TERM " = = screen* ] ] ; then
if [ [ " $TERM " = = screen* ] ] ; then
printf "\ek%s\e\\" ${ (V)argv }
title_format = "\ek%s\e\\"
else
title_format = "\e]2;%s\a"
fi
fi
}
# Sets the terminal window title.
printf " $title_format " " ${ (V%)title_formatted } "
function set-terminal-window-title {
if [ [ " $TERM " = = ( ( x| a| ml| dt| E) term*| ( u| ) rxvt*) ] ] ; then
printf "\e]2;%s\a" ${ (V)argv }
fi
}
}
# Sets the terminal tab title.
# Sets the terminal tab title.
function set-terminal-tab-title {
function set-tab-title {
if [ [ " $TERM " = = ( ( x| a| ml| dt| E) term*| ( u| ) rxvt*) ] ] ; then
local title_format{ ,ted}
printf "\e]1;%s\a" ${ (V)argv }
zstyle -s ':prezto:module:terminal:tab-title' format 'title_format' || title_format = "%s"
fi
zformat -f title_formatted " $title_format " " s: $argv "
printf "\e]1;%s\a" ${ (V%)title_formatted }
}
}
# Sets the tab and window titles with a given command.
# Sets the tab and window titles with a given command.
function set-titles-with-command {
function _terminal-set-titles-with-command {
# Do not set the window and tab titles in Terminal.app because they are not
# reset upon command termination.
if [ [ " $TERM_PROGRAM " = = 'Apple_Terminal' ] ] ; then
return 1
fi
emulate -L zsh
emulate -L zsh
setopt EXTENDED_GLOB
setopt EXTENDED_GLOB
# Get the command name that is under job control.
# Get the command name that is under job control.
if [ [ " ${ 1 [(w)1] } " = = ( fg| %*) ( \; | ) ] ] ; then
if [ [ " ${ 2 [(w)1] } " = = ( fg| %*) ( \; | ) ] ] ; then
# Get the job name, and, if missing, set it to the default %+.
# Get the job name, and, if missing, set it to the default %+.
local job_name = " ${ ${ 1 [(wr)%*( \; |)] } :- %+ } "
local job_name = " ${ ${ 2 [(wr)%*( \; |)] } :- %+ } "
# Make a local copy for use in the subshell.
# Make a local copy for use in the subshell.
local -A jobtexts_from_parent_shell
local -A jobtexts_from_parent_shell
jobtexts_from_parent_shell = ( ${ (kv)jobtexts } )
jobtexts_from_parent_shell = ( ${ (kv)jobtexts } )
jobs $job_name 2>/dev/null > >(
jobs " $job_name " 2>/dev/null > >(
read index discarded
read index discarded
# The index is already surrounded by brackets: [1].
# The index is already surrounded by brackets: [1].
set-titles-with-command " ${ (e) :- \$ jobtexts_from_parent_shell $index } "
_terminal- set-titles-with-command " ${ (e) :- \$ jobtexts_from_parent_shell $index } "
)
)
else
else
# Set the command name, or in the case of sudo or ssh, the next command.
# Set the command name, or in the case of sudo or ssh, the next command.
local cmd = ${ ${ 1 [(wr)^(*=*|sudo|ssh|-*)] } : t }
local cmd = " ${ ${ 2 [(wr)^(*=*|sudo|ssh|-*)] } : t } "
local truncated_cmd = " ${ cmd /(#m)?(#c15,)/ ${ MATCH [1,12] } ... } "
local truncated_cmd = " ${ cmd /(#m)?(#c15,)/ ${ MATCH [1,12] } ... } "
unset MATCH
unset MATCH
if [ [ " $TERM " = = screen* ] ] ; then
set-window-title " $cmd "
set-screen-window-title " $truncated_cmd "
set-tab-title " $truncated_cmd "
else
set-terminal-window-title " $cmd "
set-terminal-tab-title " $truncated_cmd "
fi
fi
fi
}
}
# Sets the tab and window titles with a given path.
# Sets the tab and window titles with a given path.
function set-titles-with-path {
function _terminal- set-titles-with-path {
emulate -L zsh
emulate -L zsh
setopt EXTENDED_GLOB
setopt EXTENDED_GLOB
local absolute_path = " ${ ${ 1 : a } :- $PWD } "
local absolute_path = " ${ ${ 1 : a } :- $PWD } "
if [ [ " $TERM_PROGRAM " = = 'Apple_Terminal' ] ] ; then
printf '\e]7;%s\a' " file:// $HOST ${ absolute_path // /%20 } "
else
local abbreviated_path = " ${ absolute_path /# $HOME /~ } "
local abbreviated_path = " ${ absolute_path /# $HOME /~ } "
local truncated_path = " ${ abbreviated_path /(#m)?(#c15,)/... ${ MATCH [-12,-1] } } "
local truncated_path = " ${ abbreviated_path /(#m)?(#c15,)/... ${ MATCH [-12,-1] } } "
unset MATCH
unset MATCH
if [ [ " $TERM " = = screen* ] ] ; then
set-window-title " $abbreviated_path "
set-screen-window -title " $truncated_path "
set-tab -title " $truncated_path "
else
}
set-terminal-window-title " $abbreviated_path "
set-terminal-tab-title " $truncated_path "
# Sets the Terminal.app proxy icon.
f i
f unct ion _terminal-set-terminal-app-proxy-icon {
fi
printf '\e]7;%s\a' " file:// $HOST ${ ${ 1 :- $PWD } // /%20 } "
}
}
# Do n't override precmd/preexec; append to hook array.
# Do not override precmd/preexec; append to the hook array.
autoload -Uz add-zsh-hook
autoload -Uz add-zsh-hook
# Sets the tab and window titles before the prompt is displayed.
# Set up the Apple Terminal.
function set-titles-precmd {
if [ [ " $TERM_PROGRAM " = = 'Apple_Terminal' ] ] \
if zstyle -t ':prezto:module:terminal' auto-title; then
&& ( ! [ [ -n " $STY " || -n " $TMUX " || -n " $DVTM " ] ] )
set-titles-with-path
then
# Sets the Terminal.app current working directory before the prompt is
# displayed.
add-zsh-hook precmd _terminal-set-terminal-app-proxy-icon
# Unsets the Terminal.app current working directory when a terminal
# multiplexer or remote connection is started since it can no longer be
# updated, and it becomes confusing when the directory displayed in the title
# bar is no longer synchronized with real current working directory.
function _terminal-unset-terminal-app-proxy-icon {
if [ [ " ${ 2 [(w)1] : t } " = = ( screen| tmux| dvtm| ssh| mosh) ] ] ; then
_terminal-set-terminal-app-proxy-icon ' '
fi
fi
}
}
add-zsh-hook precmd set-titles-precmd
add-zsh-hook preexec _terminal-unset-terminal-app-proxy-icon
# Do not set the tab and window titles in Terminal.app since it sets the tab
# title to the currently running process by default and the current working
# directory is set separately.
return
fi
# Set up non-Apple terminals.
if zstyle -t ':prezto:module:terminal' auto-title \
&& ( ! [ [ -n " $STY " || -n " $TMUX " ] ] )
then
# Sets the tab and window titles before the prompt is displayed.
add-zsh-hook precmd _terminal-set-titles-with-path
# Sets the tab and window titles before command execution.
# Sets the tab and window titles before command execution.
function set-titles-preexec {
add-zsh-hook preexec _terminal-set-titles-with-command
if zstyle -t ':prezto:module:terminal' auto-title; then
set-titles-with-command " $2 "
fi
fi
}
add-zsh-hook preexec set-titles-preexec