Aquí está mi adaptación de / etc / bashrc para zsh. Incluí la codificación porcentual de todos los caracteres de URL que lo requieren, lo cual es importante si desea que esto funcione con todos los nombres válidos de archivos y directorios.
Esto registra un precmd
enlace, que permite registrar más de una función en otros scripts y archivos de configuración.
ACTUALIZADO en marzo de 2019: se establece LC_ALL
en vacío para que no se anule LC_CTYPE
. Utilícelo precmd
para actualizar el directorio de trabajo en cada solicitud en lugar de utilizarlo chpwd
para actualizarlo cada vez que se modifique; los canales de comandos pueden modificarlo temporalmente y el terminal no debería mostrarlos. Además, puede ser útil que cada solicitud actualice el estado del terminal en caso de que se haya cambiado durante el comando anterior. Use printf -v
para escribir explícitamente en la variable en lugar de usar la sintaxis de subshell.
# Tell the terminal about the working directory whenever it changes.
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
update_terminal_cwd() {
# Identify the directory using a "file:" scheme URL, including
# the host name to disambiguate local vs. remote paths.
# Percent-encode the pathname.
local url_path=''
{
# Use LC_CTYPE=C to process text byte-by-byte. Ensure that
# LC_ALL isn't set, so it doesn't interfere.
local i ch hexch LC_CTYPE=C LC_ALL=
for ((i = 1; i <= ${#PWD}; ++i)); do
ch="$PWD[i]"
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch"
else
printf -v hexch "%02X" "'$ch"
url_path+="%$hexch"
fi
done
}
printf '\e]7;%s\a' "file://$HOST$url_path"
}
# Register the function so it is called at each prompt.
autoload add-zsh-hook
add-zsh-hook precmd update_terminal_cwd
fi