Improve terminal titling

Multiplexer titles can be set independent of window and tab titles.
This commit is contained in:
Olaf Conradi 2014-04-29 03:06:34 +02:00 committed by Sorin Ionescu
parent adaa029a1b
commit 5590b56a87
3 changed files with 29 additions and 41 deletions

View File

@ -13,9 +13,9 @@ directory, add the following to *zpreztorc*:
zstyle ':prezto:module:terminal' auto-title 'yes'
Auto titling is disabled inside terminal multiplexers, except inside dvtm, since
it interferes with window names defined in configuration files and profile
managers. This can be overridden by setting it to `always`.
Auto titling is disabled inside terminal multiplexers (except inside dvtm)
since it interferes with window names defined in configuration files and
profile managers. This can be overridden by setting it to `always`.
zstyle ':prezto:module:terminal' auto-title 'always'
@ -25,22 +25,19 @@ To format terminal window and tab titles, add the following to *zpreztorc*:
zstyle ':prezto:module:terminal:window-title' format '%n@%m: %s'
zstyle ':prezto:module:terminal:tab-title' format '%m: %s'
zstyle ':prezto:module:terminal:multiplexer-title' format '%s'
`%s` will be replaced with the current working directory path or the currently
executing program name.
For a list of sequences, see [Expansion of Prompt Sequences][1].
Users of terminal multiplexers like screen can choose which title format should
be used (`window-title` or `tab-title`).
zstyle ':prezto:module:terminal' multiplexer-title 'window-title'
Functions
---------
- `set-tab-title` sets the terminal tab title.
- `set-window-title` sets the terminal or terminal multiplexer window title.
- `set-window-title` sets the terminal window title.
- `set-multiplexer-title` sets the terminal multiplexer title.
Authors
-------

View File

@ -11,43 +11,28 @@ if [[ "$TERM" == (dumb|linux|*bsd*) ]]; then
return 1
fi
# Set default title for terminal multiplexers to the window title.
if zstyle -T ':prezto:module:terminal' multiplexer-title; then
zstyle ':prezto:module:terminal' multiplexer-title 'window-title'
fi
# Sets the terminal or terminal multiplexer window title.
# Sets the terminal window title.
function set-window-title {
local title_format{,ted}
zstyle -s ':prezto:module:terminal:window-title' format 'title_format' || title_format="%s"
zformat -f title_formatted "$title_format" "s:$argv"
if zstyle -t ':prezto:module:terminal' multiplexer-title 'window-title' \
&& [[ "$TERM" == screen* ]]
then
title_format="\ek%s\e\\"
else
title_format="\e]2;%s\a"
fi
printf "$title_format" "${(V%)title_formatted}"
printf '\e]2;%s\a' "${(V%)title_formatted}"
}
# Sets the terminal or terminal multiplexer tab title.
# Sets the terminal tab title.
function set-tab-title {
local title_format{,ted}
zstyle -s ':prezto:module:terminal:tab-title' format 'title_format' || title_format="%s"
zformat -f title_formatted "$title_format" "s:$argv"
printf '\e]1;%s\a' "${(V%)title_formatted}"
}
if zstyle -t ':prezto:module:terminal' multiplexer-title 'tab-title' \
&& [[ "$TERM" == screen* ]]
then
title_format="\ek%s\e\\"
else
title_format="\e]1;%s\a"
fi
printf "$title_format" "${(V%)title_formatted}"
# Sets the terminal multiplexer tab title.
function set-multiplexer-title {
local title_format{,ted}
zstyle -s ':prezto:module:terminal:multiplexer-title' format 'title_format' || title_format="%s"
zformat -f title_formatted "$title_format" "s:$argv"
printf '\ek%s\e\\' "${(V%)title_formatted}"
}
# Sets the tab and window titles with a given command.
@ -75,8 +60,11 @@ function _terminal-set-titles-with-command {
local truncated_cmd="${cmd/(#m)?(#c15,)/${MATCH[1,12]}...}"
unset MATCH
set-window-title "$cmd"
if [[ "$TERM" == screen* ]]; then
set-multiplexer-title "$truncated_cmd"
fi
set-tab-title "$truncated_cmd"
set-window-title "$cmd"
fi
}
@ -90,8 +78,11 @@ function _terminal-set-titles-with-path {
local truncated_path="${abbreviated_path/(#m)?(#c15,)/...${MATCH[-12,-1]}}"
unset MATCH
set-window-title "$abbreviated_path"
if [[ "$TERM" == screen* ]]; then
set-multiplexer-title "$truncated_path"
fi
set-tab-title "$truncated_path"
set-window-title "$abbreviated_path"
}
# Do not override precmd/preexec; append to the hook array.
@ -130,9 +121,9 @@ if zstyle -t ':prezto:module:terminal' auto-title 'always' \
|| (zstyle -t ':prezto:module:terminal' auto-title \
&& ( ! [[ -n "$STY" || -n "$TMUX" ]] ))
then
# Sets the tab and window titles before the prompt is displayed.
# Sets 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 titles before command execution.
add-zsh-hook preexec _terminal-set-titles-with-command
fi

View File

@ -143,8 +143,8 @@ zstyle ':prezto:module:prompt' theme 'sorin'
# Set the tab title format.
# zstyle ':prezto:module:terminal:tab-title' format '%m: %s'
# Choose tab-title as the multiplexer title
# zstyle ':prezto:module:terminal' multiplexer-title 'tab-title'
# Set the terminal multiplexer title format.
# zstyle ':prezto:module:terminal:multiplexer-title' format '%s'
#
# Tmux