@ -10,10 +10,13 @@
#
# -f, --fish fish simulation, equivalent to -l -s -t.
# -l, --last Print the last directory's full name.
# -s, --short Truncate directory names to the first character . Without
# -s, --short Truncate directory names to the number of characters given by -# . Without
# -s, names are truncated without making them ambiguous.
# -t, --tilde Substitute ~ for the home directory.
# -T, --nameddirs Substitute named directories as well.
# -# Truncate each directly to at least this many characters inclusive of the
# ellipsis character(s) (defaulting to 1).
# -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.
#
# The long options can also be set via zstyle, like
# zstyle :prompt:shrink_path fish yes
@ -37,6 +40,8 @@ shrink_path () {
typeset -i short = 0
typeset -i tilde = 0
typeset -i named = 0
typeset -i length = 1
typeset ellipsis = ""
if zstyle -t ':prompt:shrink_path' fish; then
lastfull = 1
@ -53,6 +58,10 @@ shrink_path () {
while [ [ $1 = = -* ] ] ; do
case $1 in
--)
shift
break
; ;
-f| --fish)
lastfull = 1
short = 1
@ -62,9 +71,13 @@ shrink_path () {
print 'Usage: shrink_path [-f -l -s -t] [directory]'
print ' -f, --fish fish-simulation, like -l -s -t'
print ' -l, --last Print the last directory' 's full name'
print ' -s, --short Truncate directory names to the first character'
print ' -s, --short Truncate directory names to the number of characters given by -#. Without'
print ' -s, names are truncated without making them ambiguous.'
print ' -t, --tilde Substitute ~ for the home directory'
print ' -T, --nameddirs Substitute named directories as well'
print ' -# Truncate each directly to at least this many characters inclusive of the'
print ' ellipsis character(s) (defaulting to 1).'
print ' -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.'
print 'The long options can also be set via zstyle, like'
print ' zstyle :prompt:shrink_path fish yes'
return 0
@ -76,10 +89,18 @@ shrink_path () {
tilde = 1
named = 1
; ;
-[ 0-9] | -[ 0-9] [ 0-9] )
length = ${ 1 /-/ }
; ;
-e)
shift
ellipsis = " $1 "
; ;
esac
shift
done
typeset -i elllen = ${# ellipsis }
typeset -a tree expn
typeset result part dir = ${ 1 - $PWD }
typeset -i i
@ -109,12 +130,20 @@ shrink_path () {
expn = ( a b)
part = ''
i = 0
until [ [ ( ( ${# expn } = = 1 ) ) || $dir = $expn || $i -gt 99 ] ] do
until [ [ $i -gt 99 || ( $i -ge $(( length - ellen)) || $dir = = $part ) && ( ( ( ${# expn } = = 1 ) ) || $dir = $expn ) ] ] ; do
( ( i++ ) )
part += $dir [ $i ]
expn = ( $( echo ${ part } *( -/) ) )
( ( short ) ) && break
( ( short ) ) && [ [ $i -ge $(( length - ellen)) ] ] && break
done
typeset -i dif = $(( ${# dir } - ${# part } - ellen ))
if [ [ $dif -gt 0 ] ]
then
part += " $ellipsis "
else
part = " $dir "
fi
result += " / $part "
cd -q $dir
shift tree