# ELYTerminal: restore ZDOTDIR, load the user's .zshenv, report folder and title, mark prompts and commands. if [[ -n "${ELY_ZSH_ZDOTDIR+set}" ]]; then ZDOTDIR=$ELY_ZSH_ZDOTDIR builtin unset ELY_ZSH_ZDOTDIR else builtin unset ZDOTDIR fi [[ -r "${ZDOTDIR:-$HOME}/.zshenv" ]] && builtin source "${ZDOTDIR:-$HOME}/.zshenv" if [[ -o interactive ]]; then _ely_ran= _ely_first=1 _ely_precmd() { builtin local ret=$? LC_ALL=C char url= if [[ -n $_ely_ran ]]; then builtin printf '\e]133;D;%s\a' $ret _ely_ran= fi for char in ${(s::)PWD}; do case $char in [[:cntrl:]]|%) builtin printf -v char '%%%02X' "'$char" ;; esac url+=$char done builtin printf '\e]7;file://%s\a\e]2;%s\a' "$url" "${${${PWD:t}:-/}//[[:cntrl:]]/}" # Themes set PS1 in later hooks: the marks go on after them, at the first prompt through sched. precmd_functions=(${precmd_functions:#_ely_mark} _ely_mark) if (( _ely_first )); then _ely_first=0 [[ -o prompt_percent ]] || builtin print -ru2 'ELYTerminal: zsh marks no prompt while prompt_percent is off (setopt prompt_percent)' builtin zmodload zsh/sched && builtin sched +0 _ely_mark $ret fi builtin return ret } _ely_mark() { if [[ -o prompt_percent && $PS1 != *$'\e]133;A'* ]]; then PS1=$'%{\e]133;A\a%}'$PS1$'%{\e]133;B\a%}' fi # sched's command leaves its status for the prompt. builtin return ${1:-0} } _ely_preexec() { _ely_ran=1 builtin printf '\e]133;C\a\e]2;%s\a' "${1//[[:cntrl:]]/}" } builtin autoload -Uz add-zsh-hook add-zsh-hook precmd _ely_precmd add-zsh-hook precmd _ely_mark add-zsh-hook preexec _ely_preexec fi