summaryrefslogtreecommitdiff
path: root/Doc
diff options
context:
space:
mode:
authorMarlon Richert <marlon.richert@gmail.com>2023-05-18 23:44:54 +0300
committerOliver Kiddle <opk@zsh.org>2023-05-21 03:05:20 +0200
commitbb441f77a70bf7b5f13ab8f9113ba9b7a1593479 (patch)
tree517c9c0fd7ec9e64b2dfdcde7921b95d20993301 /Doc
parenta95198e268ec1d432c37afc8dc4f8839acc0c8d0 (diff)
downloadzsh-bb441f77a70bf7b5f13ab8f9113ba9b7a1593479.tar.gz
zsh-bb441f77a70bf7b5f13ab8f9113ba9b7a1593479.zip
51758: Make dynamic dir completion easier to implement
Diffstat (limited to 'Doc')
-rw-r--r--Doc/Zsh/expn.yo44
1 files changed, 17 insertions, 27 deletions
diff --git a/Doc/Zsh/expn.yo b/Doc/Zsh/expn.yo
index 19f5909ea..6f86d0c54 100644
--- a/Doc/Zsh/expn.yo
+++ b/Doc/Zsh/expn.yo
@@ -2066,34 +2066,24 @@ tt(/home/pws/perforce). In this simple case a static name for the
directory would be just as effective.
example(zsh_directory_name+LPAR()RPAR() {
- emulate -L zsh
- setopt extendedglob
+ emulate -L zsh -o extendedglob
local -a match mbegin mend
- if [[ $1 = d ]]; then
- # turn the directory into a name
- if [[ $2 = (#b)(/home/pws/perforce/)([^/]##)* ]]; then
- typeset -ga reply
- reply=(p:$match[2] $(( ${#match[1]} + ${#match[2]} )) )
- else
- return 1
- fi
- elif [[ $1 = n ]]; then
- # turn the name into a directory
- [[ $2 != (#b)p:(?*) ]] && return 1
- typeset -ga reply
- reply=(/home/pws/perforce/$match[1])
- elif [[ $1 = c ]]; then
- # complete names
- local expl
- local -a dirs
- dirs=(/home/pws/perforce/*(/:t))
- dirs=(p:${^dirs})
- _wanted dynamic-dirs expl 'dynamic directory' compadd -S\] -a dirs
- return
- else
- return 1
- fi
- return 0
+ local base=/home/pws/perforce
+ case $1 in
+ ( d ) # Turn the directory into a name.
+ [[ $2 == (#b)($base/)([^/]##)* ]] &&
+ reply=( p:$match[2] $(( $#match[1] + $#match[2] )) )
+ ;;
+ ( n ) # Turn the name into a directory.
+ [[ $2 == (#b)p:(?*) ]] &&
+ reply=( $base/$match[1] )
+ ;;
+ ( c ) # Complete names.
+ local -a dirs=( $base/*(/:t) )
+ # Completion system populates $expl with flags for compadd.
+ compadd "$expl[@]" p:$^dirs
+ ;;
+ esac
})
texinode(Static named directories)(`=' expansion)(Dynamic named directories)(Filename Expansion)