summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command')
-rw-r--r--Completion/Unix/Command/_dd112
1 files changed, 97 insertions, 15 deletions
diff --git a/Completion/Unix/Command/_dd b/Completion/Unix/Command/_dd
index e51337f21..e5c5e63ce 100644
--- a/Completion/Unix/Command/_dd
+++ b/Completion/Unix/Command/_dd
@@ -1,17 +1,99 @@
#compdef dd gdd
-_values -w 'option' \
- 'if[specify input file]:input file:_tilde_files' \
- 'of[specify output file]:output file:_tilde_files' \
- '(bs)ibs[input block size]:block size (bytes)' \
- '(bs)obs[output block size]:block size (bytes)' \
- '(ibs obs)bs[block size]:block size (bytes)' \
- 'cbs[conversion buffer size]:buffer size (bytes)' \
- 'skip[input blocks initially skipped]:blocks' \
- 'seek[output blocks initially skipped]:blocks' \
- 'files[specify number of input files to copy and concatenate]:number of files' \
- 'count[number of input blocks to copy]:blocks' \
- 'conv[specify conversions to apply]:conversion:_values -s , conversion
- "(ebcdic ibm)ascii" "(ascii ibm)ebcdic" "(ascii ebcdic)ibm"
- "(unblock)block" "(block)unblock"
- "(ucase)lcase" "(lcase)ucase" swab noerror sync'
+local -a vals conv flags
+local variant
+
+_pick_variant -r variant gnu=GNU $OSTYPE --version
+
+vals=(
+ '(ibs obs)bs[block size]:block size (bytes)'
+ 'cbs[conversion buffer size]:buffer size (bytes)'
+ 'conv[specify conversions to apply]: :_values -s , conversion $conv'
+ 'count[number of input blocks to copy]:blocks'
+ '(bs)ibs[input block size]:block size (bytes)'
+ 'if[specify input file]:input file:_tilde_files'
+ '(bs)obs[output block size]:block size (bytes)'
+ 'of[specify output file]:output file:_tilde_files'
+ 'seek[output blocks initially skipped]:blocks'
+ 'skip[input blocks initially skipped]:blocks'
+)
+conv=(
+ '(ascii asciib oldascii ebcdic ebcdicb oldebcdic ibm ibmb oldibm)'{ascii,ebcdic,ibm}
+ '(unblock)block' '(block)unblock'
+ '(ucase)lcase' '(lcase)ucase'
+ swab sync noerror notrunc
+)
+
+case $variant in
+ ^gnu)
+ vals+=(
+ 'files[specify number of input files to copy and concatenate]:number of files'
+ )
+ ;|
+ (gnu|darwin|dragonfly|(free|net)bsd*)
+ conv+=( sparse )
+ ;|
+ gnu|netbsd*)
+ vals+=(
+ '*iflag[specify read flags]:flag:_sequence compadd - $flags'
+ '*oflag[specify write flags]:flag:_sequence compadd - $flags'
+ )
+ flags=( append direct directory dsync sync nonblock noctty nofollow )
+ ;|
+ darwin*|dragonfly*|(free|net)bsd*)
+ vals+=(
+ 'oseek[output blocks initially skipped]:blocks'
+ )
+ conv+=(
+ '(ascii oldascii ebcdic oldebcdic oldibm)'old{ascii,ebcdic,ibm}
+ )
+ ;|
+ (darwin|dragonfly|freebsd|netbsd|solaris)*)
+ vals+=(
+ 'iseek[input blocks initially skipped]:blocks'
+ )
+ ;|
+ (open|free)bsd*)
+ vals+=(
+ 'status[specify level of information to print to stderr]:level:(none noxfer)'
+ )
+ conv+=( osync )
+ ;|
+
+ freebsd*)
+ vals+=(
+ 'fillchar[specify padding character]:character'
+ 'speed[limit copying speed]:speed (bytes/second)'
+ )
+ conv+=(
+ '(pareven parnone parodd parset)'{pareven,parnone,parodd,parset}
+ )
+ ;;
+ gnu)
+ vals+=(
+ 'status[specify level of information to print to stderr]:level:(none noxfer progress)'
+ )
+ flags+=( fullblock noatime nocache count_bytes skip_bytes seek_bytes )
+ conv+=( excl nocreat fdatasync fsync )
+ ;;
+ netbsd*)
+ vals+=(
+ 'msgfmt[specify format for information summary]:format:(quiet posix human)'
+ 'progress[enable progress display]:enable:(1)'
+ )
+ flags+=(
+ wronly rdwr creat trunc excl shlock exlock cloexec nosigpipe rsync alt_io async
+ )
+ ;;
+ solaris*)
+ vals+=(
+ 'files[specify number of input files to copy and concatenate]:number of files'
+ 'oseek[output blocks initially skipped (via seek, not NUL-padding)]:blocks'
+ )
+ conv+=(
+ '(ascii asciib ebcdic ebcdicb ibmb)'{ascii,ebcdic,ibm}b
+ )
+ ;;
+esac
+
+_values -w 'option' $vals