Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: cover newer BSD releases in completon



This patch handles changes in FreeBSD up to 14.2, NetBSD 10.1, OpenBSD
7.6 and to a limited extent (I lack hardware to test) Darwin 15.

It includes a new completion for FreeBSD's acpiconf.

NetBSD seems to have seen the most changes reflected here, though I had
skipped 10.

In effect, this also includes OpenZFS 2.2 changes.

Oliver

diff --git a/Completion/BSD/Command/_acpiconf b/Completion/BSD/Command/_acpiconf
new file mode 100644
index 000000000..817a2f1ad
--- /dev/null
+++ b/Completion/BSD/Command/_acpiconf
@@ -0,0 +1,28 @@
+#compdef acpiconf
+
+local curcontext="$curcontext" sep ret=1
+local -a state line modes desc
+local -A opt_args
+
+_arguments -s \
+  '(-)-h[display usage information]' \
+  '(-)-i[get battery information]:battery' \
+  '(-)-k[ack or abort a pending suspend]:ack' \
+  '(-)-s[enter specified sleep mode]: :->modes' && ret=0
+
+if [[ -n $state ]]; then
+  modes=( $(_call_program modes sysctl -n hw.acpi.supported_sleep_state) )
+  zstyle -s ":completion:${curcontext}:modes" list-separator sep || sep=--
+  (( $#modes )) || modes=( S3 S4 )
+  desc=(
+    "S1 $sep stop the processor clock"
+    "S2 $sep low wake latency sleep state"
+    "S3 $sep suspend to RAM"
+    "S4 $sep suspend to disk"
+    "S5 $sep soft off state"
+  )
+  desc=( ${(M)desc:#(${(~j.|.)modes}) *} )
+  _wanted modes expl 'mode' compadd -M 'B:S=' -ld desc - ${modes#S} && ret=0
+fi
+
+return ret
diff --git a/Completion/BSD/Command/_bsdconfig b/Completion/BSD/Command/_bsdconfig
index f88255575..5de8f777d 100644
--- a/Completion/BSD/Command/_bsdconfig
+++ b/Completion/BSD/Command/_bsdconfig
@@ -51,6 +51,7 @@ shortcuts=(
   vt_saver
   vt_screenmap
   vt_ttys
+  wifi wireless wlan
 )
 
 _arguments -s -w -A '-*' : \
diff --git a/Completion/BSD/Command/_pkgin b/Completion/BSD/Command/_pkgin
index 662bed181..c4ed3aa14 100644
--- a/Completion/BSD/Command/_pkgin
+++ b/Completion/BSD/Command/_pkgin
@@ -5,6 +5,8 @@ local -a state state_descr line expl cmds short pkgs
 local -A opt_args
 
 _arguments -s -S -C \
+  '(-6)-4[only use IPv4 addresses]' \
+  '(-4)-6[only use IPv6 addresses]' \
   '-c+[enable chrooting pkgin in the given repository]:chroot path:_directories' \
   '-d[download only]' \
   '-f[force database update]' \
diff --git a/Completion/BSD/Command/_procstat b/Completion/BSD/Command/_procstat
index a1708f6ac..867ddc501 100644
--- a/Completion/BSD/Command/_procstat
+++ b/Completion/BSD/Command/_procstat
@@ -1,26 +1,27 @@
 #compdef procstat
 
 _arguments -s -A "-*" -S \
-  '-b[show binary information]' \
-  '-c[show command line arguments]' \
-  '-e[show environment variables]' \
-  '-f[show file descriptor information]' \
-  '-i[show signal pending and disposition]' \
-  '-j[show signal pending and blocked information for process threads]' \
-  '-k[show stacks of kernel threads]' \
-  '-l[show resource limits]' \
-  "-L[show LWP info for the process pertaining to it's signal driven exit]" \
-  '-r[show resource usage]' \
-  '-s[show security credential information]' \
-  '-S[show cpuset information]' \
-  '-t[show thread information]' \
-  '-v[show virtual memory mappings]' \
-  '-x[show ELF auxiliary vector]' \
+  '(1)-b[show binary information]' \
+  '(1)-c[show command line arguments]' \
+  '(1)-e[show environment variables]' \
+  '(1)-f[show file descriptor information]' \
+  '(1)-i[show signal pending and disposition]' \
+  '(1)-j[show signal pending and blocked information for process threads]' \
+  '(1)-k[show stacks of kernel threads]' \
+  '(1)-l[show resource limits]' \
+  "(1)-L[show LWP info for the process pertaining to it's signal driven exit]" \
+  '(1)-r[show resource usage]' \
+  '(1)-s[show security credential information]' \
+  '(1)-S[show cpuset information]' \
+  '(1)-t[show thread information]' \
+  '(1)-v[show virtual memory mappings]' \
+  '(1)-x[show ELF auxiliary vector]' \
   '-h[suppress table headers]' \
-  '(1)-a[all processes]' \
+  '(2 *)-a[all processes]' \
   '-w+[repeat information after specified interval]:delay (seconds)' \
   '-C[print additional capability information for file descriptors]' \
   '-H[statistics per-thread rather than per-process]' \
   '-n[numeric form for signals]' \
-  '1::core file:_path_files -g "*core*(-.)"' \
+  '1::command:(advlock argument auxv basic binary cpuset credential environment fd file kstack pargs ptlwpinfo pwdx rlimit rlimitusage rusage sigfastblock signal thread tsignal vm)' \
+  '2::core file:_path_files -g "*core*(-.)"' \
   '*:process id:_pids'
diff --git a/Completion/BSD/Command/_sockstat b/Completion/BSD/Command/_sockstat
index f372fe1b3..b99d3681a 100644
--- a/Completion/BSD/Command/_sockstat
+++ b/Completion/BSD/Command/_sockstat
@@ -29,6 +29,11 @@ case $OSTYPE in
       '-q[quiet mode, do not print the header line]'
     )
   ;|
+  freebsd<14->.*)
+    args+=(
+      '-I[show local address of socket to which the current socket is spliced]'
+    )
+  ;|
   freebsd*)
     for proto in ${${(M)${(f)"$(</etc/protocols)"}##[a-z0-9]*}}; do
       case $proto in
diff --git a/Completion/BSD/Command/_systat b/Completion/BSD/Command/_systat
index 03df07631..fcb5565d7 100644
--- a/Completion/BSD/Command/_systat
+++ b/Completion/BSD/Command/_systat
@@ -79,6 +79,7 @@ case $OSTYPE in
       "-n[don't resolve IP addresses]"
       '(-b)-w[refresh interval]:refresh interval'
       "(-b)-t[specify amount of refreshes for each screen in 'all' display mode]:turns"
+      '-z[display 0 instead of space when there is no data]'
     )
 esac
 
diff --git a/Completion/Unix/Command/_date b/Completion/Unix/Command/_date
index f0053ec02..f70fc3722 100644
--- a/Completion/Unix/Command/_date
+++ b/Completion/Unix/Command/_date
@@ -37,7 +37,10 @@ else
       )
     ;|
     freebsd*|dragonfly*|darwin*|netbsd*)
-      args+=( '-n[only set time on current machine]' )
+      args+=(
+        '-n[only set time on current machine]'
+        '-R[display in RFC2822 format]'
+      )
     ;|
     freebsd*|dragonfly*|darwin*|openbsd*)
       args+=(
@@ -61,11 +64,14 @@ else
     ;|
     freebsd*|dragonfly*|darwin*)
       args+=(
-        '-R[display in RFC2822 format]'
-	'(-R)-I-[display in ISO 8601 format]::precision [date]:(date hours minutes seconds)'
 	"*-v+[adjust and print (but don't set) date]:[+-]value[ymwdHMS]"
       )
     ;|
