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' zstyle ':prezto:module:terminal' auto-title 'yes'
Auto titling is disabled inside terminal multiplexers, except inside dvtm, since Auto titling is disabled inside terminal multiplexers (except inside dvtm)
it interferes with window names defined in configuration files and profile since it interferes with window names defined in configuration files and
managers. This can be overridden by setting it to `always`. profile managers. This can be overridden by setting it to `always`.
zstyle ':prezto:module:terminal' auto-title '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:window-title' format '%n@%m: %s'
zstyle ':prezto:module:terminal:tab-title' format '%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 `%s` will be replaced with the current working directory path or the currently
executing program name. executing program name.
For a list of sequences, see [Expansion of Prompt Sequences][1]. 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 Functions
--------- ---------
- `set-tab-title` sets the terminal tab title. - `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 Authors
------- -------

View File

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

View File

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