diff --git a/lib/termsupport.zsh b/lib/termsupport.zsh index 5f61fe8ef..30799e785 100644 --- a/lib/termsupport.zsh +++ b/lib/termsupport.zsh @@ -6,6 +6,14 @@ # 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) + +ZSH_SCREEN_PLUGIN_ACTIVE=false +for i in $plugins; do + if [[ "$i" == "screen" ]]; then + ZSH_SCREEN_PLUGIN_ACTIVE=true + fi +done + function title { emulate -L zsh setopt prompt_subst @@ -17,8 +25,13 @@ function title { : ${2=$1} if [[ "$TERM" == screen* ]]; 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" ]]; then + # do not set the screen hardstatus, if screen plugin is active + if [[ "$ZSH_SCREEN_PLUGIN_ACTIVE" != "true" ]]; then + print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars + fi + elif [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then + print -Pn "\e]1;$1:q\a" #set icon (=tab) name (will override window name on broken terminal) + elif [[ "$TERM" == xterm* ]] || [[ $TERM == rxvt* ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then print -Pn "\e]2;$2:q\a" #set window name print -Pn "\e]1;$1:q\a" #set icon (=tab) name fi diff --git a/plugins/screen/screen.plugin.zsh b/plugins/screen/screen.plugin.zsh index 7009e7a91..ee746ddd7 100644 --- a/plugins/screen/screen.plugin.zsh +++ b/plugins/screen/screen.plugin.zsh @@ -31,24 +31,36 @@ if [[ "$TERM" == screen* ]]; then function screen_set() { # set the tab window title (%t) for screen - print -nR $'\033k'$1$'\033'\\\ + print -nR $'\033k'"$1"$'\033'\\\ # set hardstatus of tab window (%h) for screen - print -nR $'\033]0;'$2$'\a' + print -nR $'\033_'"$2"$'\033'\\\ } # called by zsh before executing a command function preexec() { - local -a cmd; cmd=(${(z)1}) # the command string - eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_EXEC" - eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_EXEC" + local -a cmd; cmd=(${(z)3}) # the command string + if [ "$TITLE" != "" ] + then + eval "tab_title=\"$TITLE\":$TAB_TITLE_EXEC" + eval "tab_hardstatus=\"$TITLE\":$TAB_HARDSTATUS_EXEC" + else + eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_EXEC" + eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_EXEC" + fi screen_set $tab_title $tab_hardstatus } # called by zsh before showing the prompt function precmd() { - eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_PROMPT" - eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_PROMPT" + if [ "$TITLE" != "" ] + then + eval "tab_title=\"$TITLE\":$TAB_TITLE_PROMPT" + eval "tab_hardstatus=\"$TITLE\":$TAB_HARDSTATUS_PROMPT" + else + eval "tab_title=$TAB_TITLE_PREFIX:$TAB_TITLE_PROMPT" + eval "tab_hardstatus=$TAB_HARDSTATUS_PREFIX:$TAB_HARDSTATUS_PROMPT" + fi screen_set $tab_title $tab_hardstatus } -fi \ No newline at end of file +fi