+    dragonfly*|darwin*)
+      args+=(
+	'(-R)-I-[display in ISO 8601 format]::precision [date]:(date hours minutes seconds)'
+      )
+    ;|
     freebsd<-12>.*)
       args+=(
 	'-d+:daylight saving time value'
@@ -77,6 +83,11 @@ else
     freebsd<14->.*|openbsd*)
       args+=( '-z+[specify timezone for output]:time zone:_time_zone')
     ;|
+    freebsd*)
+      args+=(
+	'(-R)-I-[display in ISO 8601 format]::precision [date]:(date hours minutes seconds ns)'
+      )
+    ;|
     netbsd*)
       args+=( '-d[output date specified by string]:time string:' )
     ;;
diff --git a/Completion/Unix/Command/_df b/Completion/Unix/Command/_df
index 21abff105..315758488 100644
--- a/Completion/Unix/Command/_df
+++ b/Completion/Unix/Command/_df
@@ -45,21 +45,25 @@ elif [[ "$OSTYPE" == (darwin|dragonfly|freebsd|netbsd*|openbsd)* ]]; then
         '-a[show all mount points]'
         '(-b -g -H -h -k -m --si)-g[use 1024^3-byte blocks]'
         '(-b -g -H -h -k -m --si)-m[use 1024*1024-byte blocks]'
