summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Completion/Zsh/Command/_compadd121
2 files changed, 87 insertions, 37 deletions
diff --git a/ChangeLog b/ChangeLog
index 416745cd2..cb4ad6833 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2021-04-09 Oliver Kiddle <opk@zsh.org>
+ * 48378: Completion/Zsh/Command/_compadd: complete compadd
+ options for other completion functions
+
* 48437: Completion/Unix/Command/_gdb: fix pid completion when
cursor is in the middle of the line
diff --git a/Completion/Zsh/Command/_compadd b/Completion/Zsh/Command/_compadd
index 781fa2af8..9c92cda76 100644
--- a/Completion/Zsh/Command/_compadd
+++ b/Completion/Zsh/Command/_compadd
@@ -1,47 +1,94 @@
-#compdef compadd
+#compdef compadd -P _*
-local curcontext="$curcontext" state line ret=1
+local curcontext="$curcontext" ret=1
+local -a state line args
typeset -A opt_args
-_arguments -C -s -S -A "-*" \
- '-P+[specify prefix]:prefix' \
- '-S+[specify suffix]:suffix' \
- '-p+[specify hidden prefix]:hidden prefix' \
- '-s+[specify hidden suffix]:hidden suffix' \
- '-i+[specify ignored prefix]:ignored prefix' \
- '-I+[specify ignored suffix]:ignored suffix' \
- '(-k)-a[matches are elements of specified arrays]' \
- '(-a)-k[matches are keys of specified associative arrays]' \
- '-d+[specify display strings]:array:_parameters -g "*array*"' \
- '-l[list display strings one per line, not in columns]' \
+args=(
+ '-P+[specify prefix]:prefix'
+ '-S+[specify suffix]:suffix'
+ '-p+[specify hidden prefix]:hidden prefix'
+ '-s+[specify hidden suffix]:hidden suffix'
+ '-i+[specify ignored prefix]:ignored prefix'
+ '-I+[specify ignored suffix]:ignored suffix'
'-o[specify order for matches by match string not by display string]:: : _values -s , order
"match[order by match not by display string]"
"nosort[matches are pre-ordered]"
"numeric[order numerically]"
- "reverse[order backwards]"' \
- '(-1 -E)-J+[specify match group]:group' \
- '!-V+:group' \
- '(-J -E)-1[remove only consecutive duplicates from group]' \
- '-2[preserve all duplicates]' \
- '(-x)-X[specify explanation]:explanation' \
- '(-X)-x[specify unconditional explanation]:explanation' \
- '-q[make suffix autoremovable]' \
- '-r+[specify character class for suffix autoremoval]:character class' \
- '-R+[specify function for suffix autoremoval]:function:_functions' \
- '-f[mark matches as being files]' \
- '-e[mark matches as being parameters]' \
- '-W[specify location for matches marked as files]' \
- '-F+[specify array of ignore patterns]:array:_parameters -g "*array*"' \
- '-Q[disable quoting of possible completions]' \
- '*-M[specify matching specifications]' \
- '-n[hide matches in completion listing]' \
- '-U[disable internal matching of completion candidates]' \
- '-O+[populate array with matches instead of adding them]:array:_parameters -g "*array*"' \
- '-A+[populate array with expanded matches instead of adding them]:array:_parameters -g "*array*"' \
- '-D+[delete elements from array corresponding to non-matching candidates]:array:_parameters -g "*array*"' \
- '-C[add special match that expands to all other matches]' \
- '(-1 -J)-E+[add specified number of display only matches]:number' \
- '*:candidate:->candidates' && ret=0
+ "reverse[order backwards]"'
+ '(-1 -E)-J+[specify match group]:group'
+ '!-V+:group'
+ '(-J -E)-1[remove only consecutive duplicates from group]'
+ '-2[preserve all duplicates]'
+ '(-x)-X[specify explanation]:explanation'
+ '(-X)-x[specify unconditional explanation]:explanation'
+ '-q[make suffix autoremovable]'
+ '-r+[specify character class for suffix autoremoval]:character class'
+ '-R+[specify function for suffix autoremoval]:function:_functions'
+ '-F+[specify array of ignore patterns]:array:_parameters -g "*array*"'
+ '-Q[disable quoting of possible completions]'
+ '*-M[specify matching specifications]'
+ '-n[hide matches in completion listing]'
+ '-O+[populate array with matches instead of adding them]:array:_parameters -g "*array*"'
+ '-A+[populate array with expanded matches instead of adding them]:array:_parameters -g "*array*"'
+ '-D+[delete elements from array corresponding to non-matching candidates]:array:_parameters -g "*array*"'
+)
+
+case $service in
+ compadd|_(path_|)files)
+ args+=(
+ '-W[specify location for matches marked as files]'
+ )
+ ;|
+ compadd)
+ args+=(
+ '(-k)-a[matches are elements of specified arrays]'
+ '(-a)-k[matches are keys of specified associative arrays]'
+ '-d+[specify display strings]:array:_parameters -g "*array*"'
+ '-l[list display strings one per line, not in columns]'
+ '-f[mark matches as being files]'
+ '-e[mark matches as being parameters]'
+ '-C[add special match that expands to all other matches]'
+ '(-1 -J)-E+[add specified number of display only matches]:number'
+ '-U[disable internal matching of completion candidates]'
+ '*:candidate:->candidates'
+ )
+ ;;
+ _dates)
+ args=( ${args:#([(][^)]##\)|)-[12noOAD]*}
+ '-f[specify format for matches]:format:_date_formats'
+ '-F[select a future rather than past date]'
+ )
+ ;;
+ _(path_|)files)
+ args=( ${args:#([(][^)]##\)|)-[OAD]*}
+ '-g+[specify file glob pattern]:glob pattern'
+ '-/[complete only directories]'
+ )
+ ;;
+ _parameters)
+ args+=(
+ '-g+[specify pattern to filter parameter type by]:pattern'
+ )
+ ;;
+ _pids)
+ args+=( '-m+[pattern to filter process command line by]:pattern' )
+ ;;
+ _process_names)
+ args+=(
+ '-a[include all processes]'
+ '-t[use truncated process names]'
+ )
+ ;;
+ _sys_calls)
+ args+=(
+ '-a[add "all" as an additional match]'
+ '-n[add "none" as an additional match]'
+ )
+ ;;
+esac
+
+_arguments -C -s -S -A "-*" $args && ret=0
if [[ -n $state ]]; then
if (( $+opt_args[-a] )); then