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
!custom/example.zshcache
cache/
*~

View file

@ -3,33 +3,56 @@
#Fully support screen, iterm, and probably most modern xterm and rxvt
#Limited support for Apple Terminal (Terminal can't set window or tab separately)
function title {
if [[ "$DISABLE_AUTO_TITLE" == "true" ]] || [[ "$EMACS" == *term* ]]; then
return
fi
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
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
if [[ "$DISABLE_AUTO_TITLE" == "true" ]] || [[ "$EMACS" == *term* ]]; then
return
fi
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
# print -r "$2:q" 1>&2
# print -r "$1:q" 1>&2
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_TITLE_IDLE="%n@%m: %~"
ZSH_THEME_TERM_TITLE_IDLE="%a@%m: %~"
#Appears when you have the prompt
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
function omz_termsupport_preexec {
emulate -L zsh
setopt extended_glob
local CMD=${1[(wr)^(*=*|sudo|ssh|rake|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
local LINE="${2:gs/$/\\$}"
LINE="${LINE:gs/%/%%}"
title "$CMD" "%100>...>$LINE%<<"
emulate -L zsh
setopt extended_glob
local CMD=${1[(wr)^(*=*|sudo|ssh|rake|-*)]} #cmd name only, or if this is sudo or ssh, the next cmd
CMD=${CMD:gs/\\/\\\\} # escapses \ -- must be first
local LINE=${2:gs/\\/\\\\} # escapes \ -- must be first
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