-      )
-      ;|
-    (darwin*|dragonfly*|freebsd*)
-      args+=(
         '(-b -g -H -h -k -m --si)-b[use 512-byte blocks (default)]'
         '(-b -g -H -h -k -m --si)-H[human-readable output (base 10)]'
       )
       ;|
-    (darwin*|freebsd*)
+    (darwin*|freebsd*|netbsd*)
       args+=(
         '-c[display a grand total]'
       )
+    ;|
+    (darwin*|freebsd*)
+      args+=(
+        '--libxo[generate output via libxo]'
+        '-,[separate thousands]'
+      )
       ;|
     (darwin*)
       args+=(
+        '-I[suppress inode counts]'
+        '-Y[include file system type]'
         "-T+$spec"
         "!-t+$spec" # obsolete
       )
@@ -76,14 +80,15 @@ elif [[ "$OSTYPE" == (darwin|dragonfly|freebsd|netbsd*|openbsd)* ]]; then
       ;|
     (freebsd*)
       args+=(
-        '--libxo[generate output via libxo]'
         '(-b -g -H -h -k -m --si)--si[human-readable output (base 10)]'
-        '-,[separate thousands]'
       )
       ;;
     (netbsd*)
       args+=(
+        '(-P -G -N)-f[display only the available free]'
         '(-G -i -P)-G[display all fields in statvfs]'
+        '(-G -P)-N[suppress the header line normally output]'
+        '-W[print widge name instead of the device]'
       )
       ;;
   esac
