Unverified Commit 2f345a3d authored by Marc Cornellà's avatar Marc Cornellà Committed by GitHub
Browse files

shrink-path: added glob and quote options (#7694)



* Added -g option to shrink-path plugin.

The new optins adds an asterix to the uniquely shortened name, such
that, if copy'n'pasted, zsh globbing will expand to the full path name
of the shortened path:

shrink-path -g:
"/net/software/modules/modulefiles" -> "/n*/s*/modules/m*"

shrink-path -l -g:
"/net/software/modules/modulefiles" -> "/n*/s*/modules/modulefiles"

* Updated also the README file with the new -g option.

* shrink-path: improved handling of special cases

This commits improves the handling of special cases in path strings:

- handling of white space in path names
- handling of single-letter path names

* Update plugins/shrink-path/README.md
Co-Authored-By: default avatarJacob Tomaw <jacob.tomaw@gmail.com>

* Fix typo "Asterix" and replace with "asterisk"

* Add optional quoting support to shrink_path
Co-authored-by: default avatarJacob Tomaw <jacob.tomaw@gmail.com>
parent ecf2240b
...@@ -7,21 +7,26 @@ For this directory tree: ...@@ -7,21 +7,26 @@ For this directory tree:
``` ```
/home/ /home/
me/ me/
foo/ f o o/ # The prefix f is ambiguous between "f o o" and "f i g".
bar/ bar/
quux/ quux/
biz/ # The prefix b is ambiguous between bar and biz. biz/ # The prefix b is ambiguous between bar and biz.
f i g/
baz/
``` ```
here are the results of calling `shrink_path <option> /home/me/foo/bar/quux`: here are the results of calling `shrink_path <option> /home/me/foo/bar/quux`:
``` ```
Option Result Option Result
<none> /h/m/f/ba/q <none> /h/m/f o/ba/q
-l|--last /h/m/f/ba/quux -l|--last /h/m/f o/ba/q
-s|--short /h/m/f/b/q -s|--short /h/m/f/b/q
-t|--tilde ~/f/ba/q -t|--tilde ~/f o/ba/q
-f|--fish ~/f/b/quux -f|--fish ~/f/b/quux
-3 /hom/me/foo/bar/quu -g|--glob /h*/m*/f o*/ba*/q*
-e '$' -3 /ho$/me/foo/bar/qu$ -3 /hom/me/f o/bar/quu
-e '$' -3 /hom$/me/f o$/bar/quu$
-q /h/m/f\ o/ba/q
-g -q /h*/m*/f\ o*/ba*/q*
``` ```
...@@ -39,6 +44,7 @@ The following options are available: ...@@ -39,6 +44,7 @@ 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.
...@@ -47,6 +53,7 @@ The following options are available: ...@@ -47,6 +53,7 @@ The following options are available:
-# 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
......
...@@ -9,6 +9,7 @@ ...@@ -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 @@ ...@@ -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 () { ...@@ -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 () { ...@@ -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 () { ...@@ -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 () { ...@@ -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 () { ...@@ -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 () { ...@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment