Đây là bản chuyển thể của tôi về / etc / bashrc cho zsh. Tôi đã bao gồm mã hóa phần trăm cho tất cả các ký tự URL yêu cầu nó, điều này rất quan trọng nếu bạn muốn nó hoạt động với tất cả các tên tệp và thư mục hợp lệ.
Điều này đăng ký một precmd
hook, cho phép nhiều hơn một chức năng được đăng ký trong các tập lệnh và tập tin cấu hình khác.
CẬP NHẬT Tháng 3 năm 2019: Đặt LC_ALL
thành trống để nó không ghi đè LC_CTYPE
. Sử dụng precmd
để cập nhật thư mục làm việc tại mỗi dấu nhắc thay vì sử dụng chpwd
để cập nhật thư mục mỗi khi nó bị thay đổi, các đường ống lệnh của lệnh có thể thay đổi tạm thời và thiết bị đầu cuối không nên hiển thị các lệnh đó. Ngoài ra, có thể hữu ích khi mỗi lần cập nhật trạng thái thiết bị đầu cuối trong trường hợp nó bị thay đổi trong lệnh trước đó. Sử dụng printf -v
để ghi rõ ràng vào biến thay vì sử dụng cú pháp 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