diff --git a/Completion/Unix/Command/_dhclient b/Completion/Unix/Command/_dhclient
index e22586b04..f38e9a9e5 100644
--- a/Completion/Unix/Command/_dhclient
+++ b/Completion/Unix/Command/_dhclient
@@ -12,6 +12,7 @@ case $OSTYPE in
     args+=(
       '(-d)-b[immediately move to the background]'
       '-l+[specify leases file]:file:_files'
+      "-n[don't wait for ARP resolution]"
       '-p+[specify PID file]:file:_files'
       '-u[reject leases with unknown options]'
       '-q[quiet]'
diff --git a/Completion/Unix/Command/_dmidecode b/Completion/Unix/Command/_dmidecode
index e2c511313..62a950a7a 100644
--- a/Completion/Unix/Command/_dmidecode
+++ b/Completion/Unix/Command/_dmidecode
@@ -5,8 +5,10 @@ _arguments -s \
   '(-)'{-h,--help}'[display usage information]' \
   '(-q --quiet -u --dump)'{-q,--quiet}'[be less verbose]' \
   '--no-quirks[decode everything without quirks]' \
-  '(-t --type -H --handle -u --dump --dump-bin -s --string)'{-s+,--string=}'[only display value of specified DMI string]:DMI string:(bios-vendor bios-version bios-release-date system-manufacturer system-product-name system-version system-serial-number system-uuid baseboard-manufacturer baseboard-product-name baseboard-version baseboard-serial-number baseboard-asset-tag chassis-manufacturer chassis-type chassis-version chassis-serial-number chassis-asset-tag processor-family processor-manufacturer processor-version processor-frequency)' \
-  '(-s --string -H --handle --dump-bin)*'{-t+,--type=}'[only display entries of specified type]:entry type:(bios system baseboard chassis processor memory cache connector slot)' \
+  '(-t --type -H --handle -u --dump --dump-bin -s --string)'{-s+,--string=}'[only display value of specified DMI string]:DMI string:compadd -M "r\:|-=* r\:|=*" - $(_call_program strings dmidecode --list-strings)' \
+  '--list-strings[list available string keywords]' \
+  '(-s --string -H --handle --dump-bin)*'{-t+,--type=}'[only display entries of specified type]:entry type:compadd - $(_call_program types dmidecode --list-types)' \
+  '--list-types[list available type keywords]' \
   '(-s --string -t --type -H --handle --dump-bin)'{-H,--handle=}'[only display the entry of specified handle]:handle' \
   '(-q --quiet -u --dump -s --string)'{-u,--dump}"[don't decode entries]" \
   '(-s --string -t --type -H --handle)--dump-bin=[dump DMI data to a binary file]:file:_files' \
diff --git a/Completion/Unix/Command/_env b/Completion/Unix/Command/_env
index 8cf0ad467..89a45e4a4 100644
--- a/Completion/Unix/Command/_env
+++ b/Completion/Unix/Command/_env
@@ -8,6 +8,7 @@ case $variant in
   gnu)
     (( $#words > 2 )) && ign='!'
     args=(
+      '(-a --argv0)'{-a+,--argv0=}'[pass argument as the zeroth argument of command]:argument'
       '(-)'{-i,--ignore-environment}'[start with empty environment]'
       '(* -0 --null)'{-0,--null}'[end each output line with NUL, not newline]'
       '(--ignore-environment -i --help --version)*'{-u+,--unset=}'[remove variable from the environment]:env var to remove:_parameters -g "*export*"'
@@ -28,12 +29,19 @@ case $variant in
       '-U[add variables from user and system login.conf(5)]: :->user-class'
     )
   ;|
-  freebsd*|darwin*)
-    args=( '-0[use NUL, not newline after each variable in output]' )
+  freebsd*|netbsd*)
+    args+=( '-C+[change working directory]:directory:_directories' )
+  ;|
+  freebsd*|darwin*|netbsd*)
+    args+=( '-0[use NUL, not newline after each variable in output]' )
+  ;|
+  freebsd*|darwin*|dragonfly*|netbsd*|openbsd*)
+    args+=(
+      '(-i)*-u+[remove variable from the environment]:env var to remove:_parameters -g "*export*"'
+    )
   ;|
   freebsd*|darwin*|dragonfly*)
     args+=(
-      '(-i)*-u+[remove variable from the environment]:env var to remove:_parameters -g "*export*"'
       '-P+[specify alternate executable search PATH]:path:_dir_list'
       '-S+[perform word splitting]:string to split'
       '*-v[verbose output]'
diff --git a/Completion/Unix/Command/_iostat b/Completion/Unix/Command/_iostat
index d3943fcb4..36a3b7904 100644
--- a/Completion/Unix/Command/_iostat
+++ b/Completion/Unix/Command/_iostat
@@ -50,6 +50,9 @@ case $OSTYPE:l in
     args+=(
       '-x[show extended disk statistics]'
       '-y[report data on waiting and active requests]'
+      '-z[replace drive and CPU statistics that are zero with spaces]'
+      "-H+[set page height explicitly]:height [$LINES]"
+      "-W+[set page width explicitly]:width [$COLUMNS]"
     )
     ;;
   aix*)
