Inilah adaptasi saya dari / etc / bashrc untuk zsh. Saya telah menyertakan penyandian-persen semua karakter URL yang memerlukannya, yang penting jika Anda ingin ini berfungsi dengan semua nama file dan direktori yang valid.
Ini mendaftarkan sebuah precmd
kait, yang memungkinkan lebih dari satu fungsi untuk didaftarkan di skrip lain dan file konfigurasi.
DIPERBARUI Maret 2019: Setel LC_ALL
ke kosong agar tidak diganti LC_CTYPE
. Gunakan precmd
untuk memperbarui direktori yang berfungsi pada setiap prompt alih-alih menggunakan chpwd
untuk memperbaruinya setiap kali diubah — saluran pipa perintah dapat mengubahnya sementara dan terminal tidak akan menampilkannya. Juga, akan sangat membantu jika setiap prompt memperbarui status terminal seandainya itu diubah selama perintah sebelumnya. Gunakan printf -v
untuk menulis secara eksplisit ke variabel alih-alih menggunakan sintaks 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