@ -9,6 +9,7 @@
# The following options are available:
# The following options are available:
#
#
# -f, --fish fish simulation, equivalent to -l -s -t.
# -f, --fish fish simulation, equivalent to -l -s -t.
# -g, --glob Add asterisk to allow globbing of shrunk path (equivalent to -e "*")
# -l, --last Print the last directory's full name.
# -l, --last Print the last directory's full name.
# -s, --short Truncate directory names to the number of characters given by -#. Without
# -s, --short Truncate directory names to the number of characters given by -#. Without
# -s, names are truncated without making them ambiguous.
# -s, names are truncated without making them ambiguous.
@ -17,6 +18,7 @@
# -# Truncate each directly to at least this many characters inclusive of the
# -# Truncate each directly to at least this many characters inclusive of the
# ellipsis character(s) (defaulting to 1).
# ellipsis character(s) (defaulting to 1).
# -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.
# -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.
# -q, --quote Quote special characters in the shrunk path
#
#
# The long options can also be set via zstyle, like
# The long options can also be set via zstyle, like
# zstyle :prompt:shrink_path fish yes
# zstyle :prompt:shrink_path fish yes
@ -42,6 +44,7 @@ shrink_path () {
typeset -i named = 0
typeset -i named = 0
typeset -i length = 1
typeset -i length = 1
typeset ellipsis = ""
typeset ellipsis = ""
typeset -i quote = 0
if zstyle -t ':prompt:shrink_path' fish; then
if zstyle -t ':prompt:shrink_path' fish; then
lastfull = 1
lastfull = 1
@ -55,6 +58,8 @@ shrink_path () {
zstyle -t ':prompt:shrink_path' last && lastfull = 1
zstyle -t ':prompt:shrink_path' last && lastfull = 1
zstyle -t ':prompt:shrink_path' short && short = 1
zstyle -t ':prompt:shrink_path' short && short = 1
zstyle -t ':prompt:shrink_path' tilde && tilde = 1
zstyle -t ':prompt:shrink_path' tilde && tilde = 1
zstyle -t ':prompt:shrink_path' glob && ellipsis = '*'
zstyle -t ':prompt:shrink_path' quote && quote = 1
while [ [ $1 = = -* ] ] ; do
while [ [ $1 = = -* ] ] ; do
case $1 in
case $1 in
@ -70,6 +75,7 @@ shrink_path () {
-h| --help)
-h| --help)
print 'Usage: shrink_path [-f -l -s -t] [directory]'
print 'Usage: shrink_path [-f -l -s -t] [directory]'
print ' -f, --fish fish-simulation, like -l -s -t'
print ' -f, --fish fish-simulation, like -l -s -t'
print ' -g, --glob Add asterisk to allow globbing of shrunk path (equivalent to -e "*")'
print ' -l, --last Print the last directory' 's full name'
print ' -l, --last Print the last directory' 's full name'
print ' -s, --short Truncate directory names to the number of characters given by -#. Without'
print ' -s, --short Truncate directory names to the number of characters given by -#. Without'
print ' -s, names are truncated without making them ambiguous.'
print ' -s, names are truncated without making them ambiguous.'
@ -78,6 +84,7 @@ shrink_path () {
print ' -# Truncate each directly to at least this many characters inclusive of the'
print ' -# Truncate each directly to at least this many characters inclusive of the'
print ' ellipsis character(s) (defaulting to 1).'
print ' ellipsis character(s) (defaulting to 1).'
print ' -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.'
print ' -e SYMBOL Postfix symbol(s) to indicate that a directory name had been truncated.'
print ' -q, --quote Quote special characters in the shrunk path'
print 'The long options can also be set via zstyle, like'
print 'The long options can also be set via zstyle, like'
print ' zstyle :prompt:shrink_path fish yes'
print ' zstyle :prompt:shrink_path fish yes'
return 0
return 0
@ -96,6 +103,12 @@ shrink_path () {
shift
shift
ellipsis = " $1 "
ellipsis = " $1 "
; ;
; ;
-g| --glob)
ellipsis = '*'
; ;
-q| --quote)
quote = 1
; ;
esac
esac
shift
shift
done
done
@ -140,9 +153,11 @@ shrink_path () {
typeset -i dif = $(( ${# dir } - ${# part } - ellen ))
typeset -i dif = $(( ${# dir } - ${# part } - ellen ))
if [ [ $dif -gt 0 ] ]
if [ [ $dif -gt 0 ] ]
then
then
( ( quote ) ) && part = ${ (q)part }
part += " $ellipsis "
part += " $ellipsis "
else
else
part = " $dir "
part = " $dir "
( ( quote ) ) && part = ${ (q)part }
fi
fi
result += " / $part "
result += " / $part "
cd -q $dir
cd -q $dir