diff --git a/Completion/Unix/Command/_last b/Completion/Unix/Command/_last
index 2013cc1c2..d76260c36 100644
--- a/Completion/Unix/Command/_last
+++ b/Completion/Unix/Command/_last
@@ -8,17 +8,16 @@ ttys=( ${ttys#/dev/} )
 for pattern arg in \
   '(solaris*|linux-gnu)' '(--hostlast)-a[display hostname in last column]' \
   '((free|net|open)bsd*|darwin*|dragonfly*)' '-h+[limit sessions by hostname]:host:_hosts' \
-  '((free|open)bsd*)' '-s[report duration in seconds]' \
-  '(freebsd*|openbsd*)' '-d+[limit sessions to those active at snapshot time]:time ([[CC]YY][MMDD]hhmm[.SS])' \
+  '((free|open)bsd*|darwin*)' '-s[report duration in seconds]' \
+  '((free|open)bsd*|darwin*)' '-d+[limit sessions to those active at snapshot time]:time ([[CC]YY][MMDD]hhmm[.SS])' \
   '((net|free|open)bsd*|darwin*|dragonfly*)' '-t+[limit sessions by tty]:tty:_ttys -D' \
   'openbsd*' '-c[calculate total time]' \
-  '^darwin*' '(--file)-f+[specify account file]:file:_files' \
-  '(solaris*|linux-gnu|freebsd*|openbsd*)' '(--limit)-n+[specify number of lines to show]:number' \
+  '(solaris*|darwin*|linux-gnu|freebsd*|openbsd*)' '(--limit)-n+[specify number of lines to show]:number' \
   '((open|net)bsd*|dragonfly*)' '-T[show more detailed time information including year and seconds]' \
   'netbsd*' '-x[assume file is in wtmpx(5) format]' \
   'netbsd*' '-n[show IP of remote hosts]' \
-  'freebsd*' '-w[show seconds in duration field]' \
-  'freebsd*' '-y[show year in session start time]'
+  '(freebsd*|darwin*)' '-w[show seconds in duration field]' \
+  '(freebsd*|darwin*)' '-y[show year in session start time]'
 do
   [[ $OSTYPE = $~pattern ]] && args+=( $arg )
 done
@@ -58,4 +57,5 @@ else
   args+=( '*:user:_users' )
 fi
 
-_arguments -s -S $args
+_arguments -s -S $args \
+  '(--file)-f+[specify account file]:file:_files'
diff --git a/Completion/Unix/Command/_ls b/Completion/Unix/Command/_ls
index 392b8490b..a19ad30e2 100644
--- a/Completion/Unix/Command/_ls
+++ b/Completion/Unix/Command/_ls
@@ -61,12 +61,16 @@ if ! _pick_variant gnu=gnu unix --help; then
       '(-l -1 -C -m -x)-g[long listing but without owner information]'
     )
   fi
+  if [[ $OSTYPE = (netbsd*|darwin*) ]]; then
+    arguments+=(
+      "-X[don't cross mount points when recursing]"
+    )
+  fi
   if [[ $OSTYPE = netbsd* ]]; then
     arguments+=(
       '-M[output file sizes in comma-separated form]'
       '-O[output only leaf (non-directory) files]'
       '-P[print full pathname for each file]'
-      "-X[don't cross mount points when recursing]"
     )
   fi
   if [[ $OSTYPE = (dragonfly*|freebsd*|openbsd*|darwin*) ]]; then
diff --git a/Completion/Unix/Command/_mv b/Completion/Unix/Command/_mv
index c52e7a5e4..983c25ea8 100644
--- a/Completion/Unix/Command/_mv
+++ b/Completion/Unix/Command/_mv
@@ -38,11 +38,11 @@ case $variant; in
       '(-f -n)-i[prompt before overwriting existing file]'
     )
     ;|
