Terminal window and tab titles are correctly escaped. Also, files ending in ~ are gitignored

This commit is contained in:
Demetri Obenour 2014-01-13 21:27:23 -05:00
commit 948f9b4441
2 changed files with 41 additions and 17 deletions

1
.gitignore vendored
View file

@ -7,3 +7,4 @@ custom/*
*.swp *.swp
!custom/example.zshcache !custom/example.zshcache
cache/ cache/
*~

View file

@ -3,33 +3,56 @@
#Fully support screen, iterm, and probably most modern xterm and rxvt #Fully support screen, iterm, and probably most modern xterm and rxvt
#Limited support for Apple Terminal (Terminal can't set window or tab separately) #Limited support for Apple Terminal (Terminal can't set window or tab separately)
function title { function title {
if [[ "$DISABLE_AUTO_TITLE" == "true" ]] || [[ "$EMACS" == *term* ]]; then if [[ "$DISABLE_AUTO_TITLE" == "true" ]] || [[ "$EMACS" == *term* ]]; then
return return
fi fi
if [[ "$TERM" == screen* ]]; then if [[ "$TERM" == screen* ]]; then
print -Pn "\ek$1:q\e\\" #set screen hardstatus, usually truncated at 20 chars 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 elif [[ "$TERM" == xterm* ]] || [[ $TERM == rxvt* ]] || [[ $TERM == ansi ]] || [[ "$TERM_PROGRAM" == "iTerm.app" ]]; then
print -Pn "\e]2;$2:q\a" #set window name # print -r "$2:q" 1>&2
print -Pn "\e]1;$1:q\a" #set icon (=tab) name (will override window name on broken terminal) # print -r "$1:q" 1>&2
fi print -Pn "\e]2;$2:q\a" #set window name
print -Pn "\e]1;$1:q\a" #set icon (=tab) name (will override window name on broken terminal)
fi
} }
ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD ZSH_THEME_TERM_TAB_TITLE_IDLE="%15<..<%~%<<" #15 char left truncated PWD
ZSH_THEME_TERM_TITLE_IDLE="%n@%m: %~" ZSH_THEME_TERM_TITLE_IDLE="%a@%m: %~"
#Appears when you have the prompt #Appears when you have the prompt
function omz_termsupport_precmd { function omz_termsupport_precmd {
title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE title $ZSH_THEME_TERM_TAB_TITLE_IDLE $ZSH_THEME_TERM_TITLE_IDLE
} }
#Appears at the beginning of (and during) of command execution #Appears at the beginning of (and during) of command execution
function omz_termsupport_preexec { function omz_termsupport_preexec {
emulate -L zsh emulate -L zsh
setopt extended_glob setopt extended_glob
local CMD=${1[(wr)^(*=*|sudo|ssh|rake|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd local CMD=${1[(wr)^(*=*|sudo|ssh|rake|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
local LINE="${2:gs/$/\\$}" CMD=${CMD:gs/\\/\\\\} # escapses \ -- must be first
LINE="${LINE:gs/%/%%}" local LINE=${2:gs/\\/\\\\} # escapes \ -- must be first
title "$CMD" "%100>...>$LINE%<<"
if [[ -o PROMPT_BANG ]]; then
# We must escape ! so that it is not interpreted as a history event number
LINE=${LINE:gs/\!/\!\!}
CMD=${CMD:gs/\!/\!\!}
fi
if [[ -o PROMPT_SUBST ]]; then
# We must escape $ and `, as both initiate command substitution and
# the former also initiates arithmetic and parameter expansion
CMD=${CMD:gs/$/\\$}
CMD=${CMD:gs/\`/\\\`}
LINE=${LINE:gs/$/\\$}
LINE=${LINE:gs/\`/\\\`}
fi
if [[ -o PROMPT_PERCENT ]]; then
# We must escape % so that it is not interpreted as starting an escape sequence
CMD=${CMD:gs/%/%%}
LINE=${LINE:gs/%/%%}
fi
title "${CMD}" "%100>...>${LINE}%<<"
} }
autoload -U add-zsh-hook autoload -U add-zsh-hook