Refactor window and tab title in tty

Term window title and tab title are now skinable
Tab title can be different from window title (when supported by term)
Default theme is optimized of usuability (no %u@%m: $~ in a 10 char tab)
Cleanup code duplication and add comment for supported terms
On osX it works great on iterm, and is decent once you tweak Terminal pref
Tested under GNU screen, iTerm and Apple Terminal, need to be tested on linux
TODO implement Konsole support (via dbus)
This commit is contained in:
Renaud (Nel) Morvan 2011-01-30 08:21:49 +01:00
parent 01b0366f3e
commit faac3ba8fc
2 changed files with 26 additions and 44 deletions

View File

@ -1,26 +1,3 @@
## fixme, i duplicated this in xterms - oops
function title {
if [[ $TERM == "screen" ]]; then
# Use these two for GNU Screen:
print -nR $'\033k'$1$'\033'\\\
print -nR $'\033]0;'$2$'\a'
elif [[ ($TERM =~ "^xterm") ]] || [[ ($TERM == "rxvt") ]]; then
# Use this one instead for XTerms:
print -nR $'\033]0;'$*$'\a'
fi
}
function precmd {
title zsh "$PWD"
}
function preexec {
emulate -L zsh
local -a cmd; cmd=(${(z)1})
title $cmd[1]:t "$cmd[2,-1]"
}
function zsh_stats() { function zsh_stats() {
history | awk '{print $2}' | sort | uniq -c | sort -rn | head history | awk '{print $2}' | sort | uniq -c | sort -rn | head
} }

View File

@ -1,21 +1,26 @@
case "$TERM" in #usage: title short_tab_title looooooooooooooooooooooggggggg_windows_title
xterm*|rxvt*) #http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#ss3.1
preexec () { #Fully support screen, iterm, and probably most modern xterm and rxvt
print -Pn "\e]0;%n@%m: $1\a" # xterm #Limited support for Apple Terminal (Terminal can't set window or tab separately)
function title {
if [[ "$TERM" == "screen" ]]; then
print -Pn "\ek$1\e\\" #set screen hardstatus, usually truncated at 20 chars
elif [[ ($TERM =~ "^xterm") ]] || [[ ($TERM == "rxvt") ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
print -Pn "\e]2;$2\a" #set window name
print -Pn "\e]1;$1\a" #set icon (=tab) name (will override window name on broken terminal)
fi
} }
precmd () {
print -Pn "\e]0;%n@%m: %~\a" # xterm ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD
ZSH_THEME_TERM_TITLE_IDLE="%n@%m: %~"
#Appears when you have the prompt
function precmd {
title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE
} }
;;
screen*) #Appears at the beginning of (and during) of command execution
preexec () { function preexec {
local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} local CMD=${1[(wr)^(*=*|sudo|ssh|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
echo -ne "\ek$CMD\e\\" title "$CMD" "%100>...>$2%<<"
print -Pn "\e]0;%n@%m: $1\a" # xterm
} }
precmd () {
echo -ne "\ekzsh\e\\"
print -Pn "\e]0;%n@%m: %~\a" # xterm
}
;;
esac