+  darwin*|dragonfly*|freebsd*|netbsd*)
+    args+=( "-h[if target is a symlink to a directory, don't follow it]" )
+  ;|
   darwin*|dragonfly*|freebsd*)
-    args+=(
-      "(-f -i)-n[don't overwrite existing file]"
-      "-h[if target is a symlink to a directory, don't follow it]"
-    )
+    args+=( "(-f -i)-n[don't overwrite existing file]" )
     ;|
   darwin*|dragonfly*|*bsd*)
     args+=(
diff --git a/Completion/Unix/Command/_ps b/Completion/Unix/Command/_ps
index c3dfae47d..158fb6b83 100644
--- a/Completion/Unix/Command/_ps
+++ b/Completion/Unix/Command/_ps
@@ -106,9 +106,9 @@ case $OSTYPE in
   ;|
   linux-gnu|netbsd*) bsdarg+=( 'k[specify sort order]' ) ;|
   linux-gnu|openbsd*) bsd+=( 'f[show process hierarchy]' ) ;|
+  darwin*|freebsd*|netbsd*) bsdarg+=( '*G[select processes by real group]' ) ;|
   darwin*|freebsd*)
     bsd+=( 'X[skip processes with no controlling terminal]' )
-    bsdarg+=( '*G[select processes by real group]' )
   ;|
   freebsd*|dragonfly*)
     bsd+=( 'f[show command and environment for swapped out processes]' )
diff --git a/Completion/Unix/Command/_script b/Completion/Unix/Command/_script
index d38d56f2e..25f8ea35f 100644
--- a/Completion/Unix/Command/_script
+++ b/Completion/Unix/Command/_script
@@ -50,19 +50,28 @@ case $OSTYPE in
       '(-d -p -T)-r[record a session with input, output and timing data]'
     )
   ;|
+  darwin*|netbsd*|freebsd*)
+    args+=(
+      '-e[return exit status of the child process]'
+    )
+  ;|
   netbsd*|openbsd*)
     args+=(
       '-c[run specified command instead of a shell]:command:_cmdstring'
     )
   ;|
+  darwin*|freebsd*)
+    args+=(
+      '(-a -r -k -t)-T[play back a recorded session, reporting only timestamps]: :_date_formats'
+    )
+  ;|
   netbsd*)
     args+=( '-f[flush output after each write]' )
   ;|
   freebsd*)
     args+=(
-      '-e[return exit status of the child process]'
       '-f[use filemon(4)]'
-      '(-a -r -k -t)-T[play back a recorded session, reporting only timestamps]: :_date_formats'
+      '-w[forward terminal size changes on SIGWINCH]'
     )
   ;|
   darwin*|dragonfly*|freebsd*)
diff --git a/Completion/Unix/Command/_sed b/Completion/Unix/Command/_sed
index ef3aaf2fd..ecbec61d1 100644
--- a/Completion/Unix/Command/_sed
+++ b/Completion/Unix/Command/_sed
@@ -104,7 +104,7 @@ else
   case $OSTYPE in
     openbsd*|freebsd*|netbsd*|darwin*|dragonfly*)
       args+=(
-	'(-r -E)'{-E,-r}$extended
+	'(-r -E -H)'{-E,-r}$extended
 	'-a[delay opening files listed with w function]'
       )
     ;|
@@ -115,8 +115,10 @@ else
       args+=(
         '-I+[edit files in-place, treating all files as a single input stream]:: :_guard "^(*[@/; \\\]*|?(#c6,)|-*)" "suffix for backup"'
       )
-    ;;
+    ;|
     openbsd*) args+=( '-u[make output line buffered]' ) ;;
+    darwin*) args+=( '(-r -E)-H[use enhanced regular expressions]' ) ;;
+    netbsd*) args+=( '(-r -E)-g[use GNU regular expressions]' '!(-r -E -g)-G' ) ;;
   esac
 fi
 
diff --git a/Completion/Unix/Command/_vmstat b/Completion/Unix/Command/_vmstat
index 6db776e62..1d0ac855d 100644
--- a/Completion/Unix/Command/_vmstat
+++ b/Completion/Unix/Command/_vmstat
@@ -37,10 +37,14 @@ case $OSTYPE in
       '-f[report on the number fork syscalls since boot and pages of virtual memory for each]'
     )
   ;|
+  freebsd*|dragonfly*|netbsd*)
+    specs+=(
+      '-n+[change the maximum number of disks to display]:number of disks to display [2]'
+    )
+  ;|
   freebsd*|dragonfly*)
     specs+=(
       '-m[report on the usage of kernel dynamic memory allocated using malloc(9) by type]'
-      '-n+[change the maximum number of disks to display]:number of disks to display [2]'
       '*-p+[specify which types of devices to display]: :->devices'
       '-s[display the contents of the SUM structure]'
       '-z[report on memory used by the kernel zone allocator, uma(9), by zone]'
diff --git a/Completion/Unix/Command/_w b/Completion/Unix/Command/_w
index e82c84f57..408cb76af 100644
--- a/Completion/Unix/Command/_w
+++ b/Completion/Unix/Command/_w
@@ -23,7 +23,7 @@ case $OSTYPE in
   openbsd*)
     args+=( '-a[translate network addresses into names]' )
   ;|
-  (free|net)bsd*|dragonfly*)
+  (free|net)bsd*|dragonfly*|darwin*)
     args+=( '-n[show network addresses as numbers]' )
   ;|
   *bsd*|dragonfly*)
@@ -35,6 +35,11 @@ case $OSTYPE in
   freebsd*|dragonfly*)
     args+=( '-d[dump process list on a per controlling tty basis]' )
   ;|
+  netbsd*)
+    args+=(
+      '-A[sort tty names alphabetically instead of utmp or utmpx order]'
+    )
+  ;|
   solaris*)
     args+=( '!(-s -w -l)'{-l,-w}
       '-s[short output form]'
diff --git a/Completion/Unix/Command/_wc b/Completion/Unix/Command/_wc
index a1897e289..2a4f7ab05 100644
--- a/Completion/Unix/Command/_wc
+++ b/Completion/Unix/Command/_wc
@@ -18,7 +18,7 @@ if _pick_variant gnu=GNU unix --version; then
 else
   args=( -A "-*" "${(@)args:#(|\(*\))(|\*)--*}" )
   case $OSTYPE in
-    freebsd*|netbsd*) args+=( '-L[print longest line lengths]' ) ;;
+    freebsd*|netbsd*|darwin*) args+=( '-L[print longest line lengths]' ) ;;
     openbsd*) args+=( '-h[human readable: use unit suffixes]' ) ;;
     solaris*) args+=( ${${(M)args:#*-m\[*}//-m\[/-C\[} ) ;;
   esac
diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs
index c09435a1f..5a45c2920 100644
--- a/Completion/Unix/Command/_zfs
+++ b/Completion/Unix/Command/_zfs
@@ -79,7 +79,7 @@ rw_ds_props=(
       'paths:mountpoint:_directories -W / -P /'"
   'multilevel:value:(on off)'
   'nbmand:value:(on off)'
-  'primarycache:value:(all none metadata)'
+  {prefetch,primarycache}':value:(all none metadata)'
   'quota: :->quotas'
   'readonly:value:(on off)'
   'recordsize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K 256K 512K 1M)'
@@ -515,9 +515,11 @@ case $service:$words[1] in
   ;;
 
   zfs:set)
-    [[ $implementation = solaris ]] && args=(
-      '-r[recursively apply value]' \
-    )
+    if [[ $implementation = solaris ]]; then
+      args=( '-r[recursively apply value]' )
+    else
+      args=( "-u[update property but don't mount or share dataset]" )
+    fi
     _arguments -C -A "-*" -S $args \
       ':property:->set-properties' \
       '*:filesystem/volume:_zfs_dataset -t fs -t vol'
@@ -598,13 +600,14 @@ case $service:$words[1] in
   zfs:mount)
     [[ $OSTYPE != freebsd* ]] && args=( '-O[overlay mount]' )
     [[ $implementation = openzfs ]] && args+=(
-    '-l[load keys for encrypted filesystems as they are being mounted]'
+      '-l[load keys for encrypted filesystems as they are being mounted]'
+      '(-a)-R[mount filesystems along with all their children]'
     )
     _arguments -A "-*" -S $args \
       '-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]' \
-      '(:)-a[mount all available ZFS filesystems]' \
+      '(: -R)-a[mount all available ZFS filesystems]' \
       '(-a):filesystem:_zfs_dataset -t fs'
   ;;
 
@@ -888,6 +891,12 @@ case $service:$words[1] in
       ':property:($delegatable_perms $ro_ds_props ${rw_ds_props%%:*})'
   ;;
 
+  zpool:(clear|online))
+    [[ $OSTYPE = linux* ]] && args=(
+      "--power[power on the device's slot in the storage enclosure]"
+    )
+  ;|
+
   zpool:help)
     _arguments -A "-*" -S \
       - commands \
@@ -905,6 +914,7 @@ case $service:$words[1] in
         '-L[display real paths for vdevs resolving all symbolic links]'
         '-o+[set given pool properties]: :_values -s , "property" "${(@M)ci_po_props\:#ashift*}"' \
         '-P[display real paths for vdevs instead of only the last component of the path]'
+        --allow-ashift-mismatch --allow-in-use --allow-replication-mismatch
       )
     elif [[ $implementation = solaris ]]; then
       args=( '-l[display configuration in /dev/chassis location form]' )
@@ -1004,7 +1014,7 @@ case $service:$words[1] in
 
   zpool:get)
     [[ $implementation = solaris ]] && args=(
-      '-s+[specify sources to display]: :_values -s "source" local default none'
+      '-s+[specify sources to display]: :_values -s , "source" local default none'
     )
     _arguments -A "-*" -S $args \
       '-H[suppress headers and tab-delimit fields]' \
@@ -1140,6 +1150,9 @@ case $service:$words[1] in
     [[ $implementation = openzfs ]] && args=(
       '-f[force disk into faulted state]'
     )
+    [[ $OSTYPE = linux* ]] && args=(
+      "--power[power off the device's slot in the storage enclosure]"
+    )
     _arguments -C -A "-*" -S $args \
       '-t[offline until next reboot]' \
       ':pool:_zfs_pool' \
@@ -1147,7 +1160,7 @@ case $service:$words[1] in
   ;;
 
   zpool:online)
-    _arguments -C -A "-*" -S \
+    _arguments -C -A "-*" -S $args \
       '-e[expand device to use all available space]' \
       ':pool:_zfs_pool' \
       '*:virtual device:->pool-devices'
@@ -1234,8 +1247,10 @@ case $service:$words[1] in
   zpool:status)
     if [[ $implementation = openzfs ]]; then
       args=(
+        '--power[display vdev enclosure slot power status]'
         '-D[display a histogram of deduplication statistics]'
         '-c[run scripts on each vdev]:script:_files -W "($ZPOOL_SCRIPTS_PATH /etc/zfs/zpool.d ~/.zpool.d)"'
+        '-e[only show unhealthy vdevs]'
         '-i[display vdev initialization status]'
         '-g[display vdev GUIDs instead of the normal device names]'
         '-L[display real paths for vdevs resolving all symbolic links]'




Messages sorted by: Reverse Date, Date, Thread, Author