about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Martin <phy1729@gmail.com>2018-04-13 22:37:51 -0500
committerOliver Kiddle <okiddle@yahoo.co.uk>2018-04-16 16:51:16 +0200
commit2cf01b9da8d0192ae1ce1d8ae9bf667da0fddeec (patch)
tree8c52b2c6957ce0ecc04c6f5d042965a70914d1f6
parent637f9809a772150e83091180676fd5371bd8e1fe (diff)
downloadzsh-2cf01b9da8d0192ae1ce1d8ae9bf667da0fddeec.tar.gz
zsh-2cf01b9da8d0192ae1ce1d8ae9bf667da0fddeec.tar.xz
zsh-2cf01b9da8d0192ae1ce1d8ae9bf667da0fddeec.zip
42643, 42644: new cksum completion
-rw-r--r--ChangeLog9
-rw-r--r--Completion/BSD/Command/_cksum67
2 files changed, 76 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index a8e2f10a5..361a60830 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-04-16  Oliver Kiddle  <okiddle@yahoo.co.uk>
+
+	* Matthew Martin: 42643, 42644: Completion/BSD/Command/_cksum:
+	new cksum completion
+
+	* Matthew Martin: 42642 (tweaked for Solaris):
+	Completion/Unix/Command/_chown:
+	OpenBSD chown does not support -f and dragonfly has -x
+
 2018-04-15  Barton E. Schaefer  <schaefer@zsh.org>
 
 	* 42650: Src/utils.c: fix 42156 for zero-sized terminals
diff --git a/Completion/BSD/Command/_cksum b/Completion/BSD/Command/_cksum
new file mode 100644
index 000000000..4f5b68d8a
--- /dev/null
+++ b/Completion/BSD/Command/_cksum
@@ -0,0 +1,67 @@
+#compdef cksum sum=cksum md2 md4 md5 rmd160 sha1 sha256 sha384 sha512 sha512t256
+
+if [[ $OSTYPE == (dragonfly|freebsd)* && service == cksum ]]; then
+  _arguments -s -S -A '-*' \
+    '-o[use specified historic algorithm]:historic algorithm:(1 2 3)' \
+    '*:_files'
+
+else
+  local -a args
+
+  case $OSTYPE in
+    dragonfly*|freebsd*|netbsd*)
+      args+=(
+        '-t[run built-in time trial]'
+      )
+      ;|
+    dragonfly*|freebsd*|openbsd*)
+      args+=(
+        '-r[reverse the output format]'
+      )
+      ;|
+    dragonfly*)
+      args+=(
+        '-b+[begin at specified offset]:begin offset: '
+        '-e+[end at specified offset]:end offset: '
+      )
+      ;;
+    freebsd*)
+      args+=(
+        '-c+[compare digest against specified string]:digest string: '
+      )
+      ;;
+    netbsd*)
+      args+=(
+        '(*)-c+[compare checksums against specifed sumfile]:sumfile:_files'
+        '-n[reverse the output format]'
+        '-w[warn on malformed checksum files]'
+      )
+      if [[ $service == cksum ]]; then
+        args=(
+          '(-o)-a+[use the specfied algorithm(s)]:algorithm:(crc md2 md4 md5 old1 old2 rmd160 sha1 sha256 sha384 sha512)'
+          '(-a)-o+[use the specfied historic algorithm]:historic algorithm:(1 2)'
+        )
+      fi
+      ;;
+    openbsd*)
+      args+=(
+        '-b[output in base 64]'
+        '-C+[compare checksums against specifed checklist]:checklist:_files'
+        '-c[file arguments are checklists]'
+        '-h+[output to specified hashfile]:hashfile:_files'
+        '*-t[run built-in time trial]'
+      )
+      if [[ $service == cksum ]]; then
+        args+=('*-a+[use the specfied algorithm(s)]:algorithm:_values -s , algotithm cksum md5 rmd160 sha1 sha224 sha256 sha384 sha512/256 sha512')
+      fi
+      ;;
+  esac
+
+  _arguments -s -S -A '-*' \
+    $args \
+    '-p[echo stdin to stdout]' \
+    '-q[quiet mode]' \
+    '-s+[checksum specified string]:string: ' \
+    '-x[run built-in test]' \
+    '*:_files'
+fi