Update zsh functions

This commit is contained in:
rydesun 2021-08-25 05:07:14 +08:00
parent a70cd361b7
commit 821b8608df

View file

@ -1,42 +1,28 @@
# https://zhuanlan.zhihu.com/p/51008087
() {
local pwd="$1"
# fix end slash
local home="${HOME%/}"
local size=${#home}
[[ $# == 0 ]] && pwd="$PWD"
# fix end slash
pwd=${pwd%/}
[[ $# == 0 ]] && local pwd="$PWD" || local pwd=$1
[[ -z "$pwd" || "$pwd" == "/" ]] && echo $pwd && return
[[ -z "$pwd" ]] && return
if [[ "$pwd" == "/" ]]; then
echo "/"
return
elif [[ "$pwd" == "$home" ]]; then
echo "~"
return
fi
[[ "$pwd" == "$home/"* ]] && pwd="~${pwd:$size}"
if [[ -n "$BASH_VERSION" ]]; then
local IFS="/"
local elements=($pwd)
local length=${#elements[@]}
for ((i=0;i<length-1;i++)); do
local elem=${elements[$i]}
if [[ ${#elem} -gt 1 ]]; then
pwd="${pwd%/}"
local home="${HOME%/}"
[[ "$pwd" == "$home" ]] && echo "~" && return
local offset=${#home}
[[ "$pwd" == "$home/"* ]] && pwd="~${pwd:$offset}"
local elements=("${(s:/:)pwd}")
local length=${#elements}
for i in {1..$((length-1))}; do
local elem=${elements[$i]}
if [[ ${#elem} > 1 ]]; then
local c=${elem:0:1}
if [[ $c == '.' ]]; then
elements[$i]=${elem:0:2}
else
elements[$i]=${elem:0:1}
fi
done
else
local elements=("${(s:/:)pwd}")
local length=${#elements}
for i in {1..$((length-1))}; do
local elem=${elements[$i]}
if [[ ${#elem} > 1 ]]; then
elements[$i]=${elem[1]}
fi
done
fi
fi
done
local IFS="/"
echo "${elements[*]}"
}