summaryrefslogtreecommitdiff
path: root/Completion/Zsh
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 /Completion/Zsh
parenta95198e268ec1d432c37afc8dc4f8839acc0c8d0 (diff)
downloadzsh-bb441f77a70bf7b5f13ab8f9113ba9b7a1593479.tar.gz
zsh-bb441f77a70bf7b5f13ab8f9113ba9b7a1593479.zip
51758: Make dynamic dir completion easier to implement
Diffstat (limited to 'Completion/Zsh')
-rw-r--r--Completion/Zsh/Context/_dynamic_directory_name30
1 files changed, 22 insertions, 8 deletions
diff --git a/Completion/Zsh/Context/_dynamic_directory_name b/Completion/Zsh/Context/_dynamic_directory_name
index f449c3b12..5e0d73a8d 100644
--- a/Completion/Zsh/Context/_dynamic_directory_name
+++ b/Completion/Zsh/Context/_dynamic_directory_name
@@ -1,15 +1,29 @@
#autoload
+local -a dirfuncs=(
+ ${(k)functions[zsh_directory_name]}
+ $zsh_directory_name_functions
+)
+local descr='dynamically named directory'
-local func
-integer ret=1
+if (( $#dirfuncs )); then
+ local -a expl
+ local -i ret
+ local func suf tag=dynamically-named-directories
-if [[ -n $functions[zsh_directory_name] || \
- ${+zsh_directory_name_functions} -ne 0 ]] ; then
- [[ -n $functions[zsh_directory_name] ]] && zsh_directory_name c && ret=0
- for func in $zsh_directory_name_functions; do
- $func c && ret=0
+ [[ $ISUFFIX != \]* ]] &&
+ suf=-S]
+
+ _tags "$tag"
+ while _tags; do
+ while _next_label "$tag" expl "$descr" $suf; do
+ for func in $dirfuncs; do
+ $func c && ret=0
+ done
+ done
+ (( ret )) || break
done
return ret
+
else
- _message 'dynamic directory name: implemented as zsh_directory_name c'
+ _message "${descr}: implement as zsh_directory_name c"
fi