diff options
Diffstat (limited to 'Completion/Unix')
28 files changed, 879 insertions, 173 deletions
diff --git a/Completion/Unix/Command/_ansible b/Completion/Unix/Command/_ansible index ab0cdee6c..c1db8de45 100644 --- a/Completion/Unix/Command/_ansible +++ b/Completion/Unix/Command/_ansible @@ -50,11 +50,12 @@ case $service in args+=( '(-J --ask-vault-pass --ask-vault-password)'{-J,--ask-vault-pass{,word}}'[ask for vault password]' \*{-e+,--extra-vars=}'[set additional variables]:key=value, YAML/JSON or @file:->extra-vars' + '--flush-cache[clear fact cache for every host in inventory]' '*--vault-id=[specify vault identity to use]:vault identity' --vault-pass{,word}-file='[specify vault password file]:vault password file:_files' \*{-i+,--inventory=}'[specify inventory host file or host list]: : _alternative "files\:inventory file\:_files" "hosts\:host\: _sequence _hosts"' - '!(-i --inventory)--inventory-file=:inventory file:_files' + '!*--inventory-file=:inventory file:_files' '(-l --limit --host --graph)'{-l+,--limit=}'[further limit hosts to an additional pattern]:host subset:->hosts' ) ;| diff --git a/Completion/Unix/Command/_attr b/Completion/Unix/Command/_attr index efa7c5c4f..58fd8837e 100644 --- a/Completion/Unix/Command/_attr +++ b/Completion/Unix/Command/_attr @@ -2,11 +2,9 @@ case $service in attr) - local -a list - [[ $OSTYPE = irix* ]] && - list=( '(-g -s -r -V)-l[list extended attributes associated with file]' ) _arguments -s -S "$list[@]" \ '(-l -r -s -V)-g[get extended attribute for file]:attribute name' \ + '(-g -s -r -V)-l[list extended attributes associated with file]' \ '(-l -g -s -q -V)-r[remove given attribute from file]:attribute name' \ '(-l -g -r)-s[set named attribute for file]:attribute name' \ '(-r)-q[quiet output]' \ diff --git a/Completion/Unix/Command/_chdman b/Completion/Unix/Command/_chdman new file mode 100644 index 000000000..c1fea7d42 --- /dev/null +++ b/Completion/Unix/Command/_chdman @@ -0,0 +1,195 @@ +#compdef chdman + +local ret=1 words1=$words[1] +local -a opts args context state state_descr line expl +local -a create_common_opts extract_common_opts ld_common_opts +local -a meta_common_opts input_bytes_hunks_opts +local -A opt_args + +opts=( + '(--input -i)'{--input,-i}'[specify input file]:input file:_files' + '(--inputparent -ip)'{--inputparent,-ip}'[specify parent file for input CHD]:input parent file:_files' + '(--output -o)'{--output,-o}'[specify output file]:output file:_files' + '(--outputbin -ob)'{--outputbin,-ob}'[specify output file for binary data]:output binary file:_files' + '(--splitbin -sb)'{--splitbin,-sb}'[output one binary file per track]' + '(--force -f)'{--force,-f}'[overwrite existing file]' # note same short option as --fix + '(--outputparent -op)'{--outputparent,-op}'[specify parent file for output CHD]:output parent file:_files' + '(--inputstartbyte -isb)'{--inputstartbyte,-isb}'[specify starting byte offset within input]: :\ + _numbers -u bytes "start byte" k m g' + '(--inputstarthunk -ish)'{--inputstarthunk,-ish}'[specify starting hunk offset within input]: :\ + _numbers -u hunks "start hunk" k m g' + '(--inputstartframe -isf)'{--inputstartframe,-isf}'[specify starting frame within input]: :\ + _numbers -u frames "start frame" k m g' + '(--inputbytes -ib)'{--inputbytes,-ib}'[specify effective length of input in bytes]: :\ + _numbers -u bytes "input length" k m g' + '(--inputhunks -ih)'{--inputhunks,-ih}'[specify effective length of input in hunks]: :\ + _numbers -u hunks "input length" k m g' + '(--inputframes -if)'{--inputframes,-if}'[specify effective length of input in frames]: :\ + _numbers -u frames "input length" k m g' + '(--hunksize -hs)'{--hunksize,-hs}'[specify size of each hunk in bytes]: :\ + _numbers -u bytes -l 16 -m $((1024*1024)) "hunk size" k m g' + '(--unitsize -us)'{--unitsize,-us}'[specify size of each unit in bytes]: :\ + _numbers -u bytes "unit size" k m g' + '(--compression -c)'{--compression,-c}'[specify compression codecs to use]: :->codecs' + '(--ident -id)'{--ident,-id}'[specify ident file to provide CHS information]:ident file:_files' + '(--chs -chs)'{--chs,-chs}'[specify CHS information directly]:cylinders,heads,sectors:' + '(--sectorsize -ss)'{--sectorsize,-ss}'[specfiy size of each hard disk sector]: :\ + _numbers -u bytes "sector size" k m g' + '(--tag -t)'{--tag,-t}'[specify metadata tag]:4-character metadata tag:' + '(--index -ix)'{--index,-ix}'[specify indexed instance of metadata tag]:index:' + '(--valuetext -vt)'{--valuetext,-vt}'[specify metadata value as text]:metadata value:' + '(--valuefile -vf)'{--valuefile,-vf}'[specify file containing metadata value]:metadata value file:_files' + '(--numprocessors -np)'{--numprocessors,-np}'[specify max number of processors to use during compression]: :\ + _numbers -u processors -l1 "processor limit"' + '(--nochecksum -nocs)'{--nochecksum,-nocs}'[excluded added metadata from SHA-1]' + '(--fix -f)'{--fix,-f}'[fix SHA-1 if incorrect]' # note same short option as --force + '(--verbose -v)'{--verbose,-v}'[output additional information]' + '(--size -s)'{--size,-s}'[specify size of output file]: :\ + _numbers -u bytes "output file size" k m g' + '(--template -tp)'{--template,-tp}'[specify hard disk template]: :->templates' +) +create_common_opts=( + ${(M)opts:#(|*\))--(output|outputparent|force|input|hunksize|compression|numprocessors)\[*} + ${(M)opts:#(|*\))-(o|op|f|i|hs|c|np)\[*~*-f*fix*} +) +extract_common_opts=( + ${(M)opts:#(|*\))--(output|force|input|inputparent)\[*} + ${(M)opts:#(|*\))-(o|f|i|ip)\[*~*-f*fix*} +) +ld_common_opts=( + ${(M)opts:#(|*\))--(inputstartframe|inputframes)\[*} + ${(M)opts:#(|*\))-(isf|if)\[*} +) +meta_common_opts=( + ${(M)opts:#(|*\))--(input|tag|index)\[*} + ${(M)opts:#(|*\))-(i|t|ix)\[*} +) +input_bytes_hunks_opts=( + ${(M)opts:#(|*\))--(inputstartbyte|inputstarthunk|inputbytes|inputhunks)\[*} + ${(M)opts:#(|*\))-(isb|ish|ib|ih)\[*} +) + +if (( CURRENT < 3 )); then + args=( ': :->commands' ) +else + case $words[2] in + help) args=( ': :->commands' ) ;; + info) args=( + ${(M)opts:#(|*\))--(input|verbose)\[*} + ${(M)opts:#(|*\))-(i|v)\[*} + ) ;; + verify) args=( + ${(M)opts:#(|*\))--(input|inputparent)\[*} + ${(M)opts:#(|*\))-(i|ip)\[*} + ) ;; + createraw|createdvd) args=( + $create_common_opts + $input_bytes_hunks_opts + ${(M)opts:#(|*\))--(unitsize)\[*} + ${(M)opts:#(|*\))-(us)\[*} + ) ;; + createhd) args=( + $create_common_opts + $input_bytes_hunks_opts + ${(M)opts:#(|*\))--(unitsize|chs|sectorsize|template|ident)\[*} + ${(M)opts:#(|*\))-(us|chs|ss|tp|id)\[*} + ) ;; + createcd) args=( $create_common_opts ) ;; + createld) args=( $create_common_opts $ld_common_opts ) ;; + extractraw|extractdvd|extracthd) args=( + $extract_common_opts + $input_bytes_hunks_opts + ) ;; + extractcd) args=( + $extract_common_opts + ${(M)opts:#(|*\))--(outputbin)\[*} + ${(M)opts:#(|*\))-(ob)\[*} + ) ;; + extractld) args=( $extract_common_opts $ld_common_opts ) ;; + copy) args=( + $create_common_opts + $input_bytes_hunks_opts + ${(M)opts:#(|*\))--(inputparent)\[*} + ${(M)opts:#(|*\))-(ip)\[*} + ) ;; + addmeta) args=( + $meta_common_opts + ${(M)opts:#(|*\))--(valuetext|valuefile|nochecksum)\[*} + ${(M)opts:#(|*\))-(vt|vf|nocs)\[*} + ) ;; + delmeta) args=( $meta_common_opts ) ;; + dumpmeta) args=( + $meta_common_opts + ${(M)opts:#(|*\))--(output|force)\[*} + ${(M)opts:#(|*\))-(o|f)\[*~*-f*fix*} + ) ;; + esac + shift words + (( CURRENT-- )) +fi + +_arguments : $args && ret=0 + +case $state in + commands) + _describe -t commands command '( + "help:display usage information" + "info:display CHD information" + "verify:verify CHD integrity" + "createraw:create raw CHD" + "createhd:create hard disk CHD" + "createcd:create CD CHD" + "createdvd:create DVD CHD" + "createld:create LaserDisc CHD" + "extractraw:extract raw file from CHD" + "extracthd:extract hard disk file from CHD" + "extractcd:extract CD file from CHD" + "extractdvd:extract DVD file from CHD" + "extractld:extract LaserDisc AVI from CHD" + "copy:copy data from one CHD to another" + "addmeta:add metadata to CHD" + "delmeta:remove metadata from CHD" + "dumpmeta:dump metadata from CHD" + "listtemplates:list hard disk templates" + )' && ret=0 + ;; + + codecs) + local -a codecs + + case $words[1] in # was $words[2] + *ld) codecs=( + 'avhu[A/V Huffman]' + ) ;; + *cd) codecs=( + 'cdfl[CD FLAC]' 'cdlz[CD LZMA]' 'cdzl[CD Deflate]' 'cdzs[CD Zstandard]' + ) ;; + *) codecs=( + 'flac[FLAC]' 'huff[Huffman]' 'lzma[LZMA]' 'zlib[Deflate]' 'zstd[Zstandard]' + ) ;; + esac + + _alternative \ + 'codecs-none:no codec:(( none\:uncompressed ))' \ + "codecs: :_values -s, 'compression codec' ${(j< >)${(@q+)codecs}}" \ + && ret=0 + ;; + + templates) + local -a tpls tmp=( ${(f)"$( + _call_program templates $words1 listtemplates + )"} ) + tmp=( ${(@)${(@)tmp//[[:space:]]##/ }# } ) + tmp=( ${(@M)tmp:#<-> *} ) + + for 1 in $tmp; do + tmp=( ${(z)1} ) + # id : mfg model (c,h,s) + tpls+=( "${tmp[1]}:$tmp[2] $tmp[3] (${(j<,>)${(@)tmp[4,6]}})" ) + done + + _describe -2V -t templates 'hard disk template' tpls && ret=0 + ;; +esac + +return ret diff --git a/Completion/Unix/Command/_chown b/Completion/Unix/Command/_chown index dae0de86c..36db9c4d2 100644 --- a/Completion/Unix/Command/_chown +++ b/Completion/Unix/Command/_chown @@ -74,19 +74,13 @@ _arguments -C -s -S -0 $aopts "$args[@]" '*: :->files' && ret=0 case $state in owner) - if [[ $service = chgrp ]] || compset -P '*[:.]'; then + if [[ $service = chgrp ]] || compset -P '*:'; then if (( EGID && $+commands[groups] && ! $+_comp_priv_prefix )); then # except for sudo _wanted groups expl 'group' compadd -- $(groups) && return 0 fi _groups && ret=0 else - if compset -S '[.:]*'; then - suf=() - elif [[ $OSTYPE = irix* ]]; then - suf=( -qS '.' ) - else - suf=( -qS ':' ) - fi + compset -S ':*' || suf=( -qS: ) _users "$suf[@]" && ret=0 fi ;; @@ -102,9 +96,9 @@ case $state in if [[ $service = chgrp ]]; then grp=${line[1]} else - usr=${line[1]%%[.:]*} + usr=${line[1]%%:*} usr=${${(M)usr:#[0-9]#}:-${userdirs[$usr]:+.$usr.}} - grp=${${(M)line[1]%%[.:]*}#?} + grp=${${(M)line[1]%%:*}#?} fi [[ -n $grp ]] && grp="${${(M)grp:#[0-9]#}:-.$grp.}" req=( ${usr:+\^u$usr} ${grp:+\^g$grp} ) diff --git a/Completion/Unix/Command/_column b/Completion/Unix/Command/_column index 687d7620f..737bb4561 100644 --- a/Completion/Unix/Command/_column +++ b/Completion/Unix/Command/_column @@ -18,6 +18,12 @@ _pick_variant -r variant \ --version case $variant in + freebsd*) + args=( + '-l+[specify maximum number of input columns]:columns' + ) + ;| + util-linux) aopts=() args=( diff --git a/Completion/Unix/Command/_cpio b/Completion/Unix/Command/_cpio index 20f8c712d..6db4994d8 100644 --- a/Completion/Unix/Command/_cpio +++ b/Completion/Unix/Command/_cpio @@ -120,13 +120,12 @@ if [[ $state = afile ]]; then 'users:user name:_users -qS@' && ret=0 fi elif [[ $state = user ]]; then - if compset -P '*[:.]'; then + if compset -P '*:'; then _groups && ret=0 else - local suf=. - [[ $OSTYPE = (solaris|hpux)* ]] && suf=: - compset -S '.*' && unset suf - _users -S "$suf" -q && ret=0 + local suf + compset -S ':*' || suf=( -qS: ) + _users $suf && ret=0 fi fi diff --git a/Completion/Unix/Command/_diffstat b/Completion/Unix/Command/_diffstat index 9e7bf779b..068ec4c1e 100644 --- a/Completion/Unix/Command/_diffstat +++ b/Completion/Unix/Command/_diffstat @@ -17,6 +17,7 @@ _arguments -s -S \ '-n+[specify minimum width for filenames]:width [auto]' \ '-N+[specify maximum width for filenames]:width [auto]' \ '-o+[redirect standard output to specified file]:output file:_files' \ + '-O[inspect only files listed in diff for -S/-D options]' \ '-p+[specify number of path separators to strip]:path components [common]' \ '-q[suppress "0 files changed" message for empty diffs]' \ '-r+[specify rounding for histogram]:rounding:((0\:none 1\:simple 2\:simple+adjustment))' \ diff --git a/Completion/Unix/Command/_dig b/Completion/Unix/Command/_dig index 440c5de90..893f187d6 100644 --- a/Completion/Unix/Command/_dig +++ b/Completion/Unix/Command/_dig @@ -17,15 +17,16 @@ local -a alts args '*+'{no,}'badcookie[retry BADCOOKIE responses]' '*+'{no,}'cdflag[set the CD (checking disabled) bit in the query]' '*+'{no,}'class[display the CLASS whening printing the record]' + '*+'{no,}'coflag[set compact denial of existence ok flag in query]' '*+'{no,}'cookie[add a COOKIE option to the request]' '*+'{no,}'crypto[display cryptographic fields in DNSSEC records]' '*+'{no,}'dns64prefix[get the DNS64 prefixes from ipv4only.arpa]' - '*+edns=-[specify EDNS version for query]:version (0-255)' + '*+edns=-[specify EDNS version for query]:version (0-255) [0]' '*+noedns[clear EDNS version to be sent]' - '*+ednsflags=-[set EDNS flags bits]:flags' + '*+ednsflags=-[set undefined EDNS flags bits]:flags' '*+'{no,}'ednsnegotiation[set EDNS version negotiation]' '*+ednsopt=-[specify EDNS option]:code point' - '*+noedns[clear EDNS options to be sent]' + '*+noednsopt[clear EDNS options to be sent]' '*+'{no,}'expandaaaa[expand AAAA records]' '*+'{no,}'expire[send an EDNS Expire option]' '*+'{no,}'header-only[send query without a question section]' @@ -45,6 +46,7 @@ local -a alts args '*+'{no,}'cmd[print initial comment in output]' '*+'{no,}'short[print terse output]' '*+'{no,}'showbadcookie[show BADCOOKIE message]' + '*+'{no,}'showbadvers[show BADVERS message]' '*+'{no,}'identify[print IP and port of responder]' '*+'{no,}'comments[print comment lines in output]' '*+'{no,}'stats[print statistics]' diff --git a/Completion/Unix/Command/_entr b/Completion/Unix/Command/_entr index 438ab179a..4fb984af2 100644 --- a/Completion/Unix/Command/_entr +++ b/Completion/Unix/Command/_entr @@ -11,6 +11,7 @@ _arguments -s -S \ '-p[postpone first execution of the utility]' \ '(-a)-r[reload a persistent child process]' \ '(*)-s[evaluate the first argument using interpreter specified by $SHELL]' \ + '*-x[format custom exit status messages using a persistent awk(1) process]' \ '-z[exit after the utility completes]' \ '(-): :->command' \ '*::arguments:_normal' && ret=0 diff --git a/Completion/Unix/Command/_fish b/Completion/Unix/Command/_fish new file mode 100644 index 000000000..08541bc83 --- /dev/null +++ b/Completion/Unix/Command/_fish @@ -0,0 +1,78 @@ +#compdef fish + +local MATCH MBEGIN MEND ret=1 +local -a args context line state state_descr +local -A opt_args + +args=( + # unlike most shells, fish's -c is a normal option-with-optarg which can be + # interleaved with other options and can even be given multiple times. + # obviously we can't complete command strings reliably here but we'll try + '(1)*'{-c+,--command=}'[execute specified command string]: :_cmdstring' + '*'{-C+,--init-command=}'[execute specified command before other input]: :_cmdstring' + '(-d --debug)'{-d+,--debug=}'[enable debug output for specified categories]: :->debug' + '(-o --debug-output)'{-o+,--debug-output=}'[specify debug output file]:debug output file:_files' + '(-f --features)'{-f+,--features=}'[enable specified feature flags]: :->feature' + '(-i --interactive)'{-i,--interactive}'[act as interactive shell]' + '(-l --login)'{-l,--login}'[act as login shell]' + '(-N --no-config)'{-N,--no-config}'[do not read configuration files]' + '(-n --no-execute)'{-n,--no-execute}'[check syntax only (do not execute commands)]' + '(-p --profile)'{-p+,--profile=}'[specify profile output file]:profile output file:_files' + '--profile-startup=[specify start-up profile output file]:profile output file:_files' + '(-P --private)'{-P,--private}'[enable private mode (no history)]' + '--print-rusage-self[output getrusage() stats on exit]' + '(- : *)--print-debug-categories[display debug categories]' + '(- : *)'{-v,--version}'[display version information]' + '(- : *)'{-h,--help}'[display usage information]' + '(-)1:script file:_files' + '(-)*:argument:_files' +) + +_arguments -s -S -A '-*' : $args && ret=0 + +case $state in + debug) + local -a tmp=( ${(f)"$( + _call_program debug-categories $words[1] --print-debug-categories + )"} ) + tmp=( ${${tmp/[[:space:]]##/\[}/%/\]} ) + tmp=( ${tmp/(#m)\[[A-Z][^A-Z]/${(L)MATCH}} ) + tmp=( ${tmp/.\]/\]} ) + _values -s, 'debug category' $tmp && ret=0 + ;; + + feature) + local name def ver desc + local -a flags_on flags_off versions flags tmp + + while IFS=$'\t ' read -r name def ver desc; do + desc=${${desc/#(#m)[A-Z][^A-Z]/${(L)MATCH}}//(#m)[]\\]/\\$MATCH} + if [[ $def == on ]]; then + flags_on+=( $name"[$desc ($ver, defaults on)]" ) + else + flags_off+=( $name"[$desc ($ver, defaults off)]" ) + fi + versions+=( $ver"[all features introduced in fish $ver]" ) + done < <( + _call_program feature-flags $words[1] -NPc '"status features"' + ) + + # if an individual flag is already on, show the no- variant, and vice versa + flags+=( no-$^flags_on $flags_off ) + # always show both for these 'groups' + flags+=( {no-,}all'[all features]' {no-,}${(u)versions} ) + + # only show redundant variants of individual flags when necessary + tmp=( no-$^flags_off ) + [[ ${PREFIX##*,} == n* ]] || tmp=( '!'$^tmp ) + flags+=( $tmp ) + + tmp=( ${(M)flags_on:#${${PREFIX##*,}[1]:----}*} ) + (( $#tmp )) || tmp=( '!'$^flags_on ) + flags+=( $tmp ) + + _values -s, 'feature flag' $flags && ret=0 + ;; +esac + +return ret diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git index e9f72799c..675170f6e 100644 --- a/Completion/Unix/Command/_git +++ b/Completion/Unix/Command/_git @@ -70,6 +70,7 @@ _git-add () { '(-f --force)'{-f,--force}'[allow adding otherwise ignored files]' \ '(-i --interactive : -)'{-i,--interactive}'[add contents interactively to index]' \ '(-p --patch)'{-p,--patch}'[like -i but go directly into patch mode for specified files]' \ + "--no-auto-advance[don't advance to next file when selecting hunks interactively]" \ '(-U --unified)'{-U+,--unified=}'[generate diff with given lines of context]:number of lines' \ '--inter-hunk-context=[combine patch hunks closer than specified number of lines]:number of lines' \ '(-e --edit)'{-e,--edit}'[open diff against index in editor]' \ @@ -515,6 +516,7 @@ _git-checkout () { "--ignore-other-worktrees[don't check if another worktree is using this branch]" \ '--recurse-submodules=-[control recursive updating of submodules]::checkout:__git_commits' \ '--no-overlay[remove files from index or working tree that are not in the tree-ish]' \ + "--no-auto-advance[don't advance to next file when selecting hunks interactively]" \ '(-q --quiet --progress)--no-progress[suppress progress reporting]' \ '--progress[force progress reporting]' \ '(*)--pathspec-from-file=[read pathspec from file]:file:_files' \ @@ -1011,6 +1013,7 @@ _git-format-patch () { '--from=[add From: header to email headers]: :_email_addresses' \ '*--add-header=[add an arbitrary header to email headers]:header' \ '--cover-letter[generate a cover letter template]' \ + '(--cover-letter)--commit-list-format=[format commit list in the cover letter]:format:(short-log modern)' \ '--notes=[append notes for the commit after the three-dash line]:: :__git_notes_refs' \ '( --no-signature --signature-file)--signature=[add a signature]:signature' \ '(--signature --signature-file)--no-signature[do not add a signature]' \ @@ -1219,6 +1222,49 @@ _git-gui () { return ret } +(( $+functions[_git-history] )) || +_git-history() { + local curcontext=$curcontext ret=1 + local -a state line common + declare -A opt_args + + _arguments -C \ + ': :->command' \ + '*:: :->option-or-argument' && ret=0 + + case $state in + (command) + declare -a commands + + commands=( + 'reword:rewrite commit message of specified commit' + 'split:interactively split up commit' + ) + + _describe -t commands command commands && ret=0 + ;; + (option-or-argument) + curcontext=${curcontext%:*}-$line[1]: + common=( + "--dry-run[don't update any references]" + '--update-refs=[control which references will be updates]:references [branches]:(branches head)' + ':commit:__git_commits' + ) + + case $line[1] in + reword) _arguments -S -s $endopt $common && ret=0 ;; + split) + _arguments -S -s $endopt $common \ + '*: :__git_ignore_line_inside_arguments __git_tree_files ${PREFIX:-.} ${(Q)line[1]}' && ret=0 + ;; + *) _default && ret=0 ;; + esac + ;; + esac + + return ret +} + (( $+functions[_git-init] )) || _git-init () { _arguments -S -s $endopt \ @@ -1300,7 +1346,8 @@ _git-log () { (( $+functions[_git-maintenance] )) || _git-maintenance() { - local curcontext="$curcontext" state state_descr line ret=1 + local curcontext="$curcontext" ret=1 + local -a state state_descr line args local -A opt_args _arguments -C \ @@ -1324,16 +1371,27 @@ _git-maintenance() { (option-or-argument) curcontext=${curcontext%:*}-$line[1]: case $line[1] in - (run) + run) _arguments -S $endopt \ '--auto[run tasks based on the state of the repository]' \ + '--detach[perform maintenance in the background]' \ '--schedule=[run tasks based on frequency]:frequency (seconds)' \ "--quiet[don't report progress or other information to stderr]" \ '*--task=[run a specific task]:task:(gc commit-graph prefetch loose-objects incremental-repack pack-refs)' && ret=0 ;; - (start) + start) _arguments \ - '--scheduler=:scheduler:(auto crontab systemd-timer launchctl schtasks)' + '--scheduler=:scheduler:(auto crontab systemd-timer launchctl schtasks)' && ret=0 + ;; + unregister) + args=( '(-f --force)'{-f,--force}'[return success even if repository was not registered]' ) + ;& + register) + _arguments -S $endopt $args \ + '--config-file=[use given config file]:config file:_files' && ret=0 + ;; + stop) _message 'no more arguments' ;; + *) _default && ret=0 ;; esac ;; esac @@ -1591,6 +1649,7 @@ _git-range-diff () { '(--right-only)--left-only[only emit output related to the first range]' \ '(--left-only)--right-only[only emit output related to the second range]' \ '(--remerge-diff)--diff-merges=[specify diff format to be used for merge commits]:format [m]:(off none 1 first-parent separate c combined cc dense-combined r remerge m on)' \ + '--max-memory=[specify maximum memory for cost matrix]:memory [4G]' \ '(--diff-merges -p --patch -u)--remerge-diff[produce remerge-diff output for merge commits]' \ $diff_options \ '1:range 1:__git_commit_ranges' \ @@ -1638,6 +1697,7 @@ _git-rebase () { "(--autostash --no-autostash)--no-autostash[don't stash uncommitted changes before rebasing and apply them afterwards]" \ '(--root)--fork-point[use merge-base --fork-point to refine upstream]' \ '--signoff[add Signed-off-by: trailer to the commit message]' \ + '(--force-rebase)*--trailer=[add custom trailer to every rebased commit]:trailer:__git_trailers_tokens' \ '--no-ff[cherry-pick all rebased commits with --interactive, otherwise synonymous to --force-rebase]' \ '(--keep-base)--onto=[start new branch with HEAD equal to given revision]:newbase:__git_revisions' \ "(--apply --whitespace -C)--reschedule-failed-exec[automatically re-schedule any 'exec' that fails]" \ @@ -1661,6 +1721,7 @@ _git-reset () { '(--soft --mixed --hard --merge -p --patch -U --unified --inter-hunk-context -- *)--keep[like --hard, but keep local working tree changes]' \ '--recurse-submodules=-[control recursive updating of submodules]::reset:__git_commits' \ '(-p --patch --soft --mixed -N --intent-to-add --hard --merge --keep)'{-p,--patch}'[select diff hunks to remove from the index]' \ + "--no-auto-advance[don't advance to next file when selecting hunks interactively]" \ '(-U --unified --soft --mixed -N --intent-to-add --hard --merge --keep)'{-U+,--unified=}'[generate diff with given lines of context]:number of lines' \ '(--soft --mixed -N --intent-to-add --hard --merge --keep)--inter-hunk-context=[combine patch hunks closer than specified number of lines]:number of lines' \ '(-N --intent-to-add --soft --mixed --hard --merge --keep -p --patch -U --unified --inter-hunk-context -- *)'{-N,--intent-to-add}'[record only the fact that removed paths will be added later]' \ @@ -1903,6 +1964,7 @@ _git-sparse-checkout() { reapply:'reapply the sparsity pattern rules to paths in the working tree' disable:'disable the config setting, and restore all files in the working directory' check-rules:'check whether sparsity rules match one or more paths' + clean:'remove files outside of the sparse-checkout definition' ) _describe -t commands command commands && ret=0 @@ -1910,7 +1972,7 @@ _git-sparse-checkout() { (option-or-argument) curcontext=${curcontext%:*}-$line[1]: case $line[1] in - init) + init|reapply) _arguments \ '--cone[allow for better performance with a limited set of patterns]' \ '--no-sparse-index[rewrite index to not be sparse]' && ret=0 @@ -1929,6 +1991,12 @@ _git-sparse-checkout() { '--cone[interpret rules file patterns as cone mode patterns]' \ '--rules-file=[use patterns in specified file]:file:_files' && ret=0 ;; + clean) + _arguments \ + '(-f --force)'{-f,--force}'[remove files]' \ + '--dry-run[list the directories that would be removed without deleting them]' \ + '--verbose[list every file considered for removal]' + ;; esac ;; esac @@ -2237,12 +2305,16 @@ _git-submodule () { _git-subtree () { local curcontext="$curcontext" state state_descr line ret=1 declare -A opt_args + local -a common=( + '(-q --quiet)'{-q,--quiet}'[suppress progress output]' + '(-d --debug)'{-d,--debug}'[show debug messages]' + '(-P --prefix)'{-P+,--prefix=}'[the path to the subtree in the repository to manipulate]: :_directories' + '(-S --gpg-sign --no-gpg-sign)'{-S-,--gpg-sign=-}'[GPG-sign the commit]::key id' + "(-S --gpg-sign --no-gpg-sign)--no-gpg-sign[don't GPG-sign the commit]" + ) # TODO: -P should only complete paths inside the current repository. - _arguments -C \ - '(-q --quiet)'{-q,--quiet}'[suppress progress output]' \ - '(-P --prefix)'{-P+,--prefix=}'[the path to the subtree in the repository to manipulate]: :_directories' \ - '(-d --debug)'{-d,--debug}'[show debug messages]' \ + _arguments -C $common \ ': :->command' \ '*::: := ->option-or-argument' && ret=0 @@ -2263,7 +2335,7 @@ _git-subtree () { curcontext=${curcontext%:*}-$line[1]: case $line[1] in (add) - _arguments \ + _arguments $common \ '(-q --quiet)'{-q,--quiet}'[suppress progress output]' \ '(-m --message)'{-m+,--message=}'[use the given message as the commit message for the merge commit]:message' \ '(-P --prefix)'{-P+,--prefix=}'[the path to the subtree in the repository to manipulate]: :_directories' \ @@ -2276,35 +2348,27 @@ _git-subtree () { # __git_ref_specs. ;; (merge) - _arguments -S \ - '(-q --quiet)'{-q,--quiet}'[suppress progress output]' \ - '(-P --prefix)'{-P+,--prefix=}'[the path to the subtree in the repository to manipulate]: :_directories' \ + _arguments -S $common \ '(-m --message)'{-m+,--message=}'[use the given message as the commit message for the merge commit]:message' \ '--squash[import only a single commit from the subproject]' \ ': :__git_references' && ret=0 ;; (pull) - _arguments -S \ - '(-q --quiet)'{-q,--quiet}'[suppress progress output]' \ - '(-P --prefix)'{-P+,--prefix=}'[the path to the subtree in the repository to manipulate]: :_directories' \ + _arguments -S $common \ '(-m --message)'{-m+,--message=}'[use the given message as the commit message for the merge commit]:message' \ '--squash[import only a single commit from the subproject]' \ ': :__git_any_repositories' \ ':: :__git_ref_specs' && ret=0 ;; (push) - _arguments -S \ - '(-q --quiet)'{-q,--quiet}'[suppress progress output]' \ - '(-P --prefix)'{-P+,--prefix=}'[the path to the subtree in the repository to manipulate]: :_directories' \ + _arguments -S $common \ '(-m --message)'{-m+,--message=}'[use the given message as the commit message for the merge commit]:message' \ ': :__git_any_repositories' \ ':: :__git_ref_specs' && ret=0 ;; (split) - _arguments -S \ + _arguments -S $common \ '--annotate[add a prefix to commit message of new commits]:prefix' \ - '(-q --quiet)'{-q,--quiet}'[suppress progress output]' \ - '(-P --prefix)'{-P+,--prefix=}'[specify path to the subtree in the repository to manipulate]: :_directories' \ '(-b --branch)'{-b,--branch=}'[create a new branch]' \ '--onto=[try connecting new tree to an existing one]: :__git_ref_specs' \ '(-m --message)'{-m+,--message=}'[specify commit message for the merge]:message' \ @@ -2472,12 +2536,12 @@ _git-worktree() { _arguments -s -S $endopt \ '(-n --dry-run)'{-n,--dry-run}"[don't remove, show only]" \ '(-v --verbose)'{-v,--verbose}'[report pruned objects]' \ - '--expire=[expire objects older than specified time]: :_git_approxidates' && ret=0 + '--expire=[prune missing working trees older than specified time]: :_git_approxidates' && ret=0 ;; (list) _arguments -S $endopt \ '(-v --verbose --porcelain -z)'{-v,--verbose}'[output additional information about worktrees]' \ - "--expire=[add 'prunable' annotation to worktrees older than specified time]: :_git_approxidates" \ + "--expire=[add 'prunable' annotation to missing worktrees older than specified time]: :_git_approxidates" \ '(-v)--porcelain[machine-readable output]' \ '(-v)-z[terminate each line with a NUL rather than a newline]' && ret=0 ;; @@ -2810,7 +2874,7 @@ __git_config_option-or-value () { 'diff.*.textconv:command to generate the text-converted version of a file::_cmdstring' 'diff.*.wordregex:regular expression that the diff driver should use to split words in a line:regular expression:->string' 'diff.*.xfuncname:regular expression that the diff driver should use to recognize the hunk header:regular expression:->string' - diff.algorithm:'default diff algorithm::->diff.algorithm:default' + diff.algorithm:"default diff algorithm::_git_diff_algorithms" diff.autorefreshindex:'run git update-index --refresh before git diff::->bool:true' diff.colorMoved:"color moved lines in diffs::__git_color_moved" diff.colorMovedWS:"ignore whitespace when detecting moved lines::__git_color_movedws" @@ -3689,14 +3753,6 @@ __git_config_option-or-value () { __git_guard_number 'number of days' fi ;; - (diff.algorithm) - __git_config_values -- "$current" "$parts[5]" \ - default:'basic greedy diff algorithm' \ - myers:'basic greedy diff algorithm' \ - minimal:'spend extra time to make sure the smallest possible diff is produced' \ - patience:'generate diffs with patience algorithm' \ - histogram:'generate diffs with histogram algorithm' && ret=0 - ;; (diff.renames) __git_config_booleans "$current" "$parts[5]" "$parts[2]" \ {copies,copy}:'try to detect both renames and copies' && ret=0 @@ -4072,6 +4128,7 @@ _git-reflog () { 'show:show log of ref' 'drop:remove reflog for specified references' 'exists:check whether a ref has a reflog' + 'write:write reflog entry for a reference' ) _alternative \ @@ -4114,7 +4171,10 @@ _git-reflog () { ;; (exists) __git_references && ret=0 - ;; + ;; + write) + _arguments ': :__git_references' ':old oid' ':new oid' ':message' && ret=0 + ;; esac esac @@ -4138,6 +4198,9 @@ _git-refs() { commands=( 'migrate:migrate ref store between different formats' 'verify:verify reference database consistency' + 'list:list references in the repository, alias for git-for-each-ref' + 'exists:check whether given reference exists' + 'optimize:optimize references to improve repository performance, alias for git-pack-refs' ) _describe -t commands command commands && ret=0 @@ -4157,6 +4220,9 @@ _git-refs() { '--strict[enable stricter error checking]' \ '--verbose[when verifying the reference database consistency, be chatty]' && ret=0 ;; + list) _git-for-each-ref && ret=0 ;; + exists) __git_references && ret=0 ;; + optimize) _git-pack-refs && ret=0 ;; *) _default && ret=0 ;; esac ;; @@ -4363,6 +4429,7 @@ _git-blame () { '(-n --show-number)'{-n,--show-number}'[show the line number in the original commit]' \ '-s[suppress author name and timestamp]' \ '-w[ignore whitespace when finding lines]' \ + '--diff-algorithm=[choose a diff algorithm to use when computing blame]: :_git_diff_algorithms' \ '--ignore-rev=[ignore specified revision when blaming]:revision:__git_revisions' \ '--ignore-revs-file=[ignore revisions from file]:file:_files' \ '(--color-by-age)--color-lines[color redundant metadata from previous line differently]' \ @@ -4841,10 +4908,14 @@ _git-send-email () { '--smtp-server-port=[specify port to connect to SMTP server on]:smtp port:_ports' \ '--smtp-server-option=[specify the outgoing SMTP server option to use]:SMTP server option' \ '--smtp-ssl-cert-path=[path to ca-certificates (directory or file)]:ca certificates path:_files' \ + '--smtp-ssl-client-cert=[path to client certificate file]: :_files' \ + '--smtp-ssl-client-key=[path to the private key file for the client certificate]: :_files' \ '--smtp-user=[specify user to use for SMTP-AUTH]:smtp user:_users' \ '(--no-smtp-auth)--smtp-auth=[specify allowed AUTH mechanisms]:space-separated list of mechanisms' \ '(--smtp-auth)--no-smtp-auth[disable SMTP authentication]' \ '--smtp-debug=[enable or disable debug output]:smtp debug:((0\:"disable" 1\:"enable"))' \ + '--imap-sent-folder=[IMAP folder where a copy of the emails should be sent]:IMAP folder' \ + '--use-imap-only[only copy emails instead of actually sending them]' \ '--batch-size=[specify maximum number of messages per connection]:number' \ '--relogin-delay=[specify delay between successive logins]:delay (seconds)' \ '--cc-cmd=[specify command to generate Cc\: header with]:Cc\: command:_cmdstring' \ @@ -5328,11 +5399,7 @@ _git-merge-file () { '( --theirs --union)--ours[resolve conflicts favoring our side of the lines]' \ '(--ours --union)--theirs[resolve conflicts favoring their side of the lines]' \ '(--ours --theirs )--union[resolve conflicts favoring both sides of the lines]' \ - '--diff-algorithm=[choose a diff algorithm]:diff algorithm:((default\:"basic greedy diff algorithm" - myers\:"basic greedy diff algorithm" - minimal\:"spend extra time to make sure the smallest possible diff is produced" - patience\:"generate diffs with patience algorithm" - histogram\:"generate diffs with histogram algorithm"))' \ + '--diff-algorithm=[choose a diff algorithm]: :_git_diff_algorithms' \ '--marker-size[specify length of conflict markers]: :__git_guard_number "marker length"' \ '--object-id[use object IDs instead of filenames]' \ '(--zdiff3)--diff3[show conflicts in "diff3" style]' \ @@ -5377,10 +5444,13 @@ _git-multi-pack-index() { _arguments \ '--object-dir=[specify location of git objects]:directory:_directories' \ '(--progress)--no-progress[turn progress off]' '!(--no-progress)--progress' \ + '--preferred-pack=[break ties in favor of specified pack]:pack' \ + '--bitmap[write a multi-pack bitmap]' \ '--stdin-packs[write a multi-pack index containing only pack index basenames provided on stdin]' \ '--refs-snapshot=[specify a file which contains a "refs snapshot" taken prior to repacking]:file:_files' \ + '--incremental[write an incremental MIDX file]' \ '--batch-size=[during repack, select packs so as to have pack files of at least the specified size]:size' \ - '1:verb:(write verify expire repack)' + '1:verb:(write compact verify expire repack)' } (( $+functions[_git-pack-objects] )) || @@ -5494,6 +5564,21 @@ _git-read-tree () { '3::third tree-ish to be read/merged:__git_tree_ishs' } +(( $+functions[_git-replay] )) || +_git-replay() { + _arguments -S $endopt \ + '(--advance --revert)--contained[update all branches that point to commits in given range]' \ + '(--advance --revert)--onto=[replay onto given commit]: :__git_revisions' \ + '(--onto --revert)--advance=[advance given branch]: :__git_branches' \ + '(--onto --advance)--revert=[revert commits onto given branch]: :__git_branches' \ + '--ref=[specify reference to update with result]: :__git_ref_specs' \ + '--ref-action=[control ref update behavior]:behavior:(( + update\:"update directly using atomic transaction" + print\:"output update-ref commands for pipeline use" + ))' \ + ':revision range:__git_commit_ranges' +} + (( $+functions[_git-symbolic-ref] )) || _git-symbolic-ref () { _arguments -S -s \ @@ -6280,7 +6365,10 @@ _git-hook() { _arguments $args \ '--ignore-missing[ignore any missing hook by quietly returning zero]' \ "--to-stdin=[specify file which will be redirected to hook's stdin]:file:_files" \ - '1:subcommand:(run)' \ + '--allow-unknown-hook-name' \ + '-z[terminate output lines with NUL instead of newlines]' \ + '--show-scope[prefix each hook name with a config scope]' \ + '1:subcommand:(run list)' \ '2:hook name:compadd $gitdir/hooks/*(x\:t)' } @@ -6523,6 +6611,7 @@ _git_commands () { gc:'cleanup unnecessary files and optimize local repository' grep:'print lines matching a pattern' gui:'run portable graphical interface to git' + history:'rewrite history' init:'create empty git repository or re-initialize an existing one' log:'show commit logs' maintenance:'run tasks to optimize Git repository data' @@ -6533,7 +6622,7 @@ _git_commands () { push:'update remote refs along with associated objects' range-diff:'compare two commit ranges' rebase:'forward-port local commits to the updated upstream head' - reset:'reset current HEAD to specified state' + reset:'reset HEAD or the index to a known state' restore:'restore working tree files' revert:'revert existing commits' rm:'remove files from the working tree and from the index' @@ -6545,7 +6634,7 @@ _git_commands () { submodule:'initialize, update, or inspect submodules' subtree:'split repository into subtrees and merge them' switch:'switch branches' - tag:'create, list, delete or verify tag object signed with GPG' + tag:'create, list, delete or verify tags' worktree:'manage multiple working dirs attached to the same repository' ) ancillary_manipulator_commands=( @@ -6606,6 +6695,7 @@ _git_commands () { pack-objects:'create packed archive of objects' prune-packed:'remove extra objects that are already in pack files' read-tree:'read tree information into directory index' + replay:'replay commits on a new base, works with bare repos too' symbolic-ref:'read and modify symbolic references' unpack-objects:'unpack objects from packed archive' update-index:'register file contents in the working directory to the index' @@ -6779,6 +6869,17 @@ __git_date_formats () { _describe -t date-formats 'date format' date_formats -- '( format\:custom\ format )' -S : } +(( $+functions[_git_diff_algorithms] )) || +_git_diff_algorithms() { + _describe -t diff-algorithms 'diff algorithm' '( + default\:"basic greedy diff algorithm" + myers\:"basic greedy diff algorithm" + minimal\:"spend extra time to produce smallest possible diff" + patience\:"generate diffs with patience algorithm" + histogram\:"generate diffs with histogram algorithm" + )' +} + (( $+functions[_git_diff_filters] )) || _git_diff_filters() { local sep @@ -6849,7 +6950,7 @@ _git_strategy_options() { renormalize no-renormalize \ 'find-renames::similarity threshold' \ subtree:path \ - 'diff-algorithm:algorithm:(patience minimal histogram myers)' + 'diff-algorithm:algorithm:_git_diff_algorithms' } (( $+functions[__git_encodings] )) || @@ -8172,11 +8273,7 @@ __git_setup_diff_options () { '(--minimal --patience --histogram --diff-algorithm)--patience[generate diffs with patience algorithm]' '(--minimal --patience --histogram --diff-algorithm)--histogram[generate diffs with histogram algorithm]' '(--minimal --patience --histogram --diff-algorithm)*--anchored=[generate diffs using the "anchored diff" algorithm]:text' - '(--minimal --patience --histogram --diff-algorithm)--diff-algorithm=[choose a diff algorithm]:diff algorithm:((default\:"basic greedy diff algorithm" - myers\:"basic greedy diff algorithm" - minimal\:"spend extra time to make sure the smallest possible diff is produced" - patience\:"generate diffs with patience algorithm" - histogram\:"generate diffs with histogram algorithm"))' + '(--minimal --patience --histogram --diff-algorithm)--diff-algorithm=[choose a diff algorithm]: :_git_diff_algorithms' \ '--stat=-[generate diffstat instead of patch]:: :__git_guard_diff-stat-width' '--stat-width=-[generate diffstat with a given width]:width' '--stat-graph-width=-[generate diffstat with a given graph width]:width' @@ -8208,6 +8305,7 @@ __git_setup_diff_options () { "(--color-moved-ws)--no-color-moved-ws=[don't ignore whitespace when performing move detection]" "--ita-invisible-in-index[hide 'git add -N' entries from the index]" "!(--ita-invisible-in-index)--ita-visible-in-index" + '--max-depth=[specify maximum tree depth to recurse]:depth' '--no-renames[turn off rename detection]' $exclusive_diff_options'--check[warn if changes introduce trailing whitespace or space/tab indents]' '--full-index[show full object name of pre- and post-image blob]' @@ -8225,7 +8323,7 @@ __git_setup_diff_options () { '--diff-filter=-[select certain kinds of files for diff]: :_git_diff_filters' '-S-[look for differences that add or remove the given string]:string' '-G-[look for differences whose added or removed line matches the given regex]:pattern' - '--pickaxe-all[when -S finds a change, show all changes in that changeset]' + '--pickaxe-all[when -G or -S find a change, show all changes in that changeset]' '--pickaxe-regex[treat argument of -S as regular expression]' '-O-[output patch in the order of glob-pattern lines in given file]: :_files' '--rotate-to=[show the change in specified path first]:path:_directories' diff --git a/Completion/Unix/Command/_gphoto2 b/Completion/Unix/Command/_gphoto2 index 788c9702f..df17aa111 100644 --- a/Completion/Unix/Command/_gphoto2 +++ b/Completion/Unix/Command/_gphoto2 @@ -11,6 +11,7 @@ _arguments -s -C \ '--debug-loglevel=[set debug level]:debug level:(error debug data all)' \ '--debug-logfile=[name of file to write debug info to]:file:_files' \ '(-q --quiet)'{-q,--quiet}'[quiet output]' \ + '(-q --quiet)--parsable[simple parsable output]' \ '--hook-script=[hook script to call after downloads, captures, etc.]:file:_files' \ '--stdout[send file to stdout]' \ '--stdout-size[print filesize before data]' \ @@ -41,8 +42,8 @@ _arguments -s -C \ '--keep[keep images on camera after capturing]' \ '--keep-raw[keep the RAW images on the camera with --capture-image-and-download]' \ '--no-keep[remove images from camera after capturing]' \ - '--wait-event=-[wait for event from camera]::count' \ - '--wait-event-and-download=-[wait for event from camera and download new images]::count' \ + '--wait-event=-[wait for event from camera]:: :_numbers -u events -d forever wait\ time s\:seconds ms\:milliseconds' \ + '--wait-event-and-download=-[wait for event from camera and download new images]:: :_numbers -u events -d forever wait\ time s\:seconds ms\:milliseconds' \ '--capture-preview[capture a quick preview]' \ '--show-preview[capture a quick preview and display using ASCII art]' \ '(-B --bulb)'{-B,--bulb=}'[set bulb exposure time]:exposure time (seconds)' \ @@ -54,7 +55,7 @@ _arguments -s -C \ '--capture-image-and-download[capture an image and download it]' \ '--capture-movie=-[capture a movie]:count or seconds' \ '--capture-sound[capture an audio clip]' \ - '--capture-tethered=-[wait for shutter release on the camera and download]::count' \ + '--capture-tethered=-[wait for shutter release on the camera and download]:: :_numbers -u events wait\ time s\:seconds ms\:milliseconds' \ '(-l --list-folders)'{-l,--list-folders}'[list folders in folder]' \ '(-L --list-files)'{-L,--list-files}'[list files in folder]' \ '(-m --mkdir)'{-m,--mkdir=}'[create a directory]:directory' \ @@ -75,6 +76,7 @@ _arguments -s -C \ '(-D --delete-all-files)'{-D,--delete-all-files}'[delete all files in folder]' \ '(-u --upload-file)'{-u,--upload-file=}'[upload a file to camera]:file:_files' \ '--filename=[specify pattern to save file as]:pattern:_date_formats' \ + '--filenumber=[specify the number %n in the filename pattern starts at]:starting number [1]' \ '(-f --folder)'{-f,--folder=}'[specify camera folder]:folder [/]' \ '(-R --recurse --no-recurse)'{-R,--recurse}'[recursion (default for download)]' \ '(-R --recurse)--no-recurse[no recursion (default for deletion)]' \ diff --git a/Completion/Unix/Command/_id b/Completion/Unix/Command/_id index 64b8c9b37..ce18ed719 100644 --- a/Completion/Unix/Command/_id +++ b/Completion/Unix/Command/_id @@ -44,8 +44,10 @@ else freebsd*) args+=( '(-)-A[print process audit user ID]' - '(-)-M[print MAC label of the current process]' + '(- 1)-M[print MAC label of the current process]' '(-)-c[print current login class]' + '(-)-d[print home directory]' + '(-)-s[print shell]' ) ;| darwin*|dragonfly*|freebsd*|netbsd*|openbsd*) diff --git a/Completion/Unix/Command/_ip b/Completion/Unix/Command/_ip index 0dde5e5f0..2d6774768 100644 --- a/Completion/Unix/Command/_ip +++ b/Completion/Unix/Command/_ip @@ -21,12 +21,12 @@ local -a subcmd_string subcmd_string=(/$'[^\0]#\0'/ ':string:arbitrary string:( )') local -a subcmd_number -subcmd_number=(/$'[0-9]##\0'/ ':number:decimal number:( )') +subcmd_number=(/$'[0-9]##\0'/ ': _message -e numbers "decimal number"') local xp='[[:xdigit:]][[:xdigit:]]' local -a subcmd_lladdr subcmd_lladdr=(/"${xp}:${xp}:${xp}:${xp}:${xp}:${xp}"$'\0'/ -':lladdress:link layer (MAC) address:( )') + ': _message -e lladdresses "link layer (MAC) address"') local -a subcmd_ipaddr subcmd_ipaddr=( @@ -57,7 +57,7 @@ _regex_words scope "IP address scope" \ subcmd_scope=("$reply[@]") local -a subcmd_nud -_regex_words nud "Neighbour Unreachability Detection state" \ +_regex_words nud "neighbour unreachability detection state" \ 'permanent:valid forever' \ 'noarp:valid, not validated, removed if expired' \ 'reachable:valid until reachability timeout' \ @@ -65,7 +65,7 @@ _regex_words nud "Neighbour Unreachability Detection state" \ subcmd_nud=("$reply[@]") local -a subcmd_rttype -_regex_words route-type "Route type" \ +_regex_words route-type "route type" \ 'unicast:real point-to-point route' \ 'unreachable:generate Host Unreachable messages' \ 'blackhole:silently discard' \ @@ -85,12 +85,12 @@ local -a subcmd_route subcmd_route=("(" $subcmd_rttype "|" ")" $subcmd_ipaddr) local -a subcmd_tos -_regex_words tos "type of service" \ +_regex_words tos "service type" \ 'lowdelay:low latency' \ 'throughput:high bulk throughput' \ 'reliability:high reliability' subcmd_tos=("(" "$reply[@]" "|" - /$'(|0x)[[:xdigit:]]##\0'/ ":hex-number:8-bit hex number:( )" ")") + /$'(|0x)[[:xdigit:]]##\0'/ ":hex-numbers:8-bit hex number:( )" ")") local -a subcmd_lockmtu subcmd_lockmtu=("(" /$'lock\0'/ ":lock:lock:(lock)" "|" ")" $subcmd_number ) @@ -123,7 +123,7 @@ local -a subcmd_rtrealm subcmd_rtrealms _regex_words -t / rtrealm 'routing realm' \ 'cosmos:everywhere' subcmd_rtrealms=("(" "$reply[@]" "|" /$'[0-9]##/'/ - ':number:decimal number:( )' ")") + ':numbers:decimal number:( )' ")") _regex_words rtrealm 'routing realm' \ 'cosmos:everywhere' @@ -160,22 +160,46 @@ _regex_words tunnelmode 'tunnel mode' \ 'gre:Generic Route Encapsulation - IPv4/IPv6 in IPv4 tunnel' subcmd_tunnelmode=("$reply[@]") -local -a subcmd_files -subcmd_files=(/$'[^\0]##\0'/ ':file:file name:_files') +local -a subcmd_linktype +subcmd_linktype=(/$'[^\0]##\0'/ ':link-types:link type:(bridge bond dummy hsr ifb ipoib macvlan macvtap vcan veth vlan vxlan ip6tnl ipip sit gre gretap ip6gre ip6gretap vti nlmon ipvlan lowpan geneve macsec vrf)') +local -a subcmd_files +subcmd_files=(/$'[^\0]##\0'/ ':files:file:_files') # # The ip top-level commands. First link # + +local -a link_common_cmds +link_common_cmds=( + 'txq*ueuelen:specify length of transmit queue:$subcmd_number' \ + 'ad*dress:specify unicast link layer (MAC) address:$subcmd_lladdr' \ + 'br*oadcast:specify broadcast link layer (MAC) address:$subcmd_lladdr' \ + 'm*tu:specify maximum transmit unit:$subcmd_number' +) +local -a link_add_cmds +_regex_words \ + link-add-commands 'link add command' $link_common_cmds \ + 'link:specify device:$subcmd_dev' \ + 'name:specify name' \ + 'type:specify type:$subcmd_linktype' \ + 'numtxqueues:specify number of transmit queues:$subcmd_number' \ + 'numrxqueues:specify number of receive queues:$subcmd_number' \ + 'index:specify desired index' \ + 'group:multicast IP address to join:$subcmd_lladdr' +link_add_cmds=( "$reply[@]" "#" ) + local -a link_set_cmds _regex_words \ - link-set-commands 'link set commands' \ + link-set-commands 'link set command' \ 'dev:specify device:$subcmd_dev' \ 'u*p:change state to up' \ 'do*wn:change state to down' \ 'ar*p:change ARP flag on device:$subcmd_onoff' \ 'mu*lticast:change MULTICAST flag on device:$subcmd_onoff' \ + 'allmulticast:change allmulticast flag on device:$subcmd_onoff' \ 'pr*omisc:set promiscuous mode:$subcmd_onoff' \ + 'protodown:change the PROTODOWN state on the device:$subcmd_onoff' \ 'dy*namic:change DYNAMIC flag on device:$subcmd_onoff' \ 'n*ame:change name of device:$subcmd_string' \ 'txq*ueuelen:specify length of transmit queue:$subcmd_number' \ @@ -189,7 +213,7 @@ _regex_words \ link_set_cmds=("(" $subcmd_dev "|" ")" "$reply[@]" "#" ) local -a link_show_cmds -_regex_words link-show-commands 'link show commands' \ +_regex_words link-show-commands 'link show command' \ 'dev:specify device:$subcmd_dev' \ 'up:limit display to running devices' link_show_cmds=("(" $subcmd_dev "|" ")" "$reply[@]" "#" ) @@ -197,15 +221,16 @@ link_show_cmds=("(" $subcmd_dev "|" ")" "$reply[@]" "#" ) local -a link_cmds _regex_words \ link-commands "link command" \ + 'a*dd:add virtual link:$link_add_cmds' \ 'h*elp:show help for command' \ 'se*t:change device attributes:$link_set_cmds' \ 'sh*ow:display device attributes:$link_show_cmds' link_cmds=("$reply[@]") - # # addr # + local -a addr_add_cmds # TODO: broadcast can take + or = _regex_words addr-add-commands "addr add/remove/change/replace commands" \ @@ -214,7 +239,12 @@ _regex_words addr-add-commands "addr add/remove/change/replace commands" \ 'p*eer:specify peer IP address (point-to-point):$subcmd_ipaddr' \ 'b*roadcast:specify broadcast IP address:$subcmd_ipaddr' \ 'la*bel:specify tag for device:$subcmd_string' \ - 's*cope:specify scope for address:$subcmd_scope' + 's*cope:specify scope for address:$subcmd_scope' \ + 'valid_lft:specify valid lifetime of this address' \ + 'preferred_lft:specify valid lifetime of this address' \ + 'home:designate this address as the "home address" (IPv6)' \ + 'mngtmpaddr:manage temporary addresses created from this one as template on behalf of Privacy Extensions' + # can complete IP address with no keyword addr_add_cmds=("(" $subcmd_ipaddr "|" ")" "$reply[@]" "#" ) @@ -282,6 +312,7 @@ addrlabel_cmds=("$reply[@]") # # neigh # + local -a neigh_add_cmds _regex_words neigh-add-commands "neighbour add command" \ 't*o:add new neighbour IP address:$subcmd_ipaddr' \ @@ -321,6 +352,7 @@ neigh_cmds=("$reply[@]") # # route # + local -a route_add_cmds _regex_words route-add-commands "route add/change/replace command" \ 'to:route destination prefix:$subcmd_route' \ @@ -393,10 +425,10 @@ _regex_words \ 'g*et:get a single network route:$route_get_cmds' route_cmds=("$reply[@]") - # # rule # + local -a rule_add_cmds _regex_words rule-add-commands 'ip rule add/delete commands' \ 'ty*xpe:type of rule:$subcmd_ruletypes' \ @@ -423,10 +455,10 @@ _regex_words \ 's*how:list routing rules' rule_cmds=("$reply[@]") - # # tunnel # + local -a tunnel_add_cmds _regex_words tunnel-add-commands 'tunnel add/change/delete commands' \ 'na*me:select tunnel device name:$subcmd_dev' \ @@ -461,10 +493,10 @@ _regex_words \ 's*how:list IP tunnels' tunnel_cmds=("$reply[@]") - # # maddr # + local -a maddr_add_cmds _regex_words maddr-add-commands "maddr add/delete command" \ 'a*ddress:select link layer (MAC) address:$subcmd_lladdr' \ @@ -486,10 +518,10 @@ _regex_words \ 's*how:list multicast addresses:$maddr_show_cmds' maddr_cmds=("$reply[@]") - # # mroute # + local -a mroute_show_cmds _regex_words mroute-show-commands "mroute show command" \ 'to:select destination prefix:$subcmd_ipaddr' \ @@ -504,10 +536,10 @@ _regex_words \ 's*how:list multicast routing cache entries:$mroute_show_cmds' mroute_cmds=("$reply[@]") - # # monitor # + local -a monitor_cmds _regex_words \ monitor-commands "monitor command" \ @@ -519,7 +551,6 @@ _regex_words \ 'file:read rtmon-generated log:$subcmd_files' monitor_cmds=("$reply[@]") - # # Global argument handling # @@ -531,20 +562,18 @@ args=( /$'[^\0]#\0'/ ) -# TODO: -# -b*atch <FILENAME> -# -force (for batch mode) -# -l*oops <COUNT> -# -n*etns <NETNS> -# -rc, -rcvbuf<SIZE> -_regex_words options "ip options" \ - '-h*uman:output statistics with human readable values' \ +_regex_words options "ip option" \ + '-V*ersion:display version information' \ + '-h*uman-readable:output statistics with human readable values' \ + '-b*atch:read commands from specified file:$subcmd_files' \ + '-force:do not terminate on errors in batch mode' \ '-i*ec:print human readable rates in IEC units (ie. 1K = 1024)' \ '-s*tatistics:output statistics' \ '-d*etails:output more detailed information' \ '-c*olor:color output' \ '-br*ief:brief output' \ '-a*ll:executes specified command over all objects' \ + '-l*oops:specify maximum loops ip address flush logic will attempt:$subcmd_number' \ '-f*amily:select protocol family:$subcmd_family' \ '-4:IPv4' \ '-6:IPv6' \ @@ -556,9 +585,17 @@ _regex_words options "ip options" \ '-o*neline:output one record per line' \ '-j*son:output results in JSON' \ '-p*retty:pretty print JSON' \ + '-r*esolve:use system resolver for DNS names' \ + '-n*etns:switch to specified network namespace:$subcmd_string' \ + '-N*umeric:print numbers instead of converting to text forms' \ + '-a*ll:execute specified command over all objects' \ + '-c*olor:use color output' \ '-t*imestamp:display current time when using monitor option' \ - '-ts*hort:display current time in shorter format when using monitor option' \ - '-r*esolve:use system resolver for DNS names' + '-ts*hort:like -timestamp, but use shorter format' \ + '-rc*vbuf:set the netlink socket receive buffer size:$subcmd_number' \ + '-iec:print human readable rates in IEC units' \ + '-j*son:output results in JSON format' \ + '-echo:request the kernel to send applied changes back' args+=("$reply[@]" "#") _regex_words \ @@ -569,10 +606,23 @@ _regex_words \ 'r*oute:manage routing table:$route_cmds' \ 'ru*le:manage routing policy database:$rule_cmds' \ 'n*eigh:manage neighbour/ARP tables:$neigh_cmds' \ + 'nt*able:manage the neighbor cache operation' \ 't*unnel:configure tunnel:$tunnel_cmds' \ + 'net*ns:manage network namespaces' \ + 'l2*tp:tunnel ethernet over IP (L2TPv3)' \ + 'f*ou:UDP receive port configuration' \ + 'mac*sec:MACsec device configuration' \ + 'tcp_metrics:manage TCP metrics' \ + 'token:manage tokenized interface identifiers' \ + 'netc*onf:network configuration monitoring' \ + ila ioam mptcp nexthop vrf sr stats \ 'm*addr:manage multicast addresses:$maddr_cmds' \ 'mr*oute:manage multicast routing cache:$mroute_cmds' \ - 'mo*nitor:monitor state:$monitor_cmds' + 'mru*le:multicast routing policy database' \ + 'mo*nitor:monitor state:$monitor_cmds' \ + 'tunt*ap:manage TUN/TAP devices' \ + 'x*frm:manage IPSec policies' \ + 'help' args+=("$reply[@]") _regex_arguments _ip "${args[@]}" diff --git a/Completion/Unix/Command/_jq b/Completion/Unix/Command/_jq index e8e6b0913..fb44702b2 100644 --- a/Completion/Unix/Command/_jq +++ b/Completion/Unix/Command/_jq @@ -30,7 +30,7 @@ _arguments -S -s : \ '(-r --raw-output -j --join-output)--raw-output0[like -r, with NUL after each output]' \ '(-r --raw-output --raw-output0 -j --join-output)'{-j,--join-output}"[like -r, without newlines between outputs]" \ '(-f --from-file)'{-f,--from-file}'[read filter from file]: :_files' \ - '-L+[prepend a directory to the module search path]:_directories' \ + \*{-L+,--library-path}'[prepend a directory to the module search path]:_directories' \ '(-e --exit-status)'{-e,--exit-status}'[report "false" and "null" results via exit code]' \ '*--arg[pre-set a variable to a string]:variable name: :value (string)' \ '*--argjson[pre-set a variable to an object]:variable name: :value (JSON)' \ diff --git a/Completion/Unix/Command/_ls b/Completion/Unix/Command/_ls index a92b91b31..5cd2e7f54 100644 --- a/Completion/Unix/Command/_ls +++ b/Completion/Unix/Command/_ls @@ -108,6 +108,12 @@ if ! _pick_variant gnu='(GNU|uutils)' unix --version; then '-Z[display MAC label]' ) fi + if [[ $OSTYPE = freebsd<15->.* ]]; then + arguments+=( + '(--group-directories-first)--group-directories=:order:(first last)' + '(--group-directories)--group-directories-first' + ) + fi if [[ $OSTYPE = darwin* ]]; then arguments+=( '-@[display extended attribute keys and sizes in long listing]' @@ -118,14 +124,18 @@ if ! _pick_variant gnu='(GNU|uutils)' unix --version; then '-%[distinguish dataless files and directories with a %]' ) fi - if [[ $OSTYPE = solaris* ]]; then + if [[ $OSTYPE = (aix|solaris)* ]]; then arguments+=( '(-q)-b[print octal escapes for control characters]' '(-l -1 -C -m -x)-o[long listing but without group information]' '(-l -t -s -r -a)-f[interpret each argument as a directory]' + '-H[follow symlinks on the command line]' + ) + fi + if [[ $OSTYPE = solaris* ]]; then + arguments+=( '(-E -l)-e[long listing with full and consistent date/time]' '(-e -l)-E[long listing with ISO format date/time]' - '-H[follow symlinks on the command line]' '-v[long listing with verbose ACL information]' '-V[long listing with compact ACL information]' '-@[long listing with marker for extended attribute information]' diff --git a/Completion/Unix/Command/_mtr b/Completion/Unix/Command/_mtr index 9a73cfbd4..c5f7ea129 100644 --- a/Completion/Unix/Command/_mtr +++ b/Completion/Unix/Command/_mtr @@ -9,6 +9,7 @@ _arguments -s -S \ '(H -f --first-ttl)'{-f+,--first-ttl=}'[specify TTL to start]:TTL [1]' \ '(H -m --max-ttl)'{-m+,--max-ttl=}'[specify maximum number of hops to probe]:hops [30]' \ '(H -U --max-unknown)'{-U+,--max-unknown=}'[specify maximum unknown hosts]:maximum [5]' \ + '(H -E --max-display-path)'{-E+,--max-display-path=}'[specify maximum number of ECMP paths to display]:ECMP paths [8]' \ '(H -P --port)'{-P+,--port=}'[specify target port for TCP, SCTP or UDP]:port' \ '(H -L --localport -T --tcp -S --sctp)'{-L+,--localport=}'[specify source port number for UDP]' \ '(H -s --psize 2)'{-s+,--psize=}'[packet size]:packet size (bytes)' \ @@ -41,6 +42,8 @@ _arguments -s -S \ "I[interarrival jitter]"' \ '(H -z --aslookup -y --ipinfo)'{-y+,--ipinfo=}'[select IP information in output]:information:((0\:display\ AS\ number 1\:display\ IP\ prefix 2\:display\ country\ code 3\:display\ RIR 4\:display\ allocation\ date))' \ '(H -y --ipinfo -z --aslookup)'{-z,--aslookup}'[display AS number]' \ + '(H)--ipinfo_provider4=[specify provider for IPv4 AS lookups]:domain [origin.asn.cymru.com]' \ + '(H)--ipinfo_provider6=[specify provider for IPv6 AS lookups]:domain [origin6.asn.cymru.com]' \ '(H)1:destination host:_hosts' \ '(H)2:packet size (bytes)' \ + '(H)' \ diff --git a/Completion/Unix/Command/_nano b/Completion/Unix/Command/_nano new file mode 100644 index 000000000..e2333b9f4 --- /dev/null +++ b/Completion/Unix/Command/_nano @@ -0,0 +1,87 @@ +#compdef nano rnano + +local -a args context state state_descr line expl +local -A opt_args + +args=( + '(-A --smarthome)'{-A,--smarthome}'[enable smart home key]' + '(-B --backup)'{-B,--backup}'[save backups of existing files]' + '(-C --backupdir)'{-C+,--backupdir=}'[save uniquely numbered backups to specified directory]:backup directory:_directories' + '(-D --boldtext)'{-D,--boldtext}'[use bold instead of reverse video text]' + '(-E --tabstospaces)'{-E,--tabstospaces}'[convert typed tabs to spaces]' + '(-F --multibuffer)'{-F,--multibuffer}'[read file into new buffer by default]' + '(-G --locking)'{-G,--locking}'[use vim-style lock files]' + '(-H --historylog)'{-H,--historylog}'[remember search/replace strings]' + '(-I --ignorercfiles)'{-I,--ignorercfiles}"[don't look at nanorc files]" + '(-J --guidestripe)'{-J+,--guidestripe=}'[show vertical stripe at specified column]: :_numbers -l1 "column number"' + '(-K --rawsequences)'{-K,--rawsequences}'[interpret escape sequences directly instead of via ncurses]' + '(-L --nonewlines)'{-L,--nonewlines}"[don't automatically add EOF newline]" + '(-M --trimblanks)'{-M,--trimblanks}'[trim trailing whitespaces when hard-wrapping]' + '(-N --noconvert -u --unix)'{-N,--noconvert}"[don't convert files from DOS/Mac format]" + '(-O --bookstyle)'{-O,--bookstyle}'[when justifying, leading whitespace means new paragraph]' + '(-P --positionlog)'{-P,--positionlog}'[remember cursor position]' + '(-Q --quotestr)'{-Q+,--quotestr=}'[specify regular expression to match quoting]:quoting regex [^([ \t]*([!#%%\:;>|}]|//))+]' + '(-R --restricted)'{-R,--restricted}'[restrict access to the file system]' + '(-S --softwrap)'{-S,--softwrap}'[soft-wrap long lines]' + '(-T --tabsize)'{-T+,--tabsize=}'[specify tab width]: :_numbers -u columns -l1 -d8 "tab width"' + '(-c --constantshow -U --quickblank)'{-U,--quickblank}'[hide status-bar messages after next keystroke]' + '(- : *)'{-V,--version}'[display version information]' + '(-W --wordbounds -X --wordchars)'{-W,--wordbounds}'[detect word boundaries more accurately]' + '(-W --wordbounds -X --wordchars)'{-X+,--wordchars=}'[specify word characters]:word characters' + '(-Y --syntax)'{-Y+,--syntax=}'[specify syntax-highlighting definition]: :->syntaxes' + '(-Z --zap)'{-Z,--zap}'[let Backspace/Delete erase marked region]' + '(-a --atblanks)'{-a,--atblanks}'[when soft wrapping, wrap at whitespace]' + '(-b --breaklonglines -w --nowrap)'{-b,--breaklonglines}'[automatically hard-wrap long lines]' + '(-c --constantshow -U --quickblank)'{-c,--constantshow}'[constantly report cursor position in status bar]' + '(-d --rebinddelete)'{-d,--rebinddelete}'[fix Backspace/Delete confusion problem]' + '(-e --emptyline)'{-e,--emptyline}'[keep line below title bar empty]' + '(-f --rcfile)'{-f+,--rcfile=}'[use only specified file for configuring nano]:rc file:_files' + '(-g --showcursor)'{-g,--showcursor}'[show cursor in file browser and help viewer]' + '(- : *)'{-h,--help}'[display help information]' + '(-i --autoindent)'{-i,--autoindent}'[automatically indent new lines]' + '(-j --jumpyscrolling)'{-j,--jumpyscrolling}'[scroll per half-screen, not per line]' + '(-k --cutfromcursor)'{-k,--cutfromcursor}"[make 'cut text' (^k) cut from cursor to end of line]" + '(-l --linenumbers)'{-l,--linenumbers}'[show line numbers]' + '(-m --mouse)'{-m,--mouse}'[enable mouse support]' + '(-n --noread)'{-n,--noread}'[only write to named files (do not read)]' + '(-o --operatingdir)'{-o+,--operatingdir=}'[specify operating directory]:operating directory:_directories' + '(-p --preserve -/ --modernbindings)'{-p,--preserve}'[preserve XON (^q) and XOFF (^s)]' + '(-q --indicator)'{-q,--indicator}'[show position indicator (scroll bar)]' + '(-r --fill)'{-r+,--fill=}'[specify width for hard-wrap and justify]: :_numbers -u columns -Nd-8 "wrap width"' + '(-s --speller)'{-s+,--speller=}'[specify spell-checking program]:spell-checking program/command:_cmdstring' + '(-t --saveonexit)'{-t,--saveonexit}'[save changes on exit without prompting]' + '(-N --noconvert -u --unix)'{-u,--unix}'[save files by default in Unix format]' + '(-v --view)'{-v,--view}'[disallow editing (read-only mode)]' + '(-b --breaklonglines -w --nowrap)'{-w,--nowrap}"[don't hard-wrap long lines]" + '(-x --nohelp)'{-x,--nohelp}"[don't show help lines at bottom]" + '(-y --afterends)'{-y,--afterends}'[make Ctrl+Right and Ctrl+Delete stop at word ends]' + '(- : *)'{-z,--listsyntaxes}'[list names of available syntax definitions]' + '(-! --magic)'{-!,--magic}'[use libmagic to determine syntax if necessary]' + '(-@ --colonparsing)'{-@,--colonparsing}'[accept filename:linenumber notation on command line]' + '(-% --stateflags)'{-%,--stateflags}'[show state flags in title bar]' + '(-_ --minibar)'{-_,--minibar}'[hide title bar and show mini bar at bottom]' + '(-0 --zero)'{-0,--zero}'[hide UI, use whole terminal]' + '(-/ --modernbindings)'{-/,--modernbindings}'[use better-known key bindings]' + '*: :->files' +) + +_arguments -s -S : $args && ret=0 + +case $state in + syntaxes) + local -a tmp + tmp=( ${(f)"$( _call_program syntaxes $words[1] --listsyntaxes )"} ) + tmp=( ${tmp:#(#i)*available syntax*} ) + tmp=( ${(@Z<n>)tmp} ) + _wanted volume-names expl 'syntax' compadd -a - tmp && ret=0 + ;; + + files) + _alternative \ + 'line-pattern: :_guard "(|+*)" "+line[,column] or +[crCR]{/|?}pattern"' \ + 'files: :_files' \ + && ret=0 + ;; +esac + +return ret diff --git a/Completion/Unix/Command/_pandoc b/Completion/Unix/Command/_pandoc index 797e73eaa..243b1ac8b 100644 --- a/Completion/Unix/Command/_pandoc +++ b/Completion/Unix/Command/_pandoc @@ -9,10 +9,10 @@ _pandoc_format() { local format=${PREFIX%%(+|-)*} if compset -P '*(+|-)'; then local pm=${IPREFIX[-1]} # '+' or '-' - local -a extensions=(${${$(pandoc --list-extensions=$format):#$pm*}#(+|-)}) + local -a extensions=( ${${$(_call_program extensions pandoc --list-extensions=$format):#$pm*}#(+|-)} ) _wanted extensions expl 'extension' compadd -S '+' -r '-+ ' -a extensions else - local -a formats=( $(pandoc --list-$inout[2]-formats) ) + local -a formats=( $(_call_program formats pandoc --list-$inout[2]-formats) ) _wanted formats expl 'format' compadd -S '+' -r '-+ ' -a formats fi } @@ -22,15 +22,19 @@ _pandoc_format() { _pandoc_all_formats(){ local -a expl local -aU formats - formats=( $(pandoc --list-input-formats) $(pandoc --list-output-formats) ) - _wanted formats expl 'format' compadd -a formats + formats=( + $(_call_program input-formats pandoc --list-input-formats) + $(_call_program output-formats pandoc --list-output-formats) + ) + _description formats expl 'format' + compadd "$expl[@]" "$@" -a formats } # pdf engine choice (( $+functions[_pandoc_pdf_engine] )) || _pandoc_pdf_engine(){ _alternative \ - 'engines:engine:(pdflatex lualatex xelatex latexmk tectonic wkhtmltopdf weasyprint prince context pdfroff)' \ + 'engines:engine:(pdflatex lualatex xelatex latexmk tectonic wkhtmltopdf weasyprint pagedjs-cli prince context groff pdfroff typst)' \ 'engine-executables:engine executable:_files -g "*(#q*)"' } @@ -43,7 +47,7 @@ _pandoc_pdf_engine_opts(){ _tex ;; *) - _message "Options for ${pdf_engine}" + _message "option for ${pdf_engine}" ;; esac } @@ -79,7 +83,7 @@ _pandoc_template(){ (( $+functions[_pandoc_highlight_style] )) || _pandoc_highlight_style(){ _alternative \ - 'styles:style:( $(pandoc --list-highlight-styles) )' \ + 'styles:style:( $(_call_program styles pandoc --list-highlight-styles) )' \ 'style-files:style file:_files -g "*.theme(-.)"' } @@ -195,7 +199,8 @@ _arguments -s \ '--abbreviations=[specify a custom abbreviations file]:file:_files ' \ {-s,--standalone}'[produce output with an appropriate header and footer]' \ '--template=[use specified file as a custom template for the generated document. Implies --standalone]: :_pandoc_template' \ - {\*-V+,\*--variable=}'[set the variable KEY to the value VALUE]:key\:value: ' \ + {\*-V+,\*--variable=}'[set a template variable]:key\:value' \ + \*--variable-json='[set a template variable to the value specified by a JSON string]:key\:json' \ '(- :)'{-D+,--print-default-template=}'[print the system default template for an output]:format:( $(pandoc --list-output-formats) )' \ '(- :)--print-default-data-file=[print a system default data file]:file: ' \ '--eol=[manually specify line endings (crlf|lf|native)]: :_pandoc_eol' \ @@ -217,6 +222,7 @@ _arguments -s \ '--no-check-certificate[disable the certificate verification]' \ '--self-contained[produce a standalone HTML file with no external dependencies, using data: URIs to incorporate the contents of linked scripts, stylesheets, images, and videos. Implies --standalone]' \ '--embed-resources=-[produce a standalone HTML document with no external dependencies]::enable:(true false)' \ + '--link-images=-[include links to images instead of embedding the images in ODT]::enable:(true false)' \ '--html-q-tags[use <q> tags for quotes in HTML]' \ '--ascii[use only ASCII characters in output, supported only for HTML and DocBook output]' \ '--reference-links[use reference-style links, rather than inline links]' \ @@ -224,7 +230,9 @@ _arguments -s \ '--markdown-headings[specify style for level1 and 2 headings in markdown output]:style [atx]:(setext atx)' \ '--list-tables=-[render tables as list tables in RST output]::enable(true false)' \ '--top-level-division=[treat top-level headers as given division type in LaTeX, ConTeXt, DocBook and TEI output]:top level division:(default section chapter part)' \ - {-N,--number-sections}'[number section headings in LaTeX, ConTeXt, HTML, or EPUB output]' \ + '(--lof --list-of-figures)'{--lof=-,--list-of-figures=-}'[include an automatically generated list of figures]::enable:(true false)' \ + '(--lot --list-of-tables)'{--lot=-,--list-of-tables=-}'[include an automatically generated list of tables]::enable:(true false)' \ + '(-N --number-sections)'{-N-,--number-sections=-}'[number section headings in LaTeX, ConTeXt, HTML, or EPUB output]::enable:(true false)' \ '--number-offset=[specify offset for section headings in HTML output (ignored in other output formats)]:number[number,...] [0]' \ '--listings[use the listings package for LaTeX code blocks]' \ {-i,--incremental}'[make list items in slide shows display incrementally (one by one)]' \ diff --git a/Completion/Unix/Command/_ps b/Completion/Unix/Command/_ps index 7d83f90ea..57fee983c 100644 --- a/Completion/Unix/Command/_ps +++ b/Completion/Unix/Command/_ps @@ -36,12 +36,8 @@ args=( '*-U+[select processes by real user]:user:_sequence -s , _users' '-o+[specify output format]:property:_sequence -s , _ps_props -' - '-c[show scheduler properties]' '-f[full listing]' - '-j[show session ID and process group ID]' '-l[long listing]' - '-L[show information about each light weight process]' - '-y[show RSS in place of ADDR (used with -l)]' ) bsd=( @@ -51,15 +47,10 @@ bsd=( 'x[include processes with no controlling terminal]' '(j l s u X)v[output in virtual memory format]' '*w[wide output]' - 'L[display all format specifiers]' - 'S[include child process data with the parent]' - 'T[select processes attached to current terminal]' ) bsdarg=( '*p[select processes by ID]' '*t[select processes by attached terminal]' - 'O[specify additional output fields]' - 'o[specify output format]' ) case $OSTYPE in @@ -76,11 +67,30 @@ case $OSTYPE in '-Z[show zone with which process is associated]' ) ;; - linux-gnu|dragonfly*|freebsd*|netbsd*|openbsd*) + ^aix*) + args+=( + '-L[show information about each light weight process]' + '-c[show scheduler properties]' + '-j[show session ID and process group ID]' + '-y[show RSS in place of ADDR (used with -l)]' + ) + bsd+=( + 'L[display all format specifiers]' + 'S[include child process data with the parent]' + 'T[select processes attached to current terminal]' + ) + bsdarg+=( + 'O[specify additional output fields]' + 'o[specify output format]' + ) + ;| + linux-gnu|aix*|dragonfly*|freebsd*|netbsd*|openbsd*) bsd+=( 'e[show environment after command]' '(j l s v X)u[output in resource usage format]' ) + ;| + linux-gnu|dragonfly*|freebsd*|netbsd*|openbsd*) bsdarg+=( 'N[set namelist file for WCHAN display]' '*U[select processes by effective user]' @@ -89,10 +99,14 @@ case $OSTYPE in linux-gnu|dragonfly*|freebsd*|openbsd*) bsd+=( 'H[show threads as if they were processes]' ) ;| + aix*|darwin*|dragonfly*|freebsd*|netbsd*|openbsd*) + bsd+=( + 'c[show just executable name for command]' + ) + ;| darwin*|dragonfly*|freebsd*|netbsd*|openbsd*) bsd+=( 'A[select every process]' - 'c[show just executable name for command]' 'h[repeat header lines, one per page of output]' '(r)m[sort by memory usage]' '(m)r[sort by CPU usage]' @@ -110,9 +124,6 @@ case $OSTYPE in darwin*|freebsd*) bsd+=( 'X[skip processes with no controlling terminal]' ) ;| - freebsd*|dragonfly*) - bsd+=( 'f[show command and environment for swapped out processes]' ) - ;| netbsd*|openbsd*) bsdarg+=( 'W[extract swap information from specified file]' ) ;| @@ -121,6 +132,26 @@ case $OSTYPE in 'd[show process hierarchy]' ) ;| + aix*) + args+=( + '-M[list 64 bit processes]' + "-N[don't gather thread statistics]" + '-L+[show process descendants]:pid list:_sequence _pids' + '-T+[show process tree rooted at given pid]:pid:_pids' + '-P[display project info]' + "-X[don't truncate user and group names]" + '-Z[display page size settings]' + '-k[list kernel processes]' + '-c+[filter by workload management class]:class list' + '-m[list kernel threads]' + ) + bsd+=( + 'g[display all processes]' + 'n[numerical output]' + 's[display kernel stack size of each process]' + "X[don't truncate user and group names]" + ) + ;| darwin*) bsd+=( 'd[select all processes except session leaders]' @@ -143,13 +174,19 @@ case $OSTYPE in fi ;; dragonfly*) - bsd+=( 'R[subsort by parent/child chain]' ) + bsd+=( + 'R[subsort by parent/child chain]' + 'f[show command and environment for swapped out processes]' + ) ;; freebsd*) bsd+=( - '*J[select processes by jail ID]' 'Z[show mac label]' ) + bsdarg+=( + 'D[expand list of selected processes based on process tree]' + '*J[select processes by jail ID]' + ) ;; netbsd*) bsd+=( '(j l u v)s[output in thread format]' ) ;; openbsd*) @@ -205,8 +242,9 @@ case $OSTYPE in ;; esac -if (( CURRENT > 1 )) && [[ $OSTYPE != (solaris*|linux-gnu) || - ( $OSTYPE = linux-gnu && $words[CURRENT-1] != -* ) ]]; then +if (( CURRENT > 1 )) && [[ $OSTYPE != (aix*|solaris*|linux-gnu) || + ( $OSTYPE = (aix*|linux-gnu) && $words[CURRENT-1] != -* ) ]] +then case $words[CURRENT-1] in *k) local sopt @@ -215,6 +253,7 @@ if (( CURRENT > 1 )) && [[ $OSTYPE != (solaris*|linux-gnu) || _sequence -s , _ps_props $sopt - && return ;; *g) [[ $OSTYPE = darwin* ]] && _wanted -C option-g-1 processes \ expl 'process ID' _sequence -s , _pids && return ;; + *D) _wanted directions expl direction compadd up down both && return ;; *G) _sequence -s , _groups && return ;; *J) _sequence _jails -0 && return ;; *[MNW]) _files && return ;; diff --git a/Completion/Unix/Command/_pv b/Completion/Unix/Command/_pv index 0e1f148d5..4bec330a6 100644 --- a/Completion/Unix/Command/_pv +++ b/Completion/Unix/Command/_pv @@ -17,7 +17,6 @@ _arguments -s -S $args \ '(-I --fineta -F --format)'{-I,--fineta}'[show absolute estimated time of arrival]' \ '(-r --rate -F --format)'{-r,--rate}'[show data transfer rate counter]' \ '(-a --average-rate -F --format)'{-a,--average-rate}'[show data transfer average rate counter]' \ - '(-m --average-rate-window)'{-m+,--average-rate-window=}'[compute average rate over period]:duration (seconds) [30]' \ '(-b --bytes -8 --bits -F --format)'{-b,--bytes}'[show number of bytes transferred]' \ '(-8 --bits -b --bytes -F --format)'{-8,--bits}'[show number of bits transferred]' \ '(-k --si)'{-k,--si}'[treat suffixes as multiples of 1000 rather than 1024]' \ @@ -33,10 +32,11 @@ _arguments -s -S $args \ '(-l --line-mode -R --remote)'{-l,--line-mode}'[count lines instead of bytes]' \ '(-0 --null -l --line-mode)'{-0,--null}'[lines are null-terminated]' \ '(-i --interval)'{-i+,--interval=}'[update every after specified interval]:interval (seconds) [1]' \ - '(-m --average-rate-window)'{-m,--average-rate-window}'[compute average rate over past period]:period (seconds) [30]' \ + '(-m --average-rate-window)'{-m,--average-rate-window}'[compute average rate over period]:period (seconds) [30]' \ '(-w --width)'{-w+,--width}'[assume terminal is specified characters wide]:width' \ '(-H --height)'{-H+,--height=}'[assume terminal is specified rows high]:height' \ '(-N --name)'{-N+,--name=}'[prefix visual information with given name]:name' \ + '(-u --bar-style)'{-u+,--bar-style=}'[set default bar style]:name [plain]:(plain block granular shaded)' \ '(-x --extra-display)'{-x+,--extra-display=}'[also send progress to destination]:destination:_sequence - compadd windowtitle processtitle' \ '(-v --stats)'{-v,--stats}'[output transfer statistics at the end]' \ '(-f --force -R --remote)'{-f,--force}'[output even if standard error is not a terminal]' \ @@ -70,6 +70,8 @@ case $state in 'a:average data transfer rate' 'b:bytes transferred so far' 'T:percentage of transfer buffer in use' + 'A:last written' + 'L:previous line' 'N:name prefix' '%:literal %' ) diff --git a/Completion/Unix/Command/_service b/Completion/Unix/Command/_service index 28563429b..5f9ca0d67 100644 --- a/Completion/Unix/Command/_service +++ b/Completion/Unix/Command/_service @@ -11,14 +11,18 @@ zstyle -T ":completion:${ctx}" tag-order && \ case $OSTYPE in freebsd<14->.*) - args=( '-E+[set environment variable before executing the rc.d script]:variable:_parameters -g "*export*~*readonly*" -S=' ) + args=( + '(-l -r)-d[enable debugging of rc.d scripts]' + '-E+[set environment variable before executing the rc.d script]:variable:_parameters -g "*export*~*readonly*" -S=' + '(-l -r)-q[quiet]' + ) ;& freebsd<11->.*) args+=( '-j+[perform actions in specified jail]:jail:_jails' ) ;& freebsd*|dragonfly*) actions=( - '(*)-r[show the results of boot time rcorder]' + '(* -q -d)-r[show the results of boot time rcorder]' '(*)-R[restart all enabled local services]' ) ;& @@ -28,7 +32,7 @@ case $OSTYPE in '*::service argument:_init_d' \ + '(actions)' $actions \ '(*)-e[show services that are enabled]' \ - '(*)-l[list all scripts in /etc/rc.d and the local startup directory]' \ + '(* -q -d)-l[list all scripts in /etc/rc.d and the local startup directory]' \ ':service name:_services' ;; *) diff --git a/Completion/Unix/Command/_sqlite b/Completion/Unix/Command/_sqlite index a83624083..218b92b4a 100644 --- a/Completion/Unix/Command/_sqlite +++ b/Completion/Unix/Command/_sqlite @@ -47,6 +47,7 @@ options+=( $^dashes'-bail[stop after hitting an error]' $^dashes'-cmd[run specified command before reading stdin]:sqlite meta-command' $^dashes'-deserialize[open the database using sqlite3_deserialize()]' + $^dashes'-escape[set rendering of control characters in output]:escape [ascii]:(symbol ascii off)' '(-*batch -*interactive)'$^dashes'-batch[force batch I/O]' '(-*batch -*interactive)'$^dashes'-interactive[force interactive I/O]' $^dashes'-lookaside[specify size and number of entries for lookaside memory]:size (bytes): :entries' diff --git a/Completion/Unix/Command/_timeout b/Completion/Unix/Command/_timeout index f1961012d..676f8e8cd 100644 --- a/Completion/Unix/Command/_timeout +++ b/Completion/Unix/Command/_timeout @@ -11,9 +11,9 @@ local args ) _arguments -S -A "-" $args \ - '--preserve-status[always exit with the same status as command even if it times out]' \ - "--foreground[don't propagate timeout to the command children]" \ + '(-p --preserve-status)'{-p,--preserve-status}'[always exit with the same status as command even if it times out]' \ + '(-f --foreground)'{-f,--foreground}"[don't propagate timeout to the command children]" \ '(-s --signal)'{-s,--signal}'[specify the signal to send on timeout]:signal:_signals' \ - '(-k --kill-after)'{-k,--kill-after}'[followup first signal with SIGKILL if command persists after specified time]:time' \ + '(-k --kill-after)'{-k+,--kill-after=}'[followup first signal with SIGKILL if command persists after specified time]: :_numbers -f -u seconds duration \:s\:seconds m\:minutes h\:hours d\:days' \ '1: :_numbers -f -u seconds duration :s:seconds m:minutes h:hours d:days' \ '*:::command: _normal -p $service' diff --git a/Completion/Unix/Command/_zdump b/Completion/Unix/Command/_zdump index f96bdd764..9e71a5f53 100644 --- a/Completion/Unix/Command/_zdump +++ b/Completion/Unix/Command/_zdump @@ -1,6 +1,26 @@ #compdef zdump -_arguments \ - '-v[lowest possible]' \ - '-c[cutoff]:cutoff year:' \ +local -a args + +case $OSTYPE in + aix*|(net|free)bsd*|linux*|solaris*) + args+=( '(-)--version[display version information]' ) + ;| + aix*|(net|free)bsd*|linux*) + args+=( '(-)--help[display usage information]' ) + ;| + (net|free)bsd*|linux*) + args+=( '-i[output a description of time intervals]' ) + ;| + aix*|(free|net|open)bsd*|linux*) + args+=( + '(-c)-t[cut off interval output at the given times]:cut off (seconds since epoch)' + '(-v)-V[like -v, but omit times relative to the extreme time values]' + ) + ;| +esac + +_arguments -S $args \ + '(-V)-v[print time at lowest possible time value]' \ + '(-t)-c[cut off interval output at the given years]:cutoff years [-500,2500]' \ '*:time zone:_time_zone' diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs index dd67ea767..3a884439b 100644 --- a/Completion/Unix/Command/_zfs +++ b/Completion/Unix/Command/_zfs @@ -69,6 +69,8 @@ rw_ds_props=( 'compression:value:($comp_algorithms)' 'copies:value:(1 2 3)' 'dedup:value:($dedup_algorithms)' + 'defaultuserquota:->quotas' + 'defaultgroupquota: :->quotas' 'devices:value:(on off)' 'encryption:value:(off on aes128-ccm aes-192-ccm aes-256-ccm aes-128-gcm aes-192-gcm aes-256-gcm)' 'exec:value:(on off)' @@ -79,7 +81,7 @@ rw_ds_props=( 'paths:mountpoint:_directories -W / -P /'" 'multilevel:value:(on off)' 'nbmand:value:(on off)' - {prefetch,primarycache}':value:(all none metadata)' + {prefetch,primarycache,secondarycache}':value:(all none metadata)' 'quota: :->quotas' 'readonly:value:(on off)' 'recordsize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M)' @@ -89,7 +91,6 @@ rw_ds_props=( 'properties:property:(auto none)'" 'reservation: :->quotas' 'rstchown:value:(on off)' - 'secondarycache:value:(all none metadata)' 'setuid:value:(on off)' 'shadow:value' # TODO: complete URI|none 'share:share properties' @@ -128,9 +129,11 @@ case $service:$implementation in 'bcloneused[amount of storage used by cloned blocks]' 'dedup_table_size[size of dedup table on-disk]' 'dedupcached[size of dedup table in arc]' + 'encryptionroot' 'expandsize[uninitialized space within the pool]' 'fragmentation[amount of fragmentation in the pool]' 'freeing[amount of space remaining to be reclaimed]' + 'last_scrubbed_txg[transaction group (TXG) up to which the most recent scrub operated]' 'load_guid[unique identifier generated when pool is loaded]' 'used[amount of storage space used within the pool]' ) @@ -150,8 +153,20 @@ case $service:$implementation in rw_ds_props+=( 'aclmode:value:(discard groupmask passthrough restricted)' 'acltype:value:(off noacl nfsv4 posix posixacl)' + 'defaultprojectquota:->quotas' + 'defaultprojectobjquota:->quotas' + 'defaultgroupobjquota:->quotas' + 'defaultuserobjquota:->quotas' + 'dnodesize:value:(legacy auto 1k 2k 4k 8k 16k)' + 'direct:value:(disabled standard always)' + 'groupobjquota@' 'mlslabel:value:(none)' # TODO: list sensitivity labels - 'redundant_metadata:value:(all most)' + 'overlay:value:(on off)' + 'projectquota@' 'projectobjquota@' + 'redundant_metadata:value:(all most some none)' + 'snapdev:value:(hidden visible)' + 'special_small_blocks:size [0]' + 'userobjquota@' 'vscan:value:(on off)' 'xattr:value:(on off dir sa)' "filesystem_limit: :{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ -prefix n ]]; then compadd none; else _message -e limits 'number or none'; fi}" @@ -166,8 +181,8 @@ case $service:$implementation in ) ro_ds_props+=( createtxg clones filesystem_count guid logicalreferenced logicalused - receive_resume_token refcompressratio snapshot_count snapshots_changed - volblocksize written + objsetid receive_resume_token redact_snaps refcompressratio + snapshot_count snapshots_changed volblocksize written ) delegatable_perms=( bookmark load-key change-key userobjquota userobjused groupobjquota @@ -240,8 +255,6 @@ case $service:$implementation in "defaultwritelimit: : _alternative \ 'sizes: :_guard \[0-9\]\#\(\|\[BKMGTPEZ\]\) size\ \(bytes\ per\ second\)' \ 'properties:property:(none)'" - 'defaultuserquota:->quotas' - 'defaultgroupquota: :->quotas' 'keysource:value:->keysources' ) ci_ds_props+=( @@ -256,13 +269,13 @@ case $service:$implementation in zfs:openzfs) subcmds+=( bookmark change-key load-key program project projectspace redact - unload-key wait + rewrite unload-key wait version ) ;| zpool:openzfs) subcmds+=( - checkpoint events labelclear initialize reopen resilver sync trim wait - version + checkpoint events labelclear initialize reopen resilver sync prefetch + trim wait version ) ;| zfs:solaris) @@ -282,8 +295,9 @@ case $service:$implementation in ;; zpool:*) subcmds+=( - add attach clear create destroy detach export get history import iostat - list offline online reguid remove replace scrub set split status upgrade + add attach clear create destroy ddtprune detach export get history + import iostat list offline online reguid remove replace scrub set + split status upgrade ) ;; zstream:*) @@ -292,15 +306,18 @@ case $service:$implementation in esac case $OSTYPE in - solaris*) + solaris*|linux-gnu) rw_ds_props+=( 'zoned:value:(on off)' ) - ;; + ;| freebsd*) [[ $OSTYPE = freebsd<-12>.* ]] && subcmds+=( remap ) rw_ds_props+=( 'jailed:value:(on off)' ) ;; linux-gnu) - rw_ds_props+=( 'relatime:value:(on off)' ) + rw_ds_props+=( + 'relatime:value:(on off)' + 'volthreading:value:(on off)' + ) ci_ds_props+=( {,fs,def,root}'context:SELinux context:_selinux_contexts -a file_type' ) @@ -508,7 +525,11 @@ case $service:$words[1] in if [[ $implementation = solaris ]]; then args=( '-I+[specify dataset states to display instead of normal datasets]:dataset state:_sequence compadd - receiving resumable hidden all' ) else - args=( '-p[use exact (parsable) numeric output]' ) + args=( + '(-j --json)'{-j,--json}'[output in JSON format]' + '--json-int[output numbers in integer format instead of strings]' + '-p[use exact (parsable) numeric output]' + ) fi _arguments -A "-*" -S $args \ '(-d)-r[recursively display children]' \ @@ -604,6 +625,17 @@ case $service:$words[1] in '*:file:_files' ;; + zfs:rewrite) + _arguments -A "-*" -S -s \ + '-P[rewrite physical blocks only so snapshots and incremental streams are unaffected]' \ + '-l+[specify maximum number of bytes to write]:maximum (bytes)' \ + '-o+[specify starting offset]:offset (bytes)' \ + '-r[recurse into directories]' \ + '-v[print names of all successfully rewritten files]' \ + "-x[don't cross file system boundaries]" \ + '*:file or directory:_files' + ;; + zfs:mount) [[ $OSTYPE != freebsd* ]] && args=( '-O[overlay mount]' ) [[ $implementation = openzfs ]] && args+=( @@ -611,6 +643,7 @@ case $service:$words[1] in '(-a)-R[mount filesystems along with all their children]' ) _arguments -A "-*" -S $args \ + '(- :)'{-j,--json}'[show all mounted file systems in JSON format]' \ '-o+[specify temporary file system options]: :_values -s , "option" {,no}{atime,dev,exec,relatime,suid,xattr} ro rw' \ '-v[report mount progress]' \ '-f[force mount]' \ @@ -898,6 +931,11 @@ case $service:$words[1] in ':property:($delegatable_perms $ro_ds_props ${rw_ds_props%%:*})' ;; + (zfs|zpool):version) + _arguments -A "-*" -S \ + '-j[output in JSON format]' + ;; + zpool:(clear|online)) [[ $OSTYPE = linux* ]] && args=( "--power[power on the device's slot in the storage enclosure]" @@ -991,6 +1029,13 @@ case $service:$words[1] in '*: :->virtual-devices' ;; + zpool:ddtprune) + _arguments -A "-*" -S \ + '(-p)-d[prune entries based on age]:age (days)' \ + '(-d)-p[prune to target percentage of unique entries]:target (percentage)' \ + ':pool:_zfs_pool' + ;; + zpool:destroy) _arguments -A "-*" -S \ '-f[force active datasets to be unmounted]' \ @@ -1020,9 +1065,17 @@ case $service:$words[1] in ;; zpool:get) - [[ $implementation = solaris ]] && args=( - '-s+[specify sources to display]: :_values -s , "source" local default none' - ) + if [[ $implementation = openzfs ]]; then + args=( + '(-j --json)'{-j,--json}'[output in JSON format]' + '--json-int[output numbers in integer format instead of strings]' + --json-pool-key-guid + ) + else + args=( + '-s+[specify sources to display]: :_values -s , "source" local default none' + ) + fi _arguments -A "-*" -S $args \ '-H[suppress headers and tab-delimit fields]' \ '-p[display numbers in parseable (exact) values]' \ @@ -1076,6 +1129,7 @@ case $service:$words[1] in zpool:initialize) _arguments -A "-*" -S \ + '(-a --all : *)'{-a,--all}'[begin, cancel, suspend initializing on all pools]' \ '(-s --suspend -c --cancel)'{-c,--cancel}'[cancel initializing on specified devices]' \ '(-s --suspend -c --cancel)'{-s,--suspend}'[suspend initializing on specified devices]' \ '(-u --uninit)'{-u,--uninit}'[clear initialization state on specified devices]' \ @@ -1130,6 +1184,9 @@ case $service:$words[1] in zpool:list) [[ $implementation = openzfs ]] && args=( '-g[display vdev GUIDs instead of normal device names]' + '(-j --json)'{-j,--json}'[output in JSON format]' + '--json-int[output numbers in integer format instead of strings]' + --json-pool-key-guid '-L[display real paths for vdevs resolving all symbolic links]' '-p[display numbers in parsable (exact) values]' '-P[display full paths for vdevs instead of only the last component of the path]' @@ -1167,12 +1224,21 @@ case $service:$words[1] in ;; zpool:online) - _arguments -C -A "-*" -S $args \ + _arguments -C -A "-*" -S \ '-e[expand device to use all available space]' \ ':pool:_zfs_pool' \ '*:virtual device:->pool-devices' ;; + zpool:prefetch) + _arguments -A "-*" -S \ + '-t+[metadata type]:metadata type:(( + brt\:block\ reference\ table + ddt\:deduplication\ table + ))' \ + ':pool:_zfs_pool' + ;; + zpool:reopen) _arguments -A "-*" -S \ "-n[don't restart an in-progress scrub operation]" \ @@ -1180,7 +1246,9 @@ case $service:$words[1] in ;; zpool:reguid) - _zfs_pool + _arguments -A "-*" -S \ + '-g+[set pool guid]:guid (64-bit decimal)' \ + ':pool:_zfs_pool' ;; zpool:remove) @@ -1215,6 +1283,10 @@ case $service:$words[1] in zpool:scrub) [[ $implementation = openzfs ]] && args=( + '(-a --all *)'{-a,--all}'[begin, pause, stop scrub on all pools]' + '-C[continue scrub from last saved txg]' + '-S+[specify start date for transactions]:date (YYYY-MM-DD HH\:MM):_dates' + '-E+[specify end date for transactions]:date (YYYY-MM-DD HH\:MM):_dates' '(-s)-p[pause scrubbing]' '-w[wait until scrub has completed before returning]' '-e[only scrub files with known data errors]' @@ -1259,6 +1331,9 @@ case $service:$words[1] in '-c+[run scripts on each vdev]:script:_sequence _files -W "($ZPOOL_SCRIPTS_PATH /etc/zfs/zpool.d ~/.zpool.d)"' '-e[only show unhealthy vdevs]' '-i[display vdev initialization status]' + '(-j --json)'{-j,--json}'[output in JSON format]' + '--json-int[output numbers in integer format instead of strings]' + --json-flat-vdevs --json-pool-key-guid '-g[display vdev GUIDs instead of the normal device names]' '-L[display real paths for vdevs resolving all symbolic links]' '-p[display numbers in parsable (exact) values and times in nanoseconds]' @@ -1280,6 +1355,7 @@ case $service:$words[1] in zpool:trim) _arguments -C -A "-*" -S \ + '(-a --all 1 *)'{-a,--all}'[perform TRIM on all pools]' \ '(-d --secure)'{-d,--secure}'[initiate a secure TRIM]' \ '(-r --rate)'{-r,--rate}'[set rate at which the TRIM operation progresses]:rate (bytes per second)' \ '(-c --cancel)'{-c,--cancel}'[cancel trimming]' \ diff --git a/Completion/Unix/Type/_date_formats b/Completion/Unix/Type/_date_formats index 55af7c591..0527d706c 100644 --- a/Completion/Unix/Type/_date_formats +++ b/Completion/Unix/Type/_date_formats @@ -59,7 +59,7 @@ specs=( ) case $OSTYPE in - linux-gnu) + freebsd*|linux-gnu) [[ $1 == zsh ]] || # %N is handled below in this case specs+=( 'N:fractional part of seconds since epoch, in nanoseconds' ) ;| diff --git a/Completion/Unix/Type/_terminals b/Completion/Unix/Type/_terminals index 04ece1167..156ba7e96 100644 --- a/Completion/Unix/Type/_terminals +++ b/Completion/Unix/Type/_terminals @@ -1,8 +1,37 @@ #compdef infocmp -value-,TERM,-default- -local desc expl +local entry +local -aU desc +local -a terms names -desc=( $TERMINFO ~/.terminfo $TERMINFO_DIRS /usr/{,share/}{,lib/}terminfo /{etc,lib}/terminfo ) +desc=( + $TERMINFO ~/.terminfo $TERMINFO_DIRS /usr/{,share/}{,lib/}terminfo + /{etc,lib}/terminfo +) +desc=( $desc(N:P) ) # may have symlinks to the same path +terms=( $desc/*/^*+?*(N:t) ) # entries named with a + are common includes -_wanted terminals expl 'terminal name' \ - compadd "$@" - $desc/*/*(N:t) +if [[ $OSTYPE = (freebsd|dragonfly)* ]]; then + while read entry; do + [[ "$entry" != [^[:blank:]\#\*_]*:* ]] && continue + + names=( ${${(s:|:)entry%%:*}##[[:blank:]]#} ) + if [[ $#names -gt 1 && $names[-1] = *\ * ]]; then + terms+=( ${^names[1,-2]:#*[ +]?*}:${names[-1]} ) + else + terms+=( ${names:#*\ *} ) + fi + done < /etc/termcap + +elif [[ $OSTYPE = netbsd* ]]; then + grep $'^[^#\t]*,$' /usr/share/misc/terminfo | while read entry; do + names=( ${(s:|:)entry%,} ) + if [[ $#names -gt 1 && $names[-1] = *\ * ]]; then + terms+=( ${^names[1,-2]:#*[ +]?*}:${names[-1]} ) + else + terms+=( ${names:#*\ *} ) + fi + done +fi + +_describe -t terminals 'terminal name' terms "$@" |
