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

PATCH: completion options update



This is the usual collection of completion option updates based on
diffs of --help output. In this case, I used an up-to-date
rolling-release Linux system as a reference which I haven't done
in a while.

Relevant versions are:

  bectl, freebsd-update, zfs - FreeBSD 15.1
  binutils 2.46
  coreutils 9.11
  cryptsetip 2.8.6
  drill 1.9.0
  entr 5.8
  ethtool 7.0
  findutils 4.10
  flac 1.5
  gcc just a typo and one option
  git 2.55.0 (a release candidate)
  gnutls 3.8.13
  gpg 2.4.9
  gphoto2 2.5.32
  htop 3.5.1
  kmod 34.2
  ldd Solaris 11
  less 704
  libtiff 4.7.1
  ngrep 1.47
  nmap 7.99
  pandoc 3.7.02
  patchutils 0.4.5
  procps-ng 4.0.6 (also now completing for pidwait)
  psmisc 23.7
  rar 7.21
  screen 5.0.1
  shadow-utils 4.18
  sqlite 3.53.2
  ss 7.0
  strace 7.0
  texinfo 7.3
  tracepath 20250605
  util-linux 2.42.1 (also now completing for hardlink)
  w3m 0.5.3
  xmllint 21503
  xxd 2026-05-31
  zstd 1.5.7
  update-rc.d, update-alternatives, invoke-rc.d, dpkg_source, apt - Ubuntu 202410
    (have checked these against current online Debian man pages).

Oliver

diff --git a/Completion/BSD/Command/_bectl b/Completion/BSD/Command/_bectl
index 484fa0159..8bbcdf628 100644
--- a/Completion/BSD/Command/_bectl
+++ b/Completion/BSD/Command/_bectl
@@ -43,6 +43,7 @@ if [[ $state = args ]]; then
       args+=(
         '-r[create recursive boot environment]'
         '-e+[clone specified boot environment]: :->boot-environs'
+        '-E[create new empty boot environment]'
       )
     ;;
     destroy)
diff --git a/Completion/BSD/Command/_freebsd-update b/Completion/BSD/Command/_freebsd-update
index af37641e4..0d1f008ac 100644
--- a/Completion/BSD/Command/_freebsd-update
+++ b/Completion/BSD/Command/_freebsd-update
@@ -22,5 +22,6 @@ _arguments \
   '-r[specify the new release]:new release' \
   '-s[fetch files from the specified server or server pool]:server:_hosts' \
   '-t[mail output of cron command, if any, to address]:address' \
+  '-v[set output verbosity]:level [stats]:(stats nostats debug)' \
   '--currently-running[assume specified release as current]:release' \
   '*:command:_values -S " " -w "commands" $flags[@]'
diff --git a/Completion/Debian/Command/_apt b/Completion/Debian/Command/_apt
index ac3095a4d..2b3303eb6 100644
--- a/Completion/Debian/Command/_apt
+++ b/Completion/Debian/Command/_apt
@@ -492,12 +492,15 @@ _apt-get () {
     -d,--download-only:bool \
     -f,--fix-broken:bool \
     -h,--help:bool \
+    --assume-no:bool \
+    -a,--host-architecture:bool \
+    -P,--build-profiles:bool \
     -m,--ignore-missing,--fix-missing:bool \
     -o,--option:arbitem \
     -q,--quiet,--silent:intlevel \
     -s,--simulate,--just-print,--dry-run,--recon,--no-act:bool \
     -t,--target-release,--default-release:release \
-    -u,--show-upgraded:bool \
+    --no-show-upgraded:bool \
     -v,--version:bool \
     -y,--yes,--assume-yes:bool \
     --allow-change-held-packages:bool \
@@ -515,9 +518,13 @@ _apt-get () {
     --no-download:bool \
     --no-install-recommends:bool \
     --no-remove:bool \
+    --install-suggests:bool \
     --no-upgrade:bool \
     --only-source:bool \
     --only-upgrade:bool \
+    --allow-downgrades:bool \
+    --allow-remove-essential:bool \
+    --allow-change-held-packages:bool \
     --print-uris:bool \
     --purge:bool \
     --reinstall:bool \
diff --git a/Completion/Debian/Command/_dpkg_source b/Completion/Debian/Command/_dpkg_source
index eabe8bc33..e2af0a57b 100644
--- a/Completion/Debian/Command/_dpkg_source
+++ b/Completion/Debian/Command/_dpkg_source
@@ -1,16 +1,30 @@
 #compdef dpkg-source
 
 _arguments \
-  '-x[specify source file]:Debian source file:_files -g "*.dsc(-.)"' \
-  '-b[specify source directory]:Debian source directory:_files -/' \
+  '(-x --extract)'{-x,--extract}'[specify source file]:Debian source file:_files -g "*.dsc(-.)"::output directory:_directories' \
+  '(-b --build)'{-b,--build}'[specify source directory]:Debian source directory:_files -/' \
+  '--print-format[print the format to be used for the source package]: :_directories' \
+  '--before-build[run the corresponding source package format hook]: :_directories' \
+  '--after-build[run the corresponding source package format hook]: :_directories' \
+  '--commit[store upstream changes in a new patch]: :_directories::patch name' \
   '-c-[control file]:control file:_files' \
   '-l-[changelog file]:changelog file:_files' \
   '-F-[changelog format]:changelog format:' \
+  '--format=[set the format to be used for the source package]:format' \
   '-V-[set substitutions variable]:expression:' \
   '-T-[alternate variable file]:varlistfile:' \
   '-D-[override dsc field]:expression:' \
   '-U-[remove a field]:field:' \
-  '-i-[ignore files in diff]:filter:' \
+  '(-i --diff-ignore)'{-i-,--diff-ignore=}'[filter out files to ignore diffs of]:regex' \
+  '(-I --tar-ignore)'{-i-,--tar-ignore=}'[filter out files when building tarballs]:regex' \
+  '(-Z --compression)'{-Z-,--compression=}'[select compression to use]:compression [xz]:(bzip2 gzip lzma xz)' \
+  '(-z --compression-level)'{-z-,--compression-level=}'[compression level to use]:level [9]' \
+  "--no-copy[don't copy .orig tarballs]" \
+  "--no-check[don't check signature and checksums before unpacking]" \
+  "--no-overwrite-dir[don't overwrite directory on extraction]" \
+  "--require-valid-signature[abort if the package doesn't have a valid signature]" \
+  '--require-strong-checksums[abort if the package contains no strong checksums]' \
+  '--ignore-bad-version[allow bad source package versions]' \
   '-sa[autoselect orig source]' \
   '-sk[use packaged orig source - unpack and keep]' \
   '-sp[use packaged orig source - unpack and remove]' \
@@ -25,4 +39,7 @@ _arguments \
   '-sR[use unpackaged orig source - unpack and remove with overwrite]' \
   '-sp[leave original source packed in cwd]' \
   '-su[unpack original source tree too]' \
-  '-h[help]'
+  "--skip-debianization[don't apply debian diff to upstream sources]" \
+  '(-)'{-\?,--help}'[display help information]' \
+  '-q[quiet mode]' \
+  '--version[display version information]'
diff --git a/Completion/Debian/Command/_invoke-rc.d b/Completion/Debian/Command/_invoke-rc.d
index cd8df28c1..74ee1e828 100644
--- a/Completion/Debian/Command/_invoke-rc.d
+++ b/Completion/Debian/Command/_invoke-rc.d
@@ -1,11 +1,13 @@
 #compdef invoke-rc.d
 
 _arguments \
+  '(- 1 2)--help[display help information]' \
   '--quiet[quiet mode, no error messages are generated]' \
   '--force[run the initscript regardless of policy and subsystem]' \
   '--try-anyway[run the initscript even if a non-fatal error is found]' \
   '--disclose-deny[return 101 instead of 0 if action is denied]' \
   '--query[return one of status codes 100-106, does not run the script]' \
   '--no-fallback[ignore any fallback action requests by the policy layer]' \
+  '--skip-systemd-native[exit before doing anything if a systemd environment is detected]' \
   '1:service:_services' \
-  '2:command:(start stop force-stop restart reload force-reload status)'
+  '2:command:(start stop force-stop restart try-restart reload force-reload status)'
diff --git a/Completion/Debian/Command/_update-alternatives b/Completion/Debian/Command/_update-alternatives
index 31128dd82..0ddb8748d 100644
--- a/Completion/Debian/Command/_update-alternatives
+++ b/Completion/Debian/Command/_update-alternatives
@@ -14,8 +14,10 @@ _arguments -C \
   '--test' \
   '--help' \
   '--version' \
-  '--altdir:altdir:_files -/' \
-  '--admindir:admindir:_files -/' \
+  '--altdir:alternatives directory [/etc/alternatives]:_files -/' \
+  "--admindir:administrative directory [$alterdir]:_files -/" \
+  '--instdir:installation directory:_files -/' \
+  '--root:root directory:_files -/' \
   '--log:log file:_files -/' \
   '--force' \
   '--skip-auto' \
diff --git a/Completion/Debian/Command/_update-rc.d b/Completion/Debian/Command/_update-rc.d
index 68b81dc72..d1941a384 100644
--- a/Completion/Debian/Command/_update-rc.d
+++ b/Completion/Debian/Command/_update-rc.d
@@ -3,26 +3,18 @@
 local curcontext="$curcontext" state line expl
 
 _arguments -C \
-  '-n[show actions without performing them]' \
   '-f[force removal of symlinks]' \
   '1:service:_services' \
-  '2:command:(remove defaults start stop)' \
+  '2:command:(remove defaults defaults-disabled disable enable)' \
   '*::args:->args' && return
 
 case $words[2] in
-  defaults)
-    _message -e number 'sequence number'
+  disable|enable)
+    _wanted runlevels expl runlevel S 2 3 4 5 && return
   ;;
-  remove)
+  *)
     _message 'no more arguments'
   ;;
-  st*)
-    case ${words[CURRENT-1]} in
-      .) _wanted commands expl commands compadd start stop && return ;;
-      start|stop) _message -e number 'sequence number' ;;
-      *) _message -e runlevels run\ level ;;
-    esac
-  ;;
 esac
 
 return 1
diff --git a/Completion/Linux/Command/_blkid b/Completion/Linux/Command/_blkid
index e31250d37..29392c4e5 100644
--- a/Completion/Linux/Command/_blkid
+++ b/Completion/Linux/Command/_blkid
@@ -19,10 +19,10 @@ _arguments \
   '(-l --list-one)'{-l,--list-one}'[look up only first device with token specified by -t]' \
   '(-n --match-types)'{-n+,--match-types=}'[filter by filesystem type]: :_sequence _file_systems' \
   '(-O --offset)'{-O+,--offset=}'[probe at the given offset]: :_numbers -M "m\:{a-zA-Z}={A-Za-z}" offset {K,M,G,T,P,E,Z,Y}{,B,iB}' \
-  '(-o --output)'{-o+,--output=}'[specify output format]:format [full]:(full value list device udev export)' \
+  '(-o --output)'{-o+,--output=}'[specify output format]:format [full]:(full value list device udev export json)' \
   '(-p --probe)'{-p,--probe}'[probe low-level superblocks]' \
   \*{-s+,--match-tag=}'[show specified tag(s)]:tag:(none LABEL UUID UUID_SUB TYPE PARTLABEL PARTUUID SEC_TYPE PTUUID PTTYPE ALIGNMENT_OFFSET MINIMUM_IO_SIZE OPTIMAL_IO_SIZE PHYSICAL_SECTOR_SIZE LOGICAL_SECTOR_SIZE)' \
-  '(-S --size)'{-S+,--size=}'[overwrite device size]: :_numbers -M "m\:{a-zA-Z}={A-Za-z}" size {K,M,G,T,P,E,Z,Y}{,B,iB}' \
+  '(-S --size)'{-S+,--size=}'[override device size]: :_numbers -M "m\:{a-zA-Z}={A-Za-z}" size {K,M,G,T,P,E,Z,Y}{,B,iB}' \
   '(-t --match-token)'{-t+,--match-token=}'[find device with a specific token]:token' \
   '(-u --usages)'{-u+,--usages=}'[filter by usage]:usage:_sequence compadd - {no,}{filesystem,raid,crypto,other}' \
   '*:device:_files -g "*(-%)"'
diff --git a/Completion/Linux/Command/_chrt b/Completion/Linux/Command/_chrt
index 5431b0799..3e550bf60 100644
--- a/Completion/Linux/Command/_chrt
+++ b/Completion/Linux/Command/_chrt
@@ -8,21 +8,22 @@ _arguments -C -s -S -A "-*" \
   '(H -a --all-tasks)'{-a,--all-tasks}'[operate on all tasks (threads) for a given pid]' \
   '(H)'{-v,--verbose}'[display status information]' \
   '(H)'{-p,--pid}'[interpret args as process ID]' \
-  '(H -R --reset-on-fork -b --batch -d --deadline -i --idle -o --other)'{-R,--reset-on-fork}'[set SCHED_RESET_ON_FORK for FIFO or RR]' \
+  '(H -R --reset-on-fork -b --batch -d --deadline -e --ext -i --idle -o --other)'{-R,--reset-on-fork}'[set SCHED_RESET_ON_FORK for FIFO or RR]' \
+  '(H -T --sched-runtime -f --fifo -e --ext -i --idle -r --rr)'{-T,--sched-runtime}'[runtime parameter for DEADLINE]' \
   '(H)*::command or priority:->cmd_or_prio' \
   + 'H' \
   '(* -)'{-m,--max}'[show minimum and maximum valid priorities, then exit]' \
   '(* -)'{-h,--help}'[display usage information]' \
   '(* -)'{-V,--version}'[output version information]' \
   + 'dline' \
-  '(H -T --sched-runtime -b --batch -f --fifo -i --idle -o --other -r --rr)'{-T,--sched-runtime}'[runtime parameter for DEADLINE]' \
-  '(H -P --sched-period -b --batch -f --fifo -i --idle -o --other -r --rr)'{-P,--sched-period}'[period parameter for DEADLINE]' \
-  '(H -D --sched-deadline -b --batch -f --fifo -i --idle -o --other -r --rr)'{-D,--sched-deadline}'[deadline parameter for DEADLINE]' \
+  '(H -P --sched-period -b --batch -f --fifo -e --ext -i --idle -o --other -r --rr)'{-P,--sched-period}'[period parameter for DEADLINE]' \
+  '(H -D --sched-deadline -b --batch -f --fifo -e --ext -i --idle -o --other -r --rr)'{-D,--sched-deadline}'[deadline parameter for DEADLINE]' \
   + '(policy)' \
   '(H dline -R --reset-on-fork)'{-b,--batch}'[set scheduling policy to SCHED_BATCH]' \
   '(H -R --reset-on-fork)'{-d,--deadline}'[set scheduling policy to SCHED_DEADLINE]' \
-  '(H dline)'{-f,--fifo}'[set scheduling policy to SCHED_FIFO]' \
-  '(H dline -R --reset-on-fork)'{-i,--idle}'[set scheduling policy to SCHED_IDLE]' \
+  '(H dline -T --sched-runtime)'{-e,--ext}'[set scheduling policy to SCHED_EXT (BPF program-defined scheduling)]' \
+  '(H dline -T --sched-runtime)'{-f,--fifo}'[set scheduling policy to SCHED_FIFO]' \
+  '(H dline -R --reset-on-fork -T --sched-runtime)'{-i,--idle}'[set scheduling policy to SCHED_IDLE]' \
   '(H dline -R --reset-on-fork)'{-o,--other}'[set scheduling policy to SCHED_OTHER]' \
   '(H dline)'{-r,--rr}'[set scheduling policy to SCHED_RR (default)]' && ret=0
 
diff --git a/Completion/Linux/Command/_cryptsetup b/Completion/Linux/Command/_cryptsetup
index 897eb94f9..2654ca844 100644
--- a/Completion/Linux/Command/_cryptsetup
+++ b/Completion/Linux/Command/_cryptsetup
@@ -45,6 +45,7 @@ _arguments -s \
   '--dump-volume-key[dump volume key instead of keyslots info]' \
   '--external-tokens-path=[specify path to directory with external token handlers (plugins)]:path:_directories' \
   '--force-offline-reencrypt[force offline LUKS2 reencryption and bypass active device detection]' \
+  '--force-no-keyslots[force dangerous reencryption operation erasing all remaining keyslots]' \
   '--header=[device or file with separated LUKS header]:file:_files' \
   '--hw-opal[use HW OPAL encryption together with SW encryption]' \
   '--hw-opal-factory-reset[wipe WHOLE OPAL disk on luksErase]' \
@@ -52,8 +53,12 @@ _arguments -s \
   '--keep-key[do not change volume key]' \
   '--link-vk-to-keyring=[set keyring where to link volume key]:string' \
   '--new-keyfile=[read the key for a new slot from a file]:file:_files' \
+  '--new-key-description=[specify keyring new key description]:description' \
+  '--new-key-size=[specify size of the new encryption key]:size (bits)' \
   '--new-key-slot=[specify slot number for new key]:slot [first free]' \
   '--new-token-id=[token number]:number [any]' \
+  '--new-volume-key-file=[use new volume key from file]: :_files' \
+  '--new-volume-key-keyring=[use specified keyring key as new volume key]:key' \
   '--progress-json[print progress data in json format]' \
   "--test-args[don't run action, just validate all command line parameters]" \
   '--volume-key-file=[use the volume key from file]:file:_files' \
@@ -76,6 +81,7 @@ _arguments -s \
   '--force-password[disable password quality check (if enabled)]' \
   '--perf-same_cpu_crypt[use dm-crypt same_cpu_crypt performance compatibility option]' \
   '--perf-submit_from_crypt_cpus[use dm-crypt submit_from_crypt_cpus performance compatibility option]' \
+  '--perf-high_priority[set dm-crypt workqueues and writer thread to high priority]' \
   '--perf-no_read_workqueue[bypass dm-crypt workqueue and process read requests synchronously]' \
   '--perf-no_write_workqueue[bypass dm-crypt workqueue and process write requests synchronously]' \
   '--deferred[device removal is deferred until the last user closes it]' \
@@ -88,12 +94,14 @@ _arguments -s \
   '--disable-locks[disable locking of on-disk metadata]' \
   '--disable-keyring[disable loading volume keys via kernel keyring]' \
   '(-I --integrity)'{-I+,--integrity=}'[specify data integrity algorithm (LUKS2 only)]:algorithm' \
+  '--integrity-inline[use inline mode (use HW integrity field)]' \
+  '--integrity-key-size=[specify size of the data integrity key]:size (bits)' \
   '--integrity-no-journal[disable journal for integrity device]' \
   "--integrity-no-wipe[don't wipe device after format]" \
   '--integrity-legacy-padding[use inefficient legacy padding (old kernels)]' \
   "--token-only[don't ask for passphrase if activation by token fails]" \
   '--token-id=[specify token number]:number [any]' \
-  '--key-description=[specify key description]:description' \
+  '--key-description=[specify keyring key description]:description' \
   '--sector-size=[specify encryption sector size]:size [512 bytes]' \
   '--iv-large-sectors[use IV counted in sector size (not in 512 bytes)]' \
   '--persistent[set activation flags persistent for device]' \
diff --git a/Completion/Linux/Command/_ethtool b/Completion/Linux/Command/_ethtool
index 8cff24e96..2213a5d06 100644
--- a/Completion/Linux/Command/_ethtool
+++ b/Completion/Linux/Command/_ethtool
@@ -6,14 +6,24 @@ local -A opt_args
 
 _arguments -C -A "-*" \
   '--debug[turn on debugging messages]:mask:((1\:parser\ information))' \
-  '--json[output results in JSON]' \
+  '(-j --json)'{-j,--json}'[output results in JSON]' \
   '(-I --include-statistics)'{-I,--include-statistics}'[include command-related statistics in the output]' \
-  '(cmds)'{-Q,--per-queue}'[apply per-queue command]: :(queue_mask):queue mask' \
+  '(cmds cmdp)'{-Q,--per-queue}'[apply per-queue command]: :(queue_mask):queue mask' \
+  '(cmds cmdc)--phy=[target a PHY within the interface.]:phy' \
   "1:interface:_net_interfaces" \
   '*:: :->args' \
   + '(cmdc)' \
-  '(cmds)'{-c,--show-coalesce}'[query the specified ethernet device for coalescing information]' \
-  '(cmds)'{-C,--coalesce}'[change the coalescing settings of the specified ethernet device]' \
+  '(cmdp cmds)'{-c,--show-coalesce}'[query the specified ethernet device for coalescing information]' \
+  '(cmdp cmds)'{-C,--coalesce}'[change the coalescing settings of the specified ethernet device]' \
+  + '(cmdp)' \
+  '(cmds cmdc)--cable-test[perform cable test and report the results]' \
+  '(cmds cmdc)--cable-test-tdr[perform cable test and report Time Domain Reflectometer data]' \
+  '(cmds cmdc)--get-plca-cfg[get PLCA configuration]' \
+  '(cmds cmdc)--set-plca-cfg[set PLCA configuration]' \
+  '(cmds cmdc)--get-plca-status[get PLCA status information]' \
+  '(cmds cmdc)--show-pse[show settings for power sourcing equipment]' \
+  '(cmds cmdc)--set-pse[set power sourcing equipment settings]' \
+  '(cmds cmdc)--show-mse[show Mean Square Error (MSE) diagnostics]' \
   + '(cmds)' \
   '(1)'{-h,--help}'[display help information]' \
   '(1)--version[display version information]' \
@@ -36,6 +46,8 @@ _arguments -C -A "-*" \
   {-n,--show-nfc,-u,--show-ntuple}'[retrieve receive network flow classification options or rules]' \
   {-N,--config-nfc,-U,--config-ntuple}'[configure receive network flow classification options or rules]' \
   {-T,--show-time-stamping}"[show device's time stamping capabilities]" \
+  '--get-hwtimestamp-cfg[get selected hardware time stamping]' \
+  '--set-hwtimestamp-cfg[select hardware time stamping]' \
   {-x,--show-rxfh-indir,--show-rxfh}'[show Rx flow hash indirection table and/or RSS hash key]' \
   {-X,--set-rxfh-indir,--rxfh}'[set Rx flow hash indirection table and/or RSS hash key]' \
   {-f,--flash}'[flash firmware image from the specified file]' \
@@ -56,24 +68,20 @@ _arguments -C -A "-*" \
   '--reset[reset hardware components]' \
   '--show-fec[query device for forward error correction support]' \
   '--set-fec[configure forward error correction for device]' \
-  '--cable-test[perform cable test and report the results]' \
-  '--cable-test-tdr[perform cable test and report Time Domain Reflectometer data]' \
   '--show-tunnels[show tunnel-related device capabilities and state]' \
   '--show-module[show transceiver module settings]' \
   '--set-module[set transceiver module settings]' \
-  '--get-plca-cfg[get PLCA configuration]' \
-  '--set-plca-cfg[set PLCA configuration]' \
-  '--get-plca-status[get PLCA status information]' \
   '--show-mm[show MAC merge layer state]' \
   '--set-mm[set MAC merge layer parameters]' \
-  '--show-pse[show settings for power sourcing equipment]' \
-  '--set-pse[set power sourcing equipment settings]' \
+  '--flash-module-firmware[flash transceiver module firmware]' \
+  '--show-phys[list PHYs]' \
   '--monitor[listen to netlink notifications and displays them]::command:(
     --all -s --change -k --show-features --show-offload -K
     --features --offload  --show-priv-flags --set-priv-flags -g --show-ring
     -G --set-ring -l --show-channels -L --set-channels -c --show-coalesce
     -C --coalesce -a --show-pause -A --pause --show-eee --set-eee
     --cable-test --cable-test-tdr --show-module --set-module
+    --get-plca-cfg --set-plca-cfg --pse-event
   )' && return
 
 if [[ -n $state ]]; then
@@ -97,17 +105,18 @@ if [[ -n $state ]]; then
   rx-frames-low|tx-usecs-low|tx-frames-low|pkt-rate-high|rx-usecs-high) ;&
   rx-frames-high|tx-usecs-high|tx-frames-high|sample-interval|dmac) ;&
   tx-aggr-max-bytes|tx-aggr-max-frame|tx-aggr-time-usec) ;&
-  rx-mini|rx-jumbo|rx-buf-len|cqe-size|tx-push-buf-len) ;&
+  rx-mini|rx-jumbo|rx-buf-len|cqe-size|tx-push-buf-len|hds-thresh) ;&
   offset|length|magic|value|phyad|proto|tos|tclass|l4proto|src-port) ;&
   dst-port|spi|l4data|vlan-etype|vlan|user-def|action|vf|queue|loc) ;&
+  index) ;&
   page|bank|i2c|first|last|step|pair|lanes) ;&
   rx-copybreak|tx-copybreak|tx-buf-size|pfc-prevention-tout) ;&
   other|combined|tx-timer|count|msecs) ;&
   node-id|node-cnt|to-tmr|burst-cnt|burst-tmr) ;&
-  tx-min-frag-size)
+  tx-min-frag-size|c33-pse-avail-pw-limit|prio)
     _message -e numbers 'number'
   ;;
-  podl-pse-admin-control)
+  (podl-pse|c33-pse)-admin-control)
     _wanted values expl 'value' compadd enable disable
   ;;
   speed)
@@ -168,6 +177,12 @@ if [[ -n $state ]]; then
   src|src-ip|dst|dst-ip|dst-mac)
     _message -e addresses address
   ;;
+  qualifier)
+    _wanted qualifiers expl qualifier compadd precise approx
+  ;;
+  rx-filter)
+    _message -e values value
+  ;;
   m)
     _message -e masks mask
   ;;
@@ -178,7 +193,7 @@ if [[ -n $state ]]; then
     _message -e functions 'hash function'
   ;;
   xfrm)
-    _wanted transformations expl transformation compadd symmetric-xor none
+    _wanted transformations expl transformation compadd symmetric-xor symmetric-or-xor none
   ;;
   flags)
     _message -e masks mask
@@ -192,6 +207,9 @@ if [[ -n $state ]]; then
   tcp-data-split)
     _wanted states expl state compadd auto on off
   ;;
+  pass)
+    _message -e passwords password
+  ;;
   *)
     case ${${(Mk)opt_args:#cmd?*}[1]#cmd?-} in
     -a|--show-pause)
@@ -215,7 +233,8 @@ if [[ -n $state ]]; then
         'rx-mini[change number of ring entries for the RX Mini ring]' \
         'rx-jumbo[change number of ring entries for the RX Jumbo ring]' \
         'tx[change number of ring entries for the TX ring]' \
-        rx-buf-len tcp-data-split cqe-size tx-push rx-push tx-push-buf-len
+        rx-buf-len tcp-data-split cqe-size tx-push rx-push tx-push-buf-len \
+        hds-thresh
     ;;
     -d|--register-dump)
       _values -S ' ' -w 'option' \
@@ -303,6 +322,12 @@ if [[ -n $state ]]; then
             queue context loc
       fi
     ;;
+    -T|--show-time-stamping)
+      _wanted options expl option compadd index qualifier
+    ;;
+    --set-hwtimestamp-cfg)
+      _wanted options expl option compadd index qualifier tx rx-filter
+    ;;
     -x|--show-rxfh-indir|--show-rxfh)
       _wanted options expl option compadd -F line - context
     ;;
@@ -381,6 +406,17 @@ if [[ -n $state ]]; then
       _wanted options expl tunable compadd enable node-id node-cnt \
           to-tmr burst-cnt burst-tmr
     ;;
+    --set-mm)
+      _wanted options expl option compadd verify-enabled verify-time \
+          tx-enabled pmac-enabled tx-min-frag-size
+    ;;
+    --set-pse)
+      _wanted options expl option compadd {podl-pse,c33-pse}-admin-control \
+          c33-pse-avail-pw-limit prio
+    ;;
+    --flash-module-firmware)
+      _wanted options expl option compadd file pass
+    ;;
     esac
   ;;
   esac
diff --git a/Completion/Linux/Command/_findmnt b/Completion/Linux/Command/_findmnt
index 6155d4dc1..b9cb04dc7 100644
--- a/Completion/Linux/Command/_findmnt
+++ b/Completion/Linux/Command/_findmnt
@@ -19,6 +19,7 @@ _arguments -s -C \
   '(H -e --evaluate)'{-e,--evaluate}'[convert LABEL/UUID/PARTLABEL/PARTUUID to the device name]' \
   '(H -F --tab-file)*'{-F+,--tab-file=}'[search in the specified tab file]:tab file:_files' \
   '(H -f --first-only)'{-f,--first-only}'[print the first matching filesystem only]' \
+  '(H)--hyperlink=-[print paths as hyperlinks]::when:(always never auto)' \
   '(H -i --invert)'{-i,--invert}'[invert the sense of matching]' \
   '(H -M --mountpoint :)'{-M+,--mountpoint=}'[specify the mountpoint]: :->targets' \
   '(H -n --noheadings)'{-n,--noheadings}'[do not print a header line]' \
@@ -52,7 +53,8 @@ _arguments -s -C \
   '(H)'{-P,--pairs}'[use key="value" output format]' \
   '(H)'{-r,--raw}'[use raw output format]' \
   + '(S)' \
-  '(H)'{-k,--kernel}'[search in /proc/self/mountinfo (default)]' \
+  '(H)-k[search in /proc/self/mountinfo (default)]' \
+  '(H)--kernel=-[search in /proc/self/mountinfo (default)]::method:(mountinfo listmount)' \
   '(H)'{-m,--mtab}'[search in /etc/mtab]' \
   '(H)'{-N+,--task=}'[search /proc/<pid>/mountinfo]: :_pids' \
   '(H)'{-s,--fstab}'[search in /etc/fstab]' \
diff --git a/Completion/Linux/Command/_gpasswd b/Completion/Linux/Command/_gpasswd
index d5d16ebba..24fe361b0 100644
--- a/Completion/Linux/Command/_gpasswd
+++ b/Completion/Linux/Command/_gpasswd
@@ -5,7 +5,7 @@ _arguments -s \
   '(-d --delete -a --add)'{-d,--delete}'[remove user from group]: : _users' \
   '(-)'{-h,--help}'[display help]' \
   '(-Q --root)'{-Q,--root}'[specify directory to chroot into]: : _files -/' \
-  '(-r --delete-password)'{-r,--delete-password}'[remove the group password]' \
+  '(-r --remove-password)'{-r,--remove-password}'[remove the group password]' \
   '(-R --restrict)'{-R,--restrict}'[restrict access to GROUP to its members]' \
   '(-M --members -A --administrators)'{-M,--members}'[set the list of members of GROUP]: :_sequence _users' \
   '(-A --administrators -M --members)'{-A,--administrators}'[set the list of admins for GROUP]: :_sequence _users' \
diff --git a/Completion/Linux/Command/_htop b/Completion/Linux/Command/_htop
index e8d2fffb1..73a6ea9fa 100644
--- a/Completion/Linux/Command/_htop
+++ b/Completion/Linux/Command/_htop
@@ -19,6 +19,8 @@ args=(
   '(-)'{-h,--help}'[display usage information]'
   '(-H --highlight-changes)'{-H+,--highlight-changes=}'[highlight new and old processes (optionally specify delay)]::delay (seconds) (1-86400) [5]'
   '(-M --no-mouse)'{-M,--no-mouse}'[disable mouse]'
+  '--no-meters[hide meters]'
+  '(-n --max-iterations)'{-n+,--max-iterations=}'[exit after given number of frame updates]:number'
   \*{-p+,--pid=}'[show only specified PIDs]: : _sequence _pids'
   '--readonly[disable all system and process changing features]'
   '(-s --sort-key)'{-s+,--sort-key=}'[sort by specified column]: :->sort-keys'
@@ -48,7 +50,7 @@ case $state in
     tmp=( ${tmp//:/\\:} )
     tmp=( ${tmp/[[:space:]]##/:} )
     tmp=( ${tmp/(#m):[A-Z]/${(L)MATCH}} )
-    _describe -t sort-keys 'column (key)' tmp && ret=0
+    _describe -t sort-keys 'column' tmp -M 'b:=M_ b:=IO_' && ret=0
     ;;
 esac
 
diff --git a/Completion/Linux/Command/_losetup b/Completion/Linux/Command/_losetup
index affbc58f3..aab9adbcd 100644
--- a/Completion/Linux/Command/_losetup
+++ b/Completion/Linux/Command/_losetup
@@ -8,7 +8,7 @@ fi
 
 local device offset
 
-device='1:device:_files -g "/dev/loop<->"'
+device=':device:_files -g "/dev/loop<->"'
 offset=( {-o,--offset}'+[specify data start is offset]:offset (bytes)' )
 
 _arguments -s -S \
@@ -28,7 +28,8 @@ _arguments -s -S \
   {-c,--set-capacity}'[reread the size of the file associated with the loop device]' \
   - 'detach' \
   '(-)'{--detach,-d}'[detach from specified loop device]' \
-  "$device" \
+  '(-)--remove[remove one or more devices]:device' \
+  "*$device" \
   - '(detach-all)' \
   {-D,--detach-all}'[detach all associated loop devices]' \
   - 'create' \
diff --git a/Completion/Linux/Command/_lsblk b/Completion/Linux/Command/_lsblk
index c8b30eb5e..c2c67c9a6 100644
--- a/Completion/Linux/Command/_lsblk
+++ b/Completion/Linux/Command/_lsblk
@@ -13,16 +13,18 @@ _arguments -C -s -S \
   '(H)*--ct-filter=[restrict the next counter]:expression' \
   '(H)*--ct=[define a custom counter]:name\:param\:func' \
   '(H -a --all)'{-a,--all}'[print all devices]' \
-  '(H -b --bytes)'{-b,--bytes}'[print size in bytes rather than in human readable format]' \
+  '(H -b --bytes)'{-b,--bytes}'[print size in bytes instead of a human readable format]' \
   '(H -d --nodeps)'{-d,--nodeps}"[don't print slaves or holders]" \
   '(H -I --include)*'{-e,--exclude}'[exclude devices by major number]:major device number:->majorlist' \
   '(H -e --exclude)*'{-I+,--include=}'[show only devices with specified major numbers]:major device number:->majorlist' \
+  '(H)--hyperlink=-[print paths as hyperlinks]::when:(always never auto)' \
   '(H -n --noheadings -y --shell)'{-n,--noheadings}"[don't print headings]" \
   '(H -p --paths)'{-p,--paths}'[print complete device path]' \
   '(H -s --inverse)'{-s,--inverse}'[reverse dependency order]' \
   '(H -w --width)'{-w+,--width=}'[specify output width]:width' \
   '(H -x --sort)'{-x+,--sort=}'[sort output by specified column]:column:->columns' \
   '(H -y --shell -n --noheadings)'{-y,--shell}'[use column names usable as shell variable identifiers]' \
+  '--properties-by=[specify methods used to gather data]:method [file,udev,blkid]:_sequence compadd - udev blkid file none' \
   '(H)--sysroot=[use specified directory as system root]:directory:_directories' \
   '*:device:_files -g "*(-%b)" -P / -W /' \
   + fields \
diff --git a/Completion/Linux/Command/_modutils b/Completion/Linux/Command/_modutils
index f19784dff..4e87c4767 100644
--- a/Completion/Linux/Command/_modutils
+++ b/Completion/Linux/Command/_modutils
@@ -38,11 +38,15 @@ _modutils() {
   )
 
   case "$service" in
-    lsmod) _arguments -s "$args[@]" && return ;;
+    lsmod)
+      _arguments -s "$args[@]" \
+        '(-s --syslog)'{-s,--syslog}'[report via syslog instead of stderr]' \
+        '(-v --verbose)'{-v,--verbose}'[enable more messages]' && return
+    ;;
 
     modinfo)
       _arguments -s -C "$args[@]" \
-	'(-)'{-k+,--set-version=}'[use modules from a different kernel version]:kernel_version:($(echo $modules_dir/*(/\:t)))' \
+	'(-)'{-k+,--set-version=}'[use modules from a different kernel version]:kernel_version:compadd $modules_dir/*(/\:t)' \
 	{-b+,--basedir=}'[use specified directory as filesystem root]:path:_directories' \
 	'1:module file:->all-modules' \
 	+ '(field)' \
@@ -59,13 +63,14 @@ _modutils() {
       ign='-h --help -V --version -c --showconfig --show-config'
       _arguments -s -C "$args[@]" \
 	"(-a --all $ign)"{-a,--all}'[load all matching modules]' \
-	"(-n --show $ign)"{-n,--show}"[don't actually perform action]" \
 	"(-q --quiet $ign)"{-q,--quiet}"[don't complain about insmod failures]" \
 	"(-s --syslog $ign)"{-s,--syslog}'[report via syslog instead of stderr]' \
 	"(-v --verbose $ign)"{-v,--verbose}'[print all commands as executed]' \
 	'(-C --config)'{-C+,--config=}'[specify config file]:config file:_files' \
 	"(-r --remove -a --all $ign)"{-r,--remove}'[remove module (stacks)]' \
-	'--remove-dependencies[also remove modules depending on it]' \
+	'!--remove-dependencies' \
+        '--remove-holders[also remove module holders]' \
+        '(-w --wait)'{-w+,--wait=}"[wait for module's refcount to become 0 so it can be removed (with -r)]:delay (msecs)" \
 	'(* -R --resolve-alias)'{-R,--resolve-alias}'[only lookup and print alias and exit]' \
 	'--first-time[fail if module already inserted or removed]' \
 	"(-a --all $ign)"{'-i[ignore install/remove commands in config file]','--ignore-install[ignore install commands in config file]','--ignore-remove[ignore remove commands in config file]'} \
@@ -76,8 +81,8 @@ _modutils() {
 	'(-D --show-depends)'{-D,--show-depends}'[only print module dependencies and exit]' \
 	'(-)'{-c,--showconfig,--show-config}'[show current configuration]' \
 	--{show,dump}'-modversions[dump module symbol version and exit]' \
-	{-d+,--dirname=}'[use specified directory as filesystem root]:path:_directories' \
-	{-S+,--set-version=}'[use modules from a different kernel version]:kernel_version:($(echo $modules_dir/*(/\:t)))' \
+        '(-d --dirname)'{-d+,--dirname=}'[use specified directory as filesystem root]:path:_directories' \
+        '(-S --set-version)'{-S+,--set-version=}'[use modules from a different kernel version]:kernel_version:($(echo $modules_dir/*(/\:t)))' \
 	'--show-exports[only print module exported symbol versions and exit]' \
 	'(-n --dry-run --show)'{-n,--dry-run,--show}"[don't execute operations, just print]" \
 	"(-c $ign)1:modules:->loadable-modules" \
@@ -87,17 +92,20 @@ _modutils() {
     ;;
 
     rmmod)
-      _arguments -s -C "$args[@]" \
+      _arguments -s "$args[@]" \
 	'(-f --force)'{-f,--force}'[allow modules that are in use to be removed]' \
 	'(-s --syslog)'{-s,--syslog}'[send errors to syslog]' \
 	'(-v --verbose)'{-v,--verbose}'[be verbose]' \
-	'*:loaded module:->loaded-modules' && ret=0
+	'*:loaded module:->loaded-modules' && return
       ;;
 
     insmod)
-      _arguments "$args[@]" \
-	  '1:module file:_files' \
-	  '*:module parameters' && ret=0
+      _arguments -s "$args[@]" \
+        '(-f --force)'{-f,--force}'[forces a module load (dangerous)]' \
+        '(-s --syslog)'{-s,--syslog}'[report via syslog instead of stderr]' \
+        '(-v --verbose)'{-v,--verbose}'[enable more messages]' \
+        '1:module file:_files -g "*.ko(|.gz|.xz|.zst)(-.)"' \
+	'*:module option' && return
     ;;
   esac
 
diff --git a/Completion/Linux/Command/_ss b/Completion/Linux/Command/_ss
index 2a1cfcb78..ac21c3bcb 100644
--- a/Completion/Linux/Command/_ss
+++ b/Completion/Linux/Command/_ss
@@ -13,23 +13,29 @@ _arguments -C -s \
   "($info -r --resolve)"{-r,--resolve}'[resolve host addresses]' \
   "($info -a --all -l --listening)"{-a,--all}'[display all sockets]' \
   "($info -l --listening -a --all)"{-l,--listening}'[display listening sockets]' \
+  "($info -B --bound-inactive)"{-B,--bound-inactive}'[display TCP bound but inactive sockets]' \
   "($info -o --options -e --extended)"{-o,--options}'[show timer information]' \
   "($info -e --extended -o --options)"{-e,--extended}'[show detailed information]' \
   "($info -m --memory)"{-m,--memory}'[show socket memory usage]' \
   "($info -p --processes)"{-p,--processes}'[show process using each socket]' \
+  "($info -T --threads)"{-T,--threads}'[show thread using socket]' \
   "($info -i --info)"{-i,--info}'[show internal TCP information]' \
   "($info)--tipcinfo[show internal tipc socket information]" \
   "($info -s --summary)"{-s,--summary}'[print summary statistics]' \
   "($info)--tos[show tos and priority information]" \
+  "($info)--cgroup[show cgroup information]" \
   "($info -b --bpf)"{-b,--bpf}'[show bpf filter socket information]' \
+  "($info)--bpf-maps[show all BPF socket-local storage maps]" \
+  "($info)--bpf-map-id=[show a BPF socket-local storage map]:map ID" \
   "($info -E --events)"{-E,--events}'[continually display sockets as they are destroyed]' \
-  "($info -Z --context)"{-Z,--context}'[display process SELinux security contexts]' \
-  "($info -z --contexts)"{-z,--contexts}'[display process and socket SELinux security contexts]' \
+  "($info -Z --context)"{-Z,--context}'[display task SELinux security contexts]' \
+  "($info -z --contexts)"{-z,--contexts}'[display task and socket SELinux security contexts]' \
   "($info -N --net)"{-N,--net}'[switch to specified network namespace]:network namespace' \
   "($info -4 --ipv4 -6 --ipv6)"{-4,--ipv4}'[display only IP version 4 sockets]' \
   "($info -4 --ipv4 -6 --ipv6)"{-6,--ipv6}'[display only IP version 6 sockets]' \
   "($info -0 --packet)"{-0,--packet}'[display PACKET sockets]' \
   "($info -t --tcp)"{-t,--tcp}'[display TCP sockets]' \
+  "($info -M --mptcp)"{-M,--mptcp}'[display only MPTCP sockets]' \
   "($info -S --sctp)"{-S,--sctp}'[display SCTP sockets]' \
   "($info -u --udp)"{-u,--udp}'[display UDP sockets]' \
   "($info -d --dccp)"{-d,--dccp}'[display DCCP sockets]' \
@@ -41,7 +47,9 @@ _arguments -C -s \
   "($info -f --family)"{-f+,--family=}'[display sockets of specified type]:family:(inet inet6 link unix netlink vsock tipc xdp help)' \
   "($info -K --kill)"{-K,--kill}'[forcibly close sockets, display what was closed]' \
   "($info -H --no-header)"{-H,--no-header}'[suppress header line]' \
+  "($info -Q --no-queues)"{-Q,--no-queues}'[suppress sending and receiving queue columns]' \
   "($info -O --oneline)"{-O,--oneline}"[print socket's data on a single line]" \
+  "($info)--inet-sockopt[show various inet socket options]" \
   "($info -A --query --socket)"{-A+,--query=,--socket=}'[specify socket tables to show]: :_values -s , socket\ table all inet tcp udp raw unix packet netlink unix_dgram unix_stream unix_seqpacket packet_raw packet_dgram vsock_stream vsock_dgram tipc' \
   "($info -D)"{-D+,--diag=}'[dump raw info to file]:file:_files' \
   "($info -F)"{-F+,--filter=}'[read filter information from a file]:file:_files' \
diff --git a/Completion/Linux/Command/_strace b/Completion/Linux/Command/_strace
index 6f42c4ae0..149a1dddb 100644
--- a/Completion/Linux/Command/_strace
+++ b/Completion/Linux/Command/_strace
@@ -23,11 +23,13 @@ _arguments -C -s \
   '(-z -Z --successful-only --failed-only)'{-z,--successful-only}'[trace only system calls that return success]' \
   '(-z -Z --successful-only --failed-only)'{-Z,--failed-only}'[trace only system calls that return an error]' \
   '(-a --columns)'{-a+,--columns=}'[align return values in a specific column]:column number [40]' \
+  '--color=[control use of color]:color [auto]:(never always auto)' \
   '(-i --instruction-pointer -c --summary-only)'{-i,--instruction-pointer}'[print instruction pointer at time of syscall]' \
   '(-c --summary-only)*-k[obtain stack trace between each syscall]' \
   '(-c --summary-only -k)--stack-trace=-[obtain stack trace between each syscall]::symbol' \
   '(-c --summary-only)--stack-trace-frame-limit=[specify limit on stack trace frames to print]:frames [256]' \
   '(-n --syscall-number)'{-n,--syscall-number}'[print syscall number]' \
+  '(-N --arg-names)'{-N,--arg-names}'[print syscall argument names]' \
   '(-o --output)'{-o+,--output=}'[send trace output to the specified file]:output file:->file-pipe' \
   '(-A --output-append-mode)'{-A,--output-append-mode}'[open the file provided with the -o option in append mode]' \
   '--output-separately[output to separate files for child processes (by appending pid to file names)]' \
@@ -95,6 +97,7 @@ case $state in
       'status[trace system calls with given return status]:status:->status' \
       'quiet[suppress various information messages]:message [none]:_sequence compadd - none attach exit path-resolution personality thread-execve superseded' \
       'kvm[print the exit reason of kvm vcpu]: :(vcpu)' \
+      'namespace=new[print namespace IDs that the tracee enters]' \
       'decode-fds[print information associated with file descriptors]:information [none]:_sequence compadd - none all path socket dev eventfd pidfd signalfd' \
       'secontext' \
       'decode-pids[print information associated with process IDs]:information [none]:_sequence compadd - none comm pidns' && ret=0
diff --git a/Completion/Linux/Command/_tracepath b/Completion/Linux/Command/_tracepath
index f0f777d96..68a3d6ee6 100644
--- a/Completion/Linux/Command/_tracepath
+++ b/Completion/Linux/Command/_tracepath
@@ -1,9 +1,12 @@
 #compdef tracepath tracepath6
 
 _arguments -s -S \
+  '(-6)-4[use IPv4]' \
+  '(-4)-6[use IPv6]' \
   '-n[print IP addresses numerically]' \
   '-b[print both host names and IP addresses]' \
   '-l+[set the initial packet length]:length (bytes)' \
   '-m+[set maximum hops]:maximum [30]' \
   '-p+[set initial destination port to use]:port:_ports' \
+  '-V[display version information]' \
   ':destination:_hosts'
diff --git a/Completion/Unix/Command/_cat b/Completion/Unix/Command/_cat
index 78c35653c..f71d77e2e 100644
--- a/Completion/Unix/Command/_cat
+++ b/Completion/Unix/Command/_cat
@@ -1,65 +1,74 @@
 #compdef cat gcat
 
+local ign
 local -a args
 
 if _pick_variant gnu='(GNU|uutils)' unix --version; then
+  (( $#words > 2 )) && ign='!(- : *)'
   args=(
     '(-A --show-all)'{-A,--show-all}'[equivalent to -vET]'
     '(-b --number-nonblank -n --number)'{-b,--number-nonblank}'[number nonempty output lines, overrides -n]'
     '-e[equivalent to -vE]'
-    '(-E --show-ends)'{-E,--show-ends}'[display $ at end of each line]'
+    '(-E --show-ends)'{-E,--show-ends}'[display $ or ^M$ at end of each line]'
     '(-n --number)'{-n,--number}'[number all output lines]'
     '(-s --squeeze-blank)'{-s,--squeeze-blank}'[suppress repeated empty output lines]'
     '-t[equivalent to -vT]'
     '(-T --show-tabs)'{-T,--show-tabs}'[display TAB characters as ^I]'
     '-u[ignored]'
     '(-v --show-nonprinting)'{-v,--show-nonprinting}'[use ^ and M- notation, except for LFD and TAB]'
-    '(- : *)--help[display help and exit]'
-    '(- : *)--version[output version information and exit]'
-    '*: :_files'
-  )
-
-elif [[ "$OSTYPE" == (*bsd|dragonfly|darwin)* ]]; then
-  args=(
-    -A "-*"
-    '(-n)-b[number non-blank output lines]'
-    '(-v)-e[display $ at the end of each line (implies -v)]'
-    '-n[number all output lines]'
-    '-s[squeeze multiple blank lines into one]'
-    '(-v)-t[display tab as ^I (implies -v)]'
-    '-u[do not buffer output]'
-    '-v[display non-printing chars as ^X or M-a]'
-    '*: :_files'
-  )
-  [[ $OSTYPE = (free|net)bsd* ]] && args+=(
-    '-l[set a lock on the stdout file descriptor]'
-  )
-  [[ $OSTYPE = netbsd* ]] && args+=(
-    '-B+[read with buffer of specified size]:size (bytes)'
-    '-f[only attempt to display regular files]'
-  )
-  [[ $OSTYPE = darwin* ]] && args+=(
-    '-l[set an exclusive advisory lock on standard output]'
-  )
-elif [[ $OSTYPE = solaris* ]]; then
-  args=(
-    -A "-*"
-    '(-b)-n[number all output lines]'
-    '(-n)-b[number non-blank output lines]'
-    "-u[don't buffer output]"
-    '-s[be silent about non-existent files]'
-    '-v[display non-printing chars as ^X or M-a]'
-    '-e[display $ at the end of each line (requires -v)]'
-    '-t[display tab as ^I and formfeeds and ^L (requires -v)]'
+    "$ign--help[display help and exit]"
+    "$ign--version[display version information]"
     '*: :_files'
   )
 else
-  # POSIX requires '-u', and most OSes may support '-n'
-  args=(
+  # POSIX requires just '-u'
+  args=( -A "-?*"
+    '(-n)-b[number non-blank output lines]'
+    '(-v)-e[display $ at the end of each line (implies -v)]'
+    '-v[display non-printing chars as ^X or M-a]'
     '-n[number all output lines]'
-    '-u[do not buffer output]'
+    "-u[don't buffer output]"
     '*: :_files'
   )
+  case $OSTYPE in
+    (*bsd|dragonfly|darwin)*)
+      args+=(
+        '-s[squeeze multiple blank lines into one]'
+        '(-v)-t[display tab as ^I (implies -v)]'
+        '-v[display non-printing chars as ^X or M-a]'
+      )
+    ;|
+    (free|net)bsd*)
+      args+=(
+        '-l[set a lock on the stdout file descriptor]'
+      )
+    ;|
+    aix*|solaris*)
+      args+=(
+        '(-q)-s[be silent about non-existent files]'
+        '-t[display tab as ^I and formfeeds and ^L (requires -v)]'
+      )
+    ;|
+
+    aix*)
+      args+=(
+        '(-s)-q[be silent about non-existent files]'
+        '(-r -S)'{-r,-S}'[condense consecutive blank lines to one line]'
+        '-Z[dump encrypted files in encrypted format]'
+      )
+    ;;
+    netbsd*)
+      args+=(
+        '-B+[read with buffer of specified size]:size (bytes)'
+        '-f[only attempt to display regular files]'
+      )
+    ;;
+    darwin*)
+      args+=(
+        '-l[set an exclusive advisory lock on standard output]'
+      )
+    ;;
+  esac
 fi
 
 _arguments -s -S $args
diff --git a/Completion/Unix/Command/_column b/Completion/Unix/Command/_column
index 737bb4561..aa3a3664a 100644
--- a/Completion/Unix/Command/_column
+++ b/Completion/Unix/Command/_column
@@ -34,8 +34,9 @@ case $variant in
       + table
       '(info fill -t --table)'{-t,--table}'[create a table]'
       '(info fill -o --output-separator)'{-o+,--output-separator=}'[specify column separator for table output]:separator [two spaces]'
-      '(info fill -s --separator)'{-s+,--separator=}'[specify column delimiters in input data]:delimiters'
+      '(info fill -s --input-separator --separator)'{-s+,--input-separator=,--separator=}'[specify column delimiters in input data]:delimiters'
       '(info fill -O --table-order)'{-O+,--table-order=}'[specify order of output columns]: :->columns'
+      '(info)--table-colorscheme=[specify color scheme name]:name [column]'
       '(info fill -N --table-columns)*'{-C+,--table-column=}'[specify column properties]: :_values -s, -S= property
         "name[column name]\:name"
         "trunc[truncate text in the columns when necessary]"
@@ -54,13 +55,16 @@ case $variant in
       '(info fill json -d --table-noheadings)'{-d,--table-noheadings}"[don't print header]"
       '(info fill json -E --table-noextreme)'{-E+,--table-noextreme}"[specify columns where length can be ignored]: :->columns"
       '(info fill json -e --table-header-repeat)'{-e,--table-header-repeat}'[repeat header for each page]'
+      '(info fill json -K --table-header-as-columns)'{-K,--table-header-as-columns}'[use first row as table header]'
       '(info fill json -H --table-hide)'{-H+,--table-hide=}"[don't print specified columns]: :->columns"
       '(info fill json -R --table-right)'{-R+,--table-right=}'[right align text in these columns]: :->columns'
       '(info fill json -T --table-truncate)'{-T+,--table-truncate=}'[truncate text in the columns when necessary]: :->columns'
       '(info fill json -W --table-wrap)'{-W+,--table-wrap=}'[wrap text in the columns when necessary]: :->columns'
+      '(info fill json)--wrap-separator=[wrap at specified separator]:string'
       '(info fill json -r --tree)'{-r+,--tree=}'[specify column to format tree-like]: :->columns'
       '(info fill json -i --tree-id)'{-i+,--tree-id=}'[specify column containing ID for child-parent relations]: :->columns'
       '(info fill json -p --tree-parent)'{-p+,--tree-parent=}'[specify column containing reference to parent]: :->columns'
+      '(info table json -S --use-spaces)'{-S+,--use-spaces=}'[minimal whitespace between columns (no tabs)]:spaces'
       + json
       '(info fill text -n --table-name -c --output-width)'{-n+,--table-name=}'[specify table name for JSON output]:name'
       '(info fill text -J --json -c --output-width)'{-J,--json}'[use JSON output format for table]'
diff --git a/Completion/Unix/Command/_drill b/Completion/Unix/Command/_drill
index 68fa7917b..6ce634874 100644
--- a/Completion/Unix/Command/_drill
+++ b/Completion/Unix/Command/_drill
@@ -20,7 +20,7 @@ _arguments -s -S -C \
   '(-4)-6[stay on ipv6]' \
   '-a[fallback to EDNS0 and TCP if the answer is truncated]' \
   '-b+[specify buffer size (defaults to 512 b)]:size (bytes) [512]' \
-  '-c+[use specified file for rescursive nameserver configuration]:file [/etc/resolv.conf]:_files' \
+  '-c+[use specified file for recursive nameserver configuration]:file [/etc/resolv.conf]:_files' \
   '-k+[specify a file that contains a trusted DNSSEC key]:file:_files' \
   '*-o+[set/unset header bits]:mnemonic (uppercase sets, lower unsets):_sequence compadd - QR qr AA aa TC tc RD rd CD cd RA ra AD ad' \
   '-p+[use specified remote port number]:port:_ports' \
diff --git a/Completion/Unix/Command/_du b/Completion/Unix/Command/_du
index 038811eb8..be2cbdfce 100644
--- a/Completion/Unix/Command/_du
+++ b/Completion/Unix/Command/_du
@@ -5,7 +5,7 @@ if _pick_variant gnu='(Free Soft|uutils)' unix --version /dummy/no-such-file; th
 
   _arguments -s \
     '(-a --all -s --summarize)'{-a,--all}'[write counts for all files]' \
-    '--apparent-size[print apparent sizes rather than disc usage]' \
+    '(-A --apparent-size)'{-A,--apparent-size}'[print apparent sizes rather than disc usage]' \
     '(-B --block-size -k)'{-B+,--block-size=}'[specify block size]:size (bytes)' \
     '(-B --block-size -k --apparent-size -b --bytes)'{-b,--bytes}'[equivalent to --apparent-size --block-size=1]' \
     '(-c --total)'{-c,--total}'[produce a grand total]' \
@@ -56,22 +56,22 @@ else
   local xdev='[skip directories on different filesystems]'
   for pattern arg in \
     '(freebsd|darwin)*' '-A[apparent size instead of usage]' \
-    '(darwin*|*bsd*|dragonfly*|solaris2.<10->)' '(-H -L -P)-H[follow symlinks on the command line]' \
+    '(aix*|darwin*|*bsd*|dragonfly*|solaris2.<10->)' '(-H -L -P)-H[follow symlinks on the command line]' \
     '(darwin|*bsd|dragonfly)*' '(-H -L -P)-P[do not follow symlinks (default)]' \
     '(darwin|dragonfly|freebsd)*' '*-I+[ignore files/directories matching specified mask]:mask' \
     '(darwin|*bsd|dragonfly)*' '(-a -s -d)-d+[display entry for directories up to specified depth]:depth' \
     '(darwin*|*bsd*|dragonfly*|solaris2.<10->)' '(-k -m -g -B)-h[human readable output]' \
     'netbsd*' '-i[output inode usage instead of blocks]' \
-    '(darwin*|freebsd*|netbsd*|solaris2.<11->)' '(-h -k -g -B)-m[use block size of 1M-byte]' \
-    '(darwin|freebsd<8->.|netbsd)*' '(-h -k -m -B)-g[use block size of 1G-byte]' \
+    '(aix*|darwin*|freebsd*|netbsd*|solaris2.<11->)' '(-h -k -g -B)-m[use block size of 1M-byte]' \
+    '(aix|darwin|freebsd<8->.|netbsd)*' '(-h -k -m -B)-g[use block size of 1G-byte]' \
     '(freebsd|darwin)*' '(-h -k -m -g)-B+[block size]:block size (bytes)' \
     '(darwin|*bsd|dragonfly)*' '-c[display grand total]' \
-    '(freebsd|darwin)*' '-l[count sizes many times if hard linked]' \
+    '(aix|freebsd|darwin)*' '-l[count sizes many times if hard linked]' \
     '(freebsd|netbsd)*' '-n[ignore files and directories with nodump flag set]' \
     'solaris*' "(-a)-o[don't add child directories' usage to parent's total]" \
     '(freebsd|darwin)*' '-t+[report only entries for which size exceeds threshold]:threshold' \
     'solaris*' "-d$xdev" \
-    '(darwin|*bsd|dragonfly|solaris)*' "-x$xdev"
+    '(aix|darwin|*bsd|dragonfly|solaris)*' "-x$xdev"
   do
     [[ $OSTYPE = $~pattern ]] && args+=( $arg )
   done
diff --git a/Completion/Unix/Command/_entr b/Completion/Unix/Command/_entr
index 4fb984af2..ebd66ab72 100644
--- a/Completion/Unix/Command/_entr
+++ b/Completion/Unix/Command/_entr
@@ -13,6 +13,7 @@ _arguments -s -S \
   '(*)-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]' \
+  '(- *)-h[display usage information]' \
   '(-): :->command' \
   '*::arguments:_normal' && ret=0
 
diff --git a/Completion/Unix/Command/_find b/Completion/Unix/Command/_find
index 8628ad43e..2afb46e34 100644
--- a/Completion/Unix/Command/_find
+++ b/Completion/Unix/Command/_find
@@ -12,17 +12,21 @@ case $variant in
       '*-local'
     )
   ;|
-  solaris*|darwin*)
+  solaris*|darwin*|freebsd<15->.*)
     args+=( '*-xattr' )
   ;|
   solaris2.<10->|freebsd*|darwin*)
     args+=( '*-acl' )
   ;|
-  solaris2.<11->|freebsd*|dragonfly*|darwin*|openbsd*|gnu)
+  aix*|solaris2.<11->|freebsd*|dragonfly*|darwin*|openbsd*|gnu)
     args+=(
       '*-amin:access time (minutes)'
       '*-cmin:inode change time (minutes)'
       '*-mmin:modification time (minutes)'
+    )
+  ;|
+  solaris2.<11->|freebsd*|dragonfly*|darwin*|openbsd*|gnu)
+    args+=(
       '*-iname:name pattern to match (case insensitive)'
       '*-print0'
     )
@@ -36,7 +40,7 @@ case $variant in
   darwin*|freebsd*|gnu)
     args+=(
       '*-Bmin:birth time (minutes)'
-      '*-Bnewer:file to compare (birth time):_files'
+      '!*-Bnewer:reference file:_files'
       '*-newer'{a,B,c,m}{a,B,c,m}'[if [aBcm\]time is newer than [aBcm\]time of given file]:reference file:_files'
       '*-newerat[if access time is newer than given timestamp]:timestamp: '
       '*-newerBt[if birth time is newer than given timestamp]:timestamp: '
@@ -98,7 +102,7 @@ case $variant in
     )
   ;|
   freebsd*|dragonfly*) args+=( '*-sparse' ) ;|
-  darwin*) args+=( '*-xattrname:name' ) ;|
+  darwin*|freebsd<15->.*) args+=( '*-xattrname:name' ) ;|
   gnu)
     args+=(
       '(- *)-help' '(-)--help'
diff --git a/Completion/Unix/Command/_flac b/Completion/Unix/Command/_flac
index 0197aaf92..d7f3e801c 100644
--- a/Completion/Unix/Command/_flac
+++ b/Completion/Unix/Command/_flac
@@ -67,7 +67,6 @@ case $service in
       - 'H' \
       '(-)'{-v,--version}'[display version information]' \
       '(-)'{-h,--help}'[display help information]' \
-      '(-)'{-H,--explain}'[display detailed explanation of usage and options]' \
       - encode \
       '(-V --verify)'{-V,--verify}'[verify a correct encoding]' \
       --lax --ignore-chunk-sizes '!--sector-align' --replay-gain \
@@ -88,6 +87,7 @@ case $service in
       '(-p --qlp-coeff-precision-search -q --qlp-coeff-precision)'{-q,--qlp-coeff-precision=}'[specify precision]:precision (bits)' \
       '(-r --rice-partition-order)'{-r,--rice-partition-order=}'[set min/max residual partition order]:order' \
       "--limit-min-bitrate[don't allow frames consisting of only constant subframes]" \
+      '(-j --threads)'{-j+,--threads=}'[set number of encoding threads]:threads' \
       '--endian=:byte order:(big little)' \
       '--channels=:channels' \
       '--bps=:bits per sample' \
@@ -102,6 +102,7 @@ case $service in
       '(-F --decode-through-errors)'{-F,--decode-through-errors}'[continue decoding through stream errors]' \
       '--apply-replaygain-which-is-not-lossless=:specification' \
       '--cue=[set the beginning and ending cuepoints to decode]:cue point' \
+      '--decode-chained-stream[decode all links in a chained Ogg stream, not just the first one]' \
       '(--force-raw-format --force-rf64-format --force-wave64-format --force-legacy-wave-format --force-extensible-wave-format --force-aiff-c-none-format --force-aiff-c-sowt-format)--force-aiff-format' \
       '(--force-raw-format --force-aiff-format --force-wave64-format --force-legacy-wave-format --force-extensible-wave-format --force-aiff-c-none-format --force-aiff-c-sowt-format)--force-rf64-format' \
       '(--force-raw-format --force-aiff-format --force-rf64-format --force-legacy-wave-format --force-extensible-wave-format --force-aiff-c-none-format --force-aiff-c-sowt-format)--force-wave64-format' \
@@ -112,6 +113,7 @@ case $service in
   ;;
   metaflac)
     _arguments -S $shared \
+      '(-o --output-name)'{-o+,--output-name=}'[write changes to a new file]:file:_files' \
       '(--no-filename)--with-filename[prefix output with filename]' \
       '(--with-filename)--no-filename' \
       '--dont-use-padding[always rewrite the file]' \
diff --git a/Completion/Unix/Command/_fuser b/Completion/Unix/Command/_fuser
index 05de1c529..90124ea30 100644
--- a/Completion/Unix/Command/_fuser
+++ b/Completion/Unix/Command/_fuser
@@ -69,9 +69,12 @@ case $variant in
     args+=(
       '-n[list only processes with non-blocking mandatory locks]'
     )
-  ;;
+  ;|
   solaris2.<10->)
     args+=( '-d[report device usage for all minor nodes bound to same device]' )
+  ;|
+  solaris2.<11->)
+    args+=( "-l[don't resolve symlinks to target file]" )
   ;;
   sysv4 )
     (( $+words[(r)-k] )) && argf=( ':name: _alternative signals\:signal\:_signals\ -p files:file:_files' )
diff --git a/Completion/Unix/Command/_gcc b/Completion/Unix/Command/_gcc
index 03c3eb2f2..1f05edb73 100644
--- a/Completion/Unix/Command/_gcc
+++ b/Completion/Unix/Command/_gcc
@@ -337,7 +337,7 @@ i[3456]86|x86_64)
     '-mstack-arg-probe[enable stack probing]'
     '-mstack-protector-guard=-[use given stack-protector guard]:guard:(global tls)'
     '-mstackrealign[realign stack in prologue]'
-    '-mstringop-strategy=-[chose strategy to generate stringop using]:stringop strategy:(byte_loop libcall loop rep_4byte rep_8byte rep_byte unrolled_loop)'
+    '-mstringop-strategy=-[choose strategy to generate stringop using]:stringop strategy:(byte_loop libcall loop rep_4byte rep_8byte rep_byte unrolled_loop)'
     '-mstv[disable Scalar to Vector optimization pass transforming 64-bit integer computations into a vector ones]'
     '-mtbm[support TBM built-in functions and code generation]'
     '-mthreads[support thread-safe exception handling on MinGW]'
@@ -1837,6 +1837,8 @@ args+=(
   '-fno-stack-limit[do not limit the size of the stack]'
   '-fno-threadsafe-statics[do not generate thread-safe code for initializing local statics]'
   '-fnothrow-opt[treat a throw() exception specification as noexcept to improve code size]'
+  '-foffload=[specify offloading targets]:target list'
+  '-foffload-options=:option list'
   '-fomit-frame-pointer[when possible do not generate stack frames]'
   '-fopenacc[enable OpenACC]'
   '-fopenmp[enable OpenMP (implies -frecursive in Fortran)]'
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index cbf577680..2b37ffa50 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -207,7 +207,8 @@ _git-archive () {
 _git-backfill() {
   _arguments -S \
     '--min-batch-size=[specify minimum number of objects to request at a time]:number of objects' \
-    '--sparse[only download objects at a path matching current sparse-checkout]'
+    '--sparse[only download objects at a path matching current sparse-checkout]' \
+    '--no-include-edges[exclude blobs from boundary commits in the backfill]'
 }
 
 (( $+functions[_git-bisect] )) ||
@@ -557,7 +558,7 @@ _git-checkout () {
 
       elif [[ -n ${opt_args[(I)-b|-B|-t|--track|--orphan|--detach]} ]]; then
         _nothing
-      elif [[ -n $line[1] ]] && __git_is_treeish ${(Q)line[1]}; then
+      elif [[ -n $line[1] && $line[1] != (@|HEAD) ]] && __git_is_treeish ${(Q)line[1]}; then
         __git_ignore_line __git_tree_files ${PREFIX:-.} ${(Q)line[1]} && ret=0
       else
         __git_ignore_line __git_modified_files && ret=0
@@ -698,7 +699,7 @@ _git-clone () {
     '(--single-branch)--no-single-branch[clone history leading up to each branch]' \
     "--no-tags[don't clone any tags and make later fetches not follow them]" \
     '--shallow-submodules[any cloned submodules will be shallow]' \
-    '(--recursive --recurse-submodules)'{--recursive,--recurse-submodules}'=-[initialize submodules in the clone]::file:__git_files' \
+    '(--recursive --recurse-submodules)'{--recursive,--recurse-submodules}'=-[initialize submodules in the clone]::file:_files' \
     '--separate-git-dir[place .git dir outside worktree]:path to .git dir:_path_files -/' \
     '--ref-format=[specify reference format to use]:format:(files reftable)' \
     \*--server-option='[send specified string to the server when using protocol version 2]:option' \
@@ -2008,7 +2009,7 @@ _git-sparse-checkout() {
 _git-stash () {
   local curcontext=$curcontext state line ret=1
   declare -A opt_args
-  local -a save_arguments
+  local -a save_arguments args
 
   save_arguments=(
     '(-p --patch -a --all -u --include-untracked)'{-p,--patch}'[interactively select hunks from diff between HEAD and working tree to stash]'
@@ -2085,8 +2086,9 @@ _git-stash () {
             '(-u --include-untracked)--only-untracked[show only the untracked files in the stash entry as part of the diff]' \
             ':: :__git_stashes' && ret=0
           ;;
-        (pop|apply)
-          _arguments -S $endopt \
+        apply) args=( '--label-'{ours,theirs,base}'=:label' ) ;&
+        pop)
+          _arguments -S $endopt $args \
             '--index[try to reinstate the changes added to the index as well]' \
             '(-q --quiet)'{-q,--quiet}'[suppress all output]' \
             ':: :__git_stashes' && ret=0
@@ -4427,7 +4429,8 @@ _git-repack () {
     '--pack-kept-objects[repack objects in packs marked with .keep]' \
     '--keep-pack=[ignore named pack]:pack' \
     '(-g --geometric)'{-g+,--geometric=}'[find a geometric progression with specified factor]:factor' \
-    '(-m --write-midx)'{-m,--write-midx}'[write a multi-pack index of the resulting packs]' \
+    '(--write-midx)-m[write a multi-pack index of the resulting packs]' \
+    '(-m)--write-midx=-[write a multi-pack index of the resulting packs]:mode:(default incremental)' \
     '--expire-to=[pack prefix to store a pack containing pruned objects]:directory:_directories' \
     '--filter-to=[pack prefix to store a pack containing filtered out objects]:directory:_directories'
 }
@@ -4586,11 +4589,34 @@ _git-fsck () {
     '*: :__git_objects'
 }
 
+(( $+functions[_git-format-rev] )) ||
+_git-format-rev() {
+  _arguments -S $endopt \
+    '--format=[specify format]:format:__git_format_placeholders' \
+    '--stdin-mode=[specify stdin mode]:mode:(revs text)' \
+    '--notes=[display notes for pretty format]:reference' \
+    '(-z --null --null-input --null-output)'{-z,--null}'[use NUL for input and output termination]' \
+    '(-z --null)--null-input[use NUL for input termination]' \
+    '(-z --null)--null-output[use NUL for output termination]'
+}
+
 (( $+functions[_git-get-tar-commit-id] )) ||
 _git-get-tar-commit-id () {
   _message 'no arguments allowed; accepts tar-file on standard input'
 }
 
+(( $+functions[_git-last-modified] )) ||
+_git-last-modified() {
+  _arguments -s \
+    '(-r --recursive)'{-r,--recursive}'[recurse into subtrees]' \
+    '(-t --show-trees)'{-t,--show-trees}'[show tree entries when recursing into subtrees]' \
+    '--max-depth=[specify maximum tree depth to recurse]:depth [0]' \
+    '-z[separate lines with NUL character]' \
+    '1: :__git_commit_ranges' \
+    \!--{,end-of-options}':*: :__git_tree_files ${PREFIX:-.} HEAD' \
+    '*: :__git_tree_files ${PREFIX:-.} $line[1]'
+}
+
 (( $+functions[_git-help] )) ||
 _git-help () {
   _arguments -S -s \
@@ -5499,7 +5525,7 @@ _git-mktree () {
 
 (( $+functions[_git-multi-pack-index] )) ||
 _git-multi-pack-index() {
-  _arguments \
+  _arguments -S \
     '--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' \
@@ -5508,7 +5534,11 @@ _git-multi-pack-index() {
     '--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 compact verify expire repack)'
+    "--write-chain-file[write new MIDX layer but don't update multi-pack-index-chain file]" \
+    '--base=[specify checksum of MIDX layer to use as base]:checksum' \
+    '1:verb:(write compact verify expire repack)' \
+    '2:from (checksum)' \
+    '3:to (checksum)'
 }
 
 (( $+functions[_git-pack-objects] )) ||
@@ -6426,6 +6456,7 @@ _git-hook() {
     '--allow-unknown-hook-name' \
     '-z[terminate output lines with NUL instead of newlines]' \
     '--show-scope[prefix each hook name with a config scope]' \
+    '(-j --jobs)'{-j+,--jobs=}'[allow specified number of simultaneous hooks]:jobs' \
     '1:subcommand:(run list)' \
     '2:hook name:compadd $gitdir/hooks/*(x\:t)'
 }
@@ -6483,6 +6514,13 @@ _git-stripspace () {
     '(-c --comment-lines -s --strip-comments)'{-c,--comment-lines}'[prepend comment character and blank to each line]'
 }
 
+(( $+functions[_git-url-parse] )) ||
+_git-url-parse() {
+  _arguments -S $endopt \
+    '(-c --component)'{-c+,--component=}'[specific URL component]:component:(scheme user password host port path)' \
+    '*: :_guard "^-*" url'
+}
+
 # INTERNAL GIT COMPLETION FUNCTIONS
 
 # Generic Helpers
@@ -6769,13 +6807,16 @@ _git_commands () {
     diff-tree:'compare content and mode of blobs found via two tree objects'
     for-each-ref:'output information on each ref'
     for-each-repo:'run a git command on a list of repositories'
+    format-rev:'pretty format revisions from stdin'
     get-tar-commit-id:'extract commit ID from an archive created using git archive'
+    last-modified:'show when files were last modified'
     ls-files:'information about files in index/working directory'
     ls-remote:'show references in a remote repository'
     ls-tree:'list contents of a tree object'
     merge-base:'find as good a common ancestor as possible for a merge'
     name-rev:'find symbolic names for given revisions'
     pack-redundant:'find redundant pack files'
+    repo:'retrieve information about repository'
     rev-list:'list commit object in reverse chronological order'
     rev-parse:'pick out and massage parameters for other git commands'
     show-index:'show packed archive index'
@@ -6811,8 +6852,10 @@ _git_commands () {
     mailinfo:'extract patch and authorship from a single email message'
     mailsplit:'split mbox file into a list of files'
     merge-one-file:'standard helper-program to use with git merge-index'
-    patch-id:'compute unique ID for a patch'
-    stripspace:'filter out empty lines')
+    patch-id:'compute unique ID for patches'
+    stripspace:'filter out empty lines'
+    url-parse:'parse and extract git URL components'
+  )
 
   zstyle -a :completion:$curcontext: user-commands user_commands
 
@@ -8714,11 +8757,13 @@ __git_setup_fetch_options () {
     '(-q --quiet)--progress[force progress reporting]'
     '--show-forced-updates[check for forced-updates on all updated branches]'
     '--set-upstream[set upstream for git pull/fetch]'
-    '--shallow-since=[deepen history of shallow repository based on time]:time' \
-    '*--shallow-exclude=[deepen history of shallow clone by excluding ref]:reference' \
-    '--deepen[deepen history of shallow clone]:number of commits' \
+    '--shallow-since=[deepen history of shallow repository based on time]:time'
+    '*--shallow-exclude=[deepen history of shallow clone by excluding ref]:reference'
+    '--deepen[deepen history of shallow clone]:number of commits'
     \*{-o+,--server-option=}'[send specified string to the server when using protocol version 2]:option'
-    '--negotiation-tip=[only report refs reachable from specified object to the server]:commit:__git_commits' \
+    '--negotiation-restrict=[only report refs reachable from specified object to the server]:commit:__git_commits'
+    '!--negotiation-tip=:commit:__git_commits'
+    '--negotiation-include=[report given commit as "have" in negotiation]:commit:__git_commits'
   )
 }
 
diff --git a/Completion/Unix/Command/_gnutls b/Completion/Unix/Command/_gnutls
index 4c1698857..c62269afc 100644
--- a/Completion/Unix/Command/_gnutls
+++ b/Completion/Unix/Command/_gnutls
@@ -182,7 +182,8 @@ case "$service" in
       '--cprint[prints certain information is C-friendly format]'
       '--null-password[enforce a NULL password]'
       '--empty-password[enforce an empty password]'
-      '--key-type=[specify the key type to use on key generation]:key type'
+      '--key-type=[specify key type to use on key generation]:key type'
+      '--key-format=[specify key format to use on key generation]:key format:(seed expanded both)'
       '(-i --certificate-info)'{-i,--certificate-info}'[print information on a certificate]'
       '(-l --crl-info)'{-l,--crl-info}'[print information on a CRL]'
       '--crq-info[print information on a certificate request]'
diff --git a/Completion/Unix/Command/_gpg b/Completion/Unix/Command/_gpg
index ea0a452f2..d704af92f 100644
--- a/Completion/Unix/Command/_gpg
+++ b/Completion/Unix/Command/_gpg
@@ -95,7 +95,6 @@ fi
   '(--encrypt-to)--no-encrypt-to[disable the use of all --encrypt-to keys]'
   '--group[set up email aliases]:spec'
   '-z[specify compression level]:compression level:((0\:no\ compression 1\:minimum 2 3 4 5 6\:default 7 8 9\:maximum))'
-  '(-t --textmode)'{-t,--textmode}'[use canonical text mode]'
   '(-n --dry-run)'{-n,--dry-run}"[don't make any changes]"
   '(-i --interactive --batch)'{-i,--interactive}'[prompt before overwriting files]'
   '(-i --interactive --no-batch)--batch[use batch mode]'
diff --git a/Completion/Unix/Command/_gphoto2 b/Completion/Unix/Command/_gphoto2
index df17aa111..4ff5ce1c1 100644
--- a/Completion/Unix/Command/_gphoto2
+++ b/Completion/Unix/Command/_gphoto2
@@ -72,6 +72,8 @@ _arguments -s -C \
   '--get-all-raw-data[get all raw data from folder]' \
   '--get-audio-data=[get audio data given in range]:range' \
   '--get-all-audio-data[get all audio data from folder]' \
+  '--get-exif=[get files in given range]:range' \
+  '--get-all-exif[get all files from folder]' \
   '(-d --delete-file)'{-d,--delete-file=}'[delete files in given range]:range' \
   '(-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' \
@@ -80,6 +82,7 @@ _arguments -s -C \
   '(-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)]' \
+  '--reverse[reverse order of file operations]' \
   '--new[process new files only]' \
   '--force-overwrite[overwrite files without asking]' \
   '--skip-existing[skip files that already exist on local filesystem]' && ret=0
diff --git a/Completion/Unix/Command/_hardlink b/Completion/Unix/Command/_hardlink
new file mode 100644
index 000000000..8a62779aa
--- /dev/null
+++ b/Completion/Unix/Command/_hardlink
@@ -0,0 +1,43 @@
+#compdef hardlink
+
+local ign
+local -a args
+
+(( $#words > 2 )) && ign='!(- *)'
+
+if _pick_variant linux=util-linux jak -V; then
+  args=(
+    '(-c --content -p --ignore-mode -o --ignore-owner -t --ignore-time)'{-c,--content}'[compare only file contents, same as -pot]'
+    '(-b --io-size)'{-b+,--io-size=}'[specify I/O buffer size for file reading]: :_numbers "IO buffer size" K M G T P'
+    '(-d --respect-dir)'{-d,--respect-dir}'[directory names have to be identical]'
+    '(-F --prioritize-trees)'{-F,--prioritize-trees}'[keep files found in the earliest specified top-level]'
+    '(-l --list-duplicates)'{-l,--list-duplicates}"[just list paths of duplicates, don't link them]"
+    '--mount[stay within the same filesystem]'
+    '(-q --quiet)'{-q,--quiet}"[quiet mode - don't print anything]"
+    '(-r --cache-size)'{-r+,--cache-size=}'[specify memory limit for cached file content data]: :_numbers size K M G T P'
+    '(--skip-reflinks)--reflink=-[create clone/CoW copies]::when [auto]:(auto always never)'
+    '--skip-reflinks[skip already cloned files]'
+    '(-S --maximum-size)'{-S+,--maximum-size=}'[specify maximum size for files]: :_numbers -u bytes -d 0 size K M G T P E Z Y'
+    '--exclude-subtree[specify regular expression to exclude directories]:regex'
+    '(-X --respect-xattrs)'{-X,--respect-xattrs}'[respect extended attributes]'
+    '(-y --method)'{-y+,--method=}'[specify file content comparison method]:method [sha256]:(sha256 sha1 crc32c memcmp)'
+    '(-z --zero)'{-z,--zero}'[delimit output with NULs instead of newlines]'
+  )
+fi
+
+_arguments -S -s $args \
+  '(-f --respect-name)'{-f,--respect-name}'[filenames have to be identical]' \
+  '(-i --include)'{-i+,--include=}'[regular expression to include files/dirs]:regex' \
+  '(-m --maximize -M --minimize)'{-m,--maximize}'[keep the file with the most links]' \
+  '(-M --minimize -m --maximize)'{-M,--minimize}'[keep the file with the fewest links]' \
+  '(-n --dry-run)'{-n,--dry-run}"[don't actually link anything]" \
+  '(-o --ignore-owner -c --content)'{-o,--ignore-owner}'[ignore owner changes]' \
+  '(-O --keep-oldest)'{-O,--keep-oldest}'[keep the oldest file of multiple equal files]' \
+  '(-p --ignore-mode -c --content)'{-p,--ignore-mode}'[ignore changes of file mode]' \
+  '(-s --minimum-size)'{-s+,--minimum-size=}'[specify minimum size for files]: :_numbers -u bytes -d 1 size K M G T P E Z Y' \
+  '(-t --ignore-time -c --content)'{-t,--ignore-time}'[ignore timestamps (when testing for equality)]' \
+  \*{-v,--verbose}'[more verbose output]' \
+  '(-x --exclude)'{-x+,--exclude=}'[specify regular expression to exclude files]:regex' \
+  "$ign"{-h,--help}'[display usage information]' \
+  "$ign"{-V,--version}'[display version information]' \
+  '*:file or directory:_files'
diff --git a/Completion/Unix/Command/_ldd b/Completion/Unix/Command/_ldd
index 98ac41e14..bbac09225 100644
--- a/Completion/Unix/Command/_ldd
+++ b/Completion/Unix/Command/_ldd
@@ -26,6 +26,17 @@ else
 	'-s[display search path used]'
 	'-v[displays all dependency relationships]'
       )
+    ;|
+    solaris2.<11->)
+      args+=(
+        '-c[disable configuration file used]'
+        '-D[skip deferred dependency loading]'
+        '-p[display unresolved parent and external references]'
+        '-S+[specify system root]:directory:_directories'
+        '-w[display unresolved weak references]'
+        '(- *)'{-\?,--help}'[display usage information]'
+        '(- *)'{-V,--version}'[display version information]'
+      )
     ;;
     freebsd*)
       args=(
diff --git a/Completion/Unix/Command/_less b/Completion/Unix/Command/_less
index b7e658d7e..f20a50818 100644
--- a/Completion/Unix/Command/_less
+++ b/Completion/Unix/Command/_less
@@ -88,17 +88,25 @@ _arguments -S -s -A "[-+]*"  \
   '(-\" --quotes)'{'-\"+',--quotes=}'[change quoting character]:quoting characters' \
   '(-~ --tilde)'{-~,--tilde}"[don't display tildes after end of file]" \
   '(-\# --shift)'{'-\#+',--shift=}"[specify amount to move when scrolling horizontally]:number of columns or fraction of screen width [.5]" \
+  '--autosave=[set additional actions which cause the history file to be saved]: : _values -s "" action
+    "(*)m[setting or clearing a mark]"
+    "(*)/[searching]"
+    "(*)\![running a shell command]"
+    "(m / !)\*[any action; same as m/!]"' \
+  '--emouse=[enable mouse features]:mouse feature:_sequence compadd - vscroll vdrag hscroll hdrag lclick rclick scroll drag hmove vmove move click all' \
+  '--end-prompt=[specify string to be printed after erasing the prompt]:string' \
   '--exit-follow-on-close[exit F command on a pipe when writer closes pipe]' \
   '--file-size[automatically determine the size of the input file]' \
   '--follow-name[the F command changes file if the input file is renamed]' \
   '--form-feed[stop scrolling when a form feed character (^L) is reached]' \
   '--header=[set header size]:lines,columns,first-line' \
+  '--hilite-target=[highlight the target line]' \
   '--incsearch[search file as each pattern character is typed in]' \
   '--intr=[specify interrupt character instead of ^X]:char [^X]' \
   '--line-num-width=[set the width of line number field]:width [7]' \
   '--match-shift=[with -S, shift horizontally to make the match visible]:number of columns or fraction of screen width' \
   '--modelines=[look for vim modelines]:number of lines to search' \
-  '(--MOUSE)--mouse[enable mouse input]' \
+  '(--MOUSE)--mouse[enable mouse clicking and vertical scrolling]' \
   '(--mouse)--MOUSE[enable mouse input, wheel down moves backwards in the file]' \
   "--no-edit-warn[don't warn when using v command on a file opened by LESSOPEN]" \
   '--no-histdups[remove duplicates from command history]' \
@@ -123,6 +131,7 @@ _arguments -S -s -A "[-+]*"  \
     "E[multi-file]" "F[from first line]" "K[highlight]"
     "N[non-matching]" "R[literal]" "W[wrap]" -' \
   '--show-preproc-errors[display a message if preprocessor exits with an error status]' \
+  '--past-eof[scrolling commands continue past end of file]' \
   '--status-col-width=[set the width of the -J status column]:width [2]' \
   '--status-line[highlight or color the entire line containing a mark]' \
   '--use-backslash[subsequent options use backslash as escape char]' \
diff --git a/Completion/Unix/Command/_ngrep b/Completion/Unix/Command/_ngrep
index 924597826..28d6ddc88 100644
--- a/Completion/Unix/Command/_ngrep
+++ b/Completion/Unix/Command/_ngrep
@@ -25,6 +25,8 @@ _arguments -s -S \
    '-S+[set the upper limit on size of packets matched]:size (bytes)' \
    '(-x)-W+[set the dump format]:packet display format:(normal byline single none)' \
    '-c+[force the column width to the specified size]:columns' \
+   '-C[colorize matches in packet contents output]' \
+   '-u[show payload as UTF-8 characters]' \
    '-P+[set the non-printable display char to what is specified]:character [.]' \
    '-F+[read the bpf filter from the specified file]:file:_files' \
    '-N[show sub protocol number]' \
diff --git a/Completion/Unix/Command/_nm b/Completion/Unix/Command/_nm
index a78eb7068..725ed3c39 100644
--- a/Completion/Unix/Command/_nm
+++ b/Completion/Unix/Command/_nm
@@ -69,7 +69,13 @@ if _pick_variant -r variant binutils=GNU elftoolchain=elftoolchain elfutils=elfu
 	'--special-syms[include special symbols in the output]'
 	'--synthetic[display synthetic symbols as well]'
 	"--target=[target object format]:target:(${${(@M)${(f)$(_call_program targets nm --help)}:#*supported targets:*}##*: })"
-	'--unicode=[specify how to treat UTF-8 encoded unicode characters]:how_to_treat:(default show invalid hex escape highlight)'
+        '--unicode=[specify how to treat UTF-8 encoded unicode characters]: : _values "treatment [default]"
+          {d,default}"[no special treatment]"
+          {l,locale}"[convert to current locale]"
+          {i,invalid}"[not part of a valid string]"
+          {x,hex}"[<> enclosed hex byte sequences]"
+          {e,escape}"[escape sequences (\\\\uxxxx)]"
+          {h,highlight}"[escape sequences highlighted in red]"' \
 	'(-W --no-weak)'{-W,--no-weak}'[ignore weak symbols]'
 	'--with-symbol-versions[display version strings after symbol names]'
 	'--without-symbol-versions[not display of symbol version information]'
diff --git a/Completion/Unix/Command/_nmap b/Completion/Unix/Command/_nmap
index 2a507baa3..148b77b51 100644
--- a/Completion/Unix/Command/_nmap
+++ b/Completion/Unix/Command/_nmap
@@ -1,63 +1,127 @@
 #compdef nmap
 
-local curcontext="$curcontext" state line suf ret=1
+local curcontext="$curcontext" ign dir ret=1
+local -a state line expl suf
+local -A opt_args
+local -aU scripts categories
 
-_arguments -C \
+(( $#words == 2 )) || ign='!(- *)'
+_arguments -s -S -C \
+  '!(-6)-4' \
   '!-sI:zombie host:_hosts' \
-  '!-P'{T,S,U}'+:port list' \
-  '*-s-[specify scan type]:scan type:((S\:TCP\ SYN\ scan T\:TCP\ connect\(\)\ scan F\:stealth\ FIN\ scan X\:stealth\ Xmas\ tree\ scan N\:stealth\ null\ scan P\:ping\ scanning U\:UDP\ scan O\:IP\ protocol\ scan I\:idle\ scan A\:ACK\ scan W\:window\ scan R\:RPC\ scan L\:list\ scan V\:version\ detection))' \
-  '-b[specify ftp relay host]:ftp relay host:_hosts' \
-  '*-P-[specify probe types and options]:probe type/options:->probe-opts' \
-  '-A[enable OS detection and version scanning]' \
-  '-O[enable remote OS identification]' \
-  '-6[enable IPv6 support]' \
-  '-I[enable TCP reverse ident scanning]' \
-  '-f[use tiny fragmented IP  packets]' \
-  '*-v[verbose mode]' \
-  '-h[show help information]' \
-  '*-o-[log results]:log format:->log-forms:log filename:_files' \
-  '--resume[resume cancelled scan]:log filename:_files' \
-  '--append-output[append results to any log files]' \
+  '!-P'{S,A,U,Y}'+:port list' \
+  '!-PO+:protocol list' \
+  '!(-F -p --exclude-ports)-sn' \
   '-iL[read target specifications from file]:file:_files' \
   '-iR[scan random hosts]:num hosts' \
-  '-p[specify ports to try]:port numbers' \
-  '-F[scan only ports listed in services file]' \
-  '-D[perform decoy scan]:host list:_sequence -s, _hosts' \
-  '-S[specify source address]:address:_hosts' \
-  '-e[specify interface to use]:network interface:_net_interfaces' \
-  '-g[specify source port number]:port number' \
-  '--data-length[add random data to packets]:data length' \
-  '(-R)-n[skip reverse DNS to speed things up]' \
+  '--exclude[specify hosts/networks to exclude]:host list:_sequence -s, _hosts' \
+  '--excludefile[use exclude list from a file]:file:_files' \
+  '*-s-[specify scan type]:scan type:((S\:TCP\ SYN\ scan T\:TCP\ connect\(\)\ scan F\:stealth\ FIN\ scan X\:stealth\ Xmas\ tree\ scan N\:stealth\ null\ scan P\:ping\ scanning U\:UDP\ scan O\:IP\ protocol\ scan I\:idle\ scan A\:TCP\ ACK\ scan W\:TCP\ window\ scan M\:TCP\ Maimon\ scan R\:RPC\ scan L\:list\ scan Y\:SCTP\ INIT\ scan Z\:SCTP\ COOKIE-ECHO\ scan V\:version\ detection n\:no\ port\ scan C\:equivalent\ to\ --script=default))' \
+  '*-P-[specify probe types and options]:probe type/options:->probe-opts' \
+  '(-R --dns-servers --system-dns)-n[skip reverse DNS to speed things up]' \
   '(-n)-R[always do reverse DNS on targets]' \
+  '--resolve-all[scan all addresses resolved via DNS]' \
+  '--unique[scan each address only once]' \
+  '(--dns-servers -n)--system-dns[use OS DNS resolver for reverse lookups]' \
+  '(--system-dns -n)--dns-servers[specify custom DNS servers for reverse lookups]:server:_sequence s, _hosts' \
+  "--disable-arp-ping[don't do ARP or IPv6 ND of locally connected ethernet hosts]" \
+  "--discovery-ignore-rst[don't treat RST replies as proof of a target being up]" \
+  '--traceroute[trace hop path to each host]' \
+  '--scanflags[customize TCP scan flags]:TCP flags:->tcp-flags' \
+  '-b[specify ftp relay host]:ftp relay host:_hosts' \
+  '-p+[specify ports to try]:port numbers' \
+  '--exclude-ports[exclude specified ports]:port numbers' \
+  '-F[scan only ports listed in services file]' \
   "-r[don't randomize order in which ports are scanned]" \
-  '-ttl[specify IPv4 time to live for sent packets]' \
-  '--randomize-hosts[scan hosts in random order]' \
-  '-M[specify maximum number of parallel TCP connects]:maximum TCP connects' \
-  '--packet-trace[show all packets sent in tcpdump-like format]' \
+  '--top-ports[scan most common ports]:number of ports' \
+  '--port-ratio[scan ports more common than specified ratio]: :_numbers -l 0.0 -m 1.0 ratio' \
+  "--allports[don't exclude any ports from version detection]" \
+  '(--version-light --version-all)--version-intensity[limit version probes to try]:level:((0\:light 1 2 3 4 5 6 7 8 9\:try\ all))' \
+  '(--version-intensity --version-all)--version-light[alias for --version-intensity 2]' \
+  '(--version-intensity --version-light)--version-all[alias for --version-intensity 9]' \
   '--version-trace[show packets related to version scanning]' \
-  '--datadir[specify directory containing data files]:directory:_directories' \
-  '-T[specify timing policy]:timing policy:(Paranoid Sneaky Polite Normal Aggressive Insane)' \
-  '--host-timeout[specify maximum time for scanning a single host]:timeout (ms)' \
-  '--max-rtt-timeout[maximum time for a probe response]:timeout (ms)' \
-  '--min-rtt-timeout[minimum time to wait for a probe response]:time (ms)' \
-  '--initial-rtt-timeout[specify initial probe timeout]:timeout (ms)' \
-  '--max-parallelism[specify max number of scans to perform in parallel]:number' \
-  '--min-parallelism[scan at least specified number of ports in parallel]:number' \
-  '--scan-delay[specify minimum amount of time between probes]:delay (ms)' \
-  '--interactive[go into interactive mode]' \
+  '-O[enable remote OS identification]' \
+  '--osscan-limit[limit OS detection to promising targets]' \
+  '(--osscan-guess --fuzzy)'{--osscan-guess,--fuzzy}'[guess OS more aggressively]' \
+  '--max-os-tries[set maximum number of OS detection tries against a target]:tries [5]' \
+  '--script=[specify Lua scripts]:script:->scripts' \
+  '--script-args[provide arguments to scripts]:arguments' \
+  '--script-args-file[provide script arguments in a file]:file:_files' \
+  '--script-trace[show all data sent and received]' \
+  '--script-updatedb[update the script database]' \
+  "$ign--script-help=[show help about scripts]:script:->scripts" \
+  --{min,max}-hostgroup'[set parallel scan group size]:size' \
+  --{min,max}-parallelism'[specify number of scans to perform in parallel]:number' \
+  --{min,max}-rtt-timeout'[set time to wait for a probe response]: :_numbers -u seconds time \:s ms m h' \
+  '--initial-rtt-timeout[specify initial probe timeout]: :_numbers -u seconds timeout \:s ms m h' \
+  '--max-retries[cap number of port scan probe retransmissions]:tries' \
+  '--host-timeout[specify maximum time for scanning a single host]: :_numbers -u seconds timeout \:s ms m h' \
+  '--script-timeout[set a ceiling on script execution time]:max time' \
+  '(--scan-delay --max-scan-delay)'--{max-,}'scan-delay[set amount of time between probes to a given host]: :_numbers -u seconds delay \:s ms m h' \
+  '--min-rate[send packets no slower than number per second]:packets' \
+  '--max-rate[send packets no faster than number per second]:packets' \
+  '--defeat-'{rst,icmp}'-ratelimit' \
+  '--nsock-engine:IO multiplexing engine:(iocp epoll kqueue poll select)' \
+  '-T[set a timing template]:timing policy:(paranoid sneaky polite normal aggressive insane)' \
+  '-f[fragment packets]' \
+  '--mtu=[specify MTU, with -f]:mtu' \
+  '-D[perform decoy scan]:host list:_sequence -s, _hosts' \
+  '-S[spoof source address]:address:_hosts' \
+  '-e[specify interface to use]:network interface:_net_interfaces' \
+  '(-g --source-port)'{-g,--source-port=}'[specify source port number]:port number' \
+  '--data=[append a custom payload to sent packets]:payload (hex string)' \
+  '--data-string=[append a custom ASCII string to sent packets]:string' \
+  '--data-length[add random data to packets]:data length' \
+  '--ip-options=[send packets with specified IP options]:IP options:->ip-options' \
+  '--ttl[specify IPv4 time to live for sent packets]:time-to-live' \
+  '--randomize-hosts[scan hosts in random order]' \
+  '--spoof-mac=[spoof your MAC address]:MAC address' \
+  '--proxies=[relay connections through HTTP/SOCKS4 proxies]:proxy;_sequence _urls' \
+  '--badsum[send packets with a bogus TCP/UDP/SCTP checksum]' \
+  '--adler32[use deprecated Adler32 instead of CRC32C for SCTP checksums]' \
+  '*-o-[log results]:log format:->log-forms: :{_files || _date_formats}' \
+  '*-v-[increase verbosity]::level' \
+  '*-d-[increase debugging level]::level' \
+  '--reason[show why a port is in a particular state]' \
+  '--stats-every=[print periodic timing stats]: :_numbers -u seconds interval \:s ms m h' \
+  '--open[only show open (or possibly open) ports]' \
+  '--packet-trace[show all packets sent in tcpdump-like format]' \
+  "$ign--iflist[list interfaces and routes]" \
+  '--append-output[append results to any log files]' \
+  "$ign--resume[resume aborted scan]:log filename:_files" \
+  '--noninteractive[disable runtime interactions via keyboard]' \
+  '(--webxml)--stylesheet[specify XSL stylesheet to transform XML output to HTML]:stylesheet:_urls' \
+  '(--stylesheet)--webxml[load stylesheet from Nmap.Org]' \
+  '--no-stylesheet[omit XSL stylesheet declaration from XML]' \
+  '-6[enable IPv6 scanning]' \
+  '(-O)-A[enable OS detection, version detection, script scanning and traceroute]' \
+  '--datadir=[specify custom Nmap data file location]:directory:_directories' \
+  '--servicedb=[specify custom services file]:services file:_files' \
+  '--versiondb=[specify custom service probes file]:service probes file:_files' \
+  '(--send-ip)--send-eth[send using raw ethernet frames]' \
+  '(--send-eth)--send-ip[send using raw IP packets]' \
+  '(--unprivileged)--privileged[assume user is fully privileged]' \
+  '(--privileged)--unprivileged[assume user lacks raw socket privileges]' \
+  '!--release-memory' \
+  "$ign"{-V,--version}'[print version number]' \
+  "$ign"{-h,--help}'[print help summary]' \
   '*:host:_hosts' && ret=0
 
 case $state in
   probe-opts)
-    _values -S '' 'probe type/option' \
-      "0[don't try to ping hosts before scanning]" \
-      'T[use TCP "ping"]' \
-      'S[use SYN packets instead of ACK]' \
-      'U[send UDP probes]' \
-      'E[use a true ping]' \
-      'P[use an ICMP timestamp request]' \
-      'M[use a netmask request]' \
-      'B[use ACK and ICMP echo in parallel]' && ret=0
+    _values -S '' 'discovery probe type [R]' \
+      'n[skip host discovery]' \
+      'A[use TCP with ACK flag]' \
+      'S[use TCP with SYN flag]' \
+      'U[use UDP discovery probe]' \
+      'Y[use SCTP discovery probe]' \
+      'E[use ICMP echo request ]' \
+      'P[use ICMP timestamp request]' \
+      'M[use ICMP netmask request]' \
+      'O[IP protocol ping]' \
+      'R[use ARP]' \
+      'O[use IP protocol ping (requires root)]' \
+      && ret=0
   ;;
   log-forms)
     _values 'log format' \
@@ -65,13 +129,50 @@ case $state in
       'X[XML]' \
       'G[grepable]' \
       'A[all]' \
-      'S[S|<ipT kiDdI3]' && ret=0
+      'S[S|<rIpt kIddi3]' && ret=0
   ;;
-  host-list)
-    suf=()
-    compset -P '*,'
+  tcp-flags)
+    compset -P '(URG|ACK|PSH|RST|SYN|FIN)#'
+    _wanted tcp-flags expl 'TCP flag' compadd -S '' \
+        URG ACK PSH RST SYN FIN && ret=0
+  ;;
+  ip-options)
+    _values -S ' ' "IP option" \
+      'R[record route (9 slots availble)]' \
+      'T[record internet timestamps (9 slots)]' \
+      'U[record timestamps and ip addresses (4 slots)]' \
+      'L[loose source routing (8 slots)]:hop ip' \
+      'S[strict source routing (8 slots)]:hop ip' && ret=0
+  ;;
+  scripts)
+    compset -P '*,(|+)'
     compset -S ',*' || suf=(-qS ,)
-    _hosts "$suf[@]" && ret=0
+
+    if [[ $PREFIX$SUFFIX = */* ]]; then
+      _files -g "*.nse(-.)"
+      return
+    fi
+
+    categories=( all )
+    for dir in \
+      ${opt_args[--datadir]:+${~opt_args[--datadir]}/scripts(/N)} \
+      $NMAPDIR/scripts(/N) \
+      ${${commands[$words[1]]:-$words[1]}:P:h:h}/share/nmap/scripts(/N) \
+      ~/.nmap/scripts(/N) \
+      ../share/nmap/scripts(/N) \
+      $NMAPDATADIR/scripts(/N) \
+      .
+    do
+      if [[ -r $dir/script.db ]]; then
+        scripts+=( ${${${(SM)${(f)"$(<$dir/script.db)"}#filename = \"[^.]##.}%.}#*\"} )
+        categories+=( ${${(s.,.)${(SM)${(f)"$(<$dir/script.db)"}##categories = [^\}]#}#*\{}//[ \"]/} )
+      else
+        scripts+=( $dir/*.nse(N:t:r) )
+      fi
+    done
+    _alternative \
+      'categories:category:compadd $suf -a categories' \
+      'scripts:script:compadd -M "r:|-=* r:|=*" $suf -a scripts' && ret=0
   ;;
 esac
    
diff --git a/Completion/Unix/Command/_numfmt b/Completion/Unix/Command/_numfmt
index 999c412a1..dd8f6182f 100644
--- a/Completion/Unix/Command/_numfmt
+++ b/Completion/Unix/Command/_numfmt
@@ -15,6 +15,7 @@ _arguments -S \
   '(H)--padding=[pad the output to specified width]:width; positive - right-align; negative - left-align' \
   '(H)--round=[use specified method for rounding when scaling]:method [from-zero]:(up down from-zero towards-zero nearest)' \
   '(H)--suffix=[add suffix to output numbers and accept optional suffix in input numbers]:suffix' \
+  '(H)--unit-separator=[insert separator between number and unit on output]:separator' \
   "(H)--to=[auto-scale output numbers to specified unit]:unit:$units" \
   '(H)--to-unit=[specify output unit size]:unit size [1]' \
   '(H -z --zero-terminated -d --delimiter)'{-z,--zero-terminated}'[line delimiter is NUL, not newline]' \
diff --git a/Completion/Unix/Command/_objdump b/Completion/Unix/Command/_objdump
index 71a615c97..0a8820327 100644
--- a/Completion/Unix/Command/_objdump
+++ b/Completion/Unix/Command/_objdump
@@ -67,8 +67,13 @@ case $variant in
       '!(--no-recurse-limit)--recurse-limit'
       '--no-recurse-limit[disable demangling recursion limit]'
       '(-w --wide)'{-w,--wide}'[format output for more than 80 columns]'
-      '-U+[specify how to display unicode characters]:method:(d l e x h i)'
-      '--unicode=[specify how to display unicode characters]:method:(default locale escape hex highlight invalid)'
+      '(-U --unicode)'{-U+,--unicode=}'[specify how to treat UTF-8 encoded unicode characters]: : _values "treatment [default]"
+        {d,default}"[no special treatment]"
+        {l,locale}"[convert to current locale]"
+        {i,invalid}"[not part of a valid string]"
+        {x,hex}"[<> enclosed hex byte sequences]"
+        {e,escape}"[escape sequences (\\\\uxxxx)]"
+        {h,highlight}"[escape sequences highlighted in red]"' \
       '(-z --disassemble-zeroes)'{-z,--disassemble-zeroes}"[don't skip blocks of zeroes when disassembling]"
 
       '--start-address=[only process data whose address is >= ADDR]:address'
diff --git a/Completion/Unix/Command/_pandoc b/Completion/Unix/Command/_pandoc
index 243b1ac8b..0bf017882 100644
--- a/Completion/Unix/Command/_pandoc
+++ b/Completion/Unix/Command/_pandoc
@@ -214,6 +214,7 @@ _arguments -s \
   '--highlight-style=[specify coloring style to be used in highlighted source code]: :_pandoc_highlight_style' \
   '(- :)--print-highlight-style=[prints a JSON version of a highlighting style]: :_pandoc_highlight_style' \
   '--syntax-definition=[load a KDE XML syntax definition file]:file:_files -g "*.xml(-.)"' \
+  '--syntax-highlighting=[specify method to use for syntax highlighting]:method' \
   \*{-H+,--include-in-header=}'[include contents of file, verbatim, at the end of the header, implies --standalone]:file:_files' \
   \*{-B+,--include-before-body=}'[include contents of file, verbatim, at the beginning of the document body, implies --standalone]:file:_files' \
   \*{-A+,--include-end-body=}'[include contents of file, verbatim, at the end of the document body, implies --standalone]:file:_files' \
diff --git a/Completion/Unix/Command/_patchutils b/Completion/Unix/Command/_patchutils
index a5f6441b1..83bf1d67f 100644
--- a/Completion/Unix/Command/_patchutils
+++ b/Completion/Unix/Command/_patchutils
@@ -13,6 +13,9 @@ case $service in
       '(-z --decompress)'{-z,--decompress}'[decompress .gz and .bz2 files]'
     )
   ;|
+  (combine|inter|filter|flip)diff)
+    args+=( '--in-place[write output to original input files]' )
+  ;|
   interdiff|combinediff|flipdiff)
     args+=(
       '(-q --quiet)'{-q,--quiet}'[quieter output]'
@@ -22,6 +25,7 @@ case $service in
       '(-B --ignore-blank-lines)'{-B,--ignore-blank-lines}'[ignore changes whose lines are all blank]'
       '(-i --ignore-case)'{-i,--ignore-case}'[ignore case differences]'
       '(-b --ignore-space-change)'{-b,--ignore-space-change}'[ignore changes in the amount of whitespace]'
+      '--color=-[colorize the output]::when [auto]:(never always auto)'
       '!(--in-place)--interpolate' '!-h'
       '!(--no-revert-omitted --in-place)--combinediff'
       '!(--no-revert-omitted)--flip'
@@ -33,7 +37,6 @@ case $service in
       "--no-revert-omitted[don't revert files changed in only the first patch]"
     )
   ;;
-  flipdiff) args+=( '--in-place[write output to original input files]' ) ;;
   filterdiff|grepdiff|lsdiff)
     args+=(
       '(-i --include)'{-i,--include}'[include only files matching pattern]:pattern:_files'
@@ -42,6 +45,8 @@ case $service in
       '--lines=[only list hunks containing lines within specified range]:range'
       '(-F --files)'{-F+,--files=}'[only list files within specified range]:range'
       '--strip=[remove specified number of pathname components before displaying]:components'
+      '--git-prefixes=[specify handling of a/ and b/ prefixes in git diffs]:handling:(strip keep)'
+      '--git-extended-diffs=[process git diffs without hunks]:action [include]:(exclude include)'
       '--addprefix=[insert specified path prefix before displaying path names]:prefix:_directories'
       '*:diff file:_files'
     )
@@ -68,7 +73,7 @@ case $service in
       '--format=[use specified output format]:format:(unified context)'
       '--addnewprefix=[insert specified path prefix before new file path names]:prefix:_directories'
       '--addoldprefix=[insert specified path prefix before original file path names]:prefix:_directories'
-      '--as-numbered-lines=[display lines of selected hunks]:line numbers:(before after)'
+      '--as-numbered-lines=[display lines of selected hunks]:line numbers:(before after original-before original-after)'
       "--remove-timestamps[don't include timestamps in output]"
     )
   ;|
@@ -103,5 +108,6 @@ case $service in
   ;;
 esac
 
+
 _arguments -s $args
 
diff --git a/Completion/Unix/Command/_pgrep b/Completion/Unix/Command/_pgrep
index b7009eafb..b3ef86223 100644
--- a/Completion/Unix/Command/_pgrep
+++ b/Completion/Unix/Command/_pgrep
@@ -1,8 +1,7 @@
-#compdef pgrep pkill
+#compdef pgrep pkill pidwait
 
 # Notes:
-# - We assume that Linux systems use procps-ng - specifically, procps-ng >=3.3.4
-#   (which changed the behaviour of -f and added -a)
+# - We assume that Linux systems use procps-ng
 # - We don't really need to keep pgopts and pkopts separate, but it seems like
 #   it should make things a bit easier to follow
 
@@ -17,13 +16,13 @@ typeset -a arguments sig_arguments aopts
 arguments=(
   '-a[include process ancestors in match list]'
   '-c+[match only on specified login class]:login class:_login_classes'
-  '(-F --pidfile)'{-F+,--pidfile=}'[match only processes in specified PID file]:PID file:_files'
+  '(-F --pidfile -p --pid)'{-F+,--pidfile=}'[match only processes in specified PID file]:PID file:_files'
   '(-f --full)'{-f,--full}'[match against full command line]'
   '(-G --group)'{-G+,--group=}'[match only on specified real group IDs]: :_sequence _groups'
   '(-g --pgroup)'{-g+,--pgroup=}'[match only on specified process group IDs]: :->pgid'
   '(: * -)'{-h,--help}'[display help information]'
   '-I[request confirmation before signalling each process]'
-  '-i[ignore case distinctions]'
+  '(-i --ignore-case)'{-i,--ignore-case}'[ignore case distinctions]'
   '-j+[match only on specified jail IDs]:jail:_sequence _jails -0 -o jid'
   '(-L --logpidfile)'{-L,--logpidfile}'[fail if PID file not locked (with -F)]'
   '(-N)-M+[extract name list from specified core]:core file:_files'
@@ -67,15 +66,25 @@ arguments=(
 case $OSTYPE in
   linux*)
     # Note: We deliberately exclude -v but not --inverse from pkill
-    pgopts=AacdFfGghLlnoOPrstUuVvwx-
-    pkopts=AceFfGgHhLnoOPstUuVx-
+    pgopts=AacdFfGghLlnopOPQrstUuVvwx-
+    pkopts=AceFfGgHhLmnoOPstUuVx-
+    pwopts=AceFfGghiLnOoPpQrstUuVx-
     arguments=(
       ${arguments:#((#s)|*\))(\*|)-[acl]*}
       '(-c --count)'{-c,--count}'[display count of matching processes]'
+      '(-p --pid -F --pidfile)'{-p+,--pid=}'[match process PIDs]: :_sequence _pids'
+      '(-Q --shell-quote)'{-Q,--shell-quote}'[output the command line in shell-quoted form]'
+    )
+    [[ $service == pkill ]] && arguments+=(
+      '(-m --mrelease)'{-m,--mrelease}'[release process memory immediately after kill]'
     )
     [[ $service == pgrep ]] && arguments+=(
       '(-a -l --list-full --list-name)'{-a,--list-full}'[display full command line]'
       '(-a -l --list-full --list-name)'{-l,--list-name}'[display process name]'
+      '--quiet[suppress all normal output]'
+    )
+    [[ $service == pidwait ]] && arguments+=(
+      '(-e --echo)'{-e,--echo}'[display PIDs before waiting]'
     )
     ;;
   dragonfly*|freebsd*)
@@ -110,7 +119,9 @@ case $OSTYPE in
     ;;
 esac
 
-if [[ $service == pgrep ]]; then
+if [[ $service == pidwait ]]; then
+  arguments=( ${(M)arguments:#((#s)|*\))(\*|)-[$pwopts]*} )
+elif [[ $service == pgrep ]]; then
   arguments=( ${(M)arguments:#((#s)|*\))(\*|)-[$pgopts]*} )
 else
   arguments=( ${(M)arguments:#((#s)|*\))(\*|)-[$pkopts]*} )
@@ -140,7 +151,7 @@ fi
 
 arguments+=( $sig_arguments + o '*: :->pname' )
 
-[[ $OSTYPE == linux* ]] || aopts+=( -A '*-' )
+[[ $OSTYPE == linux* ]] || aopts+=( -A '-?*' )
 _arguments -C -s -S $aopts : $arguments && ret=0
 
 # complete comma-separated list of various IDs
diff --git a/Completion/Unix/Command/_pmap b/Completion/Unix/Command/_pmap
index 5fd92ab9e..2226d3329 100644
--- a/Completion/Unix/Command/_pmap
+++ b/Completion/Unix/Command/_pmap
@@ -1,11 +1,11 @@
 #compdef pmap
 
 if _pick_variant procps=procps-ng unix -V 2>/dev/null; then
-  # based on procps-ng-3.3.15
   _arguments -s \
     '(exit -A --range)'{-A+,--range}'[limit results to the specified address range]:low,high: ' \
     '(exit -q --quiet)'{-q,--quiet}'[do not display some header or footer lines]' \
     '(exit -p --show-path)'{-p,--show-path}'[show full path to files in the mapping column]' \
+    '(exit -k --use-kernel-name)'{-k,--use-kernel-name}'[use names provided by kernel]' \
     '(exit)*: :_pids' \
     + '(format)' \
     '(exit)'{-d,--device}'[show the device format]' \
diff --git a/Completion/Unix/Command/_ps b/Completion/Unix/Command/_ps
index 57fee983c..7e3db03a7 100644
--- a/Completion/Unix/Command/_ps
+++ b/Completion/Unix/Command/_ps
@@ -206,6 +206,7 @@ case $OSTYPE in
       '-M[show security data]'
       '(--forest -H)'{--forest,-H}'[show process hierarchy]'
       '-P[add psr column]'
+      '--delimiter=[specify column delimiter]:string'
       '--headers[repeat header lines, one per page of output]'
       '(--cols --columns --width)'{--cols,--columns,--width}'[set screen width]:width'
       '(--lines --rows)'{--lines,--rows}'[set screen height]'
diff --git a/Completion/Unix/Command/_rar b/Completion/Unix/Command/_rar
index d1d381974..27120dfa5 100644
--- a/Completion/Unix/Command/_rar
+++ b/Completion/Unix/Command/_rar
@@ -15,17 +15,19 @@ common=(
   '-dh[open shared files]'
   '-ep[exclude paths from name]'
   '-f[freshen files]'
-  '-idn[hide archived names]'
-  '-idp[disable percentage display]'
+  '-id-[disable messages]: : _values -s "" message
+    "c[copyright]" "d[done]" "n[archived names]" "p[percentage indicator]" "q[quiet]"' \
   '-ierr[send all messages to stderr]'
   '-inul[disable all messages]'
   '-kb[keep broken extracted files]'
   '-o\+[overwrite existing files]'
   '-o\-[do not overwrite existing files]'
+  '-ol-[save symbolic links as the link instead of the file]:: :((a\:absolute s\:skip))' \
   '-ow[save or restore file owner and group]'
   '-p+:password'
   '-p\-[do not query password]'
   '-r[recurse subdirectories]'
+  '-si-[read data from standard input]::name'
   '-ta+[process files modified after a date]:date (YYYYMMDDHHMMSS)'
   '-tb+[process files modified before a date]:date (YYYYMMDDHHMMSS)'
   '-tn+[process files newer than a specified time]:time'
@@ -56,9 +58,8 @@ case $service in
     else
       _arguments -S \
 	'-ep3[expand paths to full including the drive letter]' \
-        '-idc[disable ___ display]' \
-        '-idd[disable ___ display]' \
-        '-idq[disable ___ display]' \
+        '-mes[skip encrypted files]' \
+        '-op-[set output path for extracted files]:path:_directories' \
 	'-n+:file to include:_files' \
 	'-n@+:file of files to include:_files' \
         "$common[@]" \
@@ -106,6 +107,7 @@ case $service in
 	'-en[do not put end of archive block]' \
 	'-ep1[exclude base directory from names]' \
 	'-ep2[expand paths to full]' \
+        '-ep4-[exclude path prefix from names]:prefix' \
 	'-hp[encrypt both file data and headers]' \
 	'-ilog[log errors to file (registered versions only)]' \
 	'-isnd[enable sound]' \
@@ -113,7 +115,6 @@ case $service in
 	'-m+[set compression level]:compression level:(( 0\:store 1\:fastest 2\:fast 3\:normal 4\:good 5\:maximal ))' \
 	'-md+[dictionary size]:dictionary size (KB):( 64 128 256 512 1024 2048 4096 a b c d e f g )' \
 	'-ms[specify file types to store]' \
-	'-ol[save symbolic links as the link instead of the file]' \
 	'-p[set password]' \
 	'-r0[recurse subdirectories for wildcard names only]' \
 	'-rr[add data recovery record]' \
diff --git a/Completion/Unix/Command/_readelf b/Completion/Unix/Command/_readelf
index 43cbc81c6..a0ecdaf2a 100644
--- a/Completion/Unix/Command/_readelf
+++ b/Completion/Unix/Command/_readelf
@@ -2,11 +2,11 @@
 
 local variant args sections
 
-sections=( .bss .data .dynamic .dynsym .got .interp .shstrtab .symtab .text )
+sections=( .bss .comment .data .dynamic .dynsym .got .interp .shstrtab .symtab .text )
 _pick_variant -r variant elftoolchain=elftoolchain elfutils=elfutils binutils --version
 
 args=(
-  '(-a --all)'{-a,--all}'[show all tables]'
+  '(-a --all -h --file-header -l --program-headers --segments -S --section-headers --sections -r --relocs -d --dynamic -V --version-info -A --arch-specific -I --histogram --got-contents)'{-a,--all}'[show all tables]'
   '(-g --section-groups)'{-g,--section-groups}'[show section groups]'
   '(-h --file-header)'{-h,--file-header}'[show file header]'
   '(-l --program-headers --segments)'{-l,--program-headers,--segments}'[show program headers]'
@@ -57,8 +57,12 @@ case $variant in
       '(-C)--demangle=-[decode symbol names]::style [auto]:(none auto gnu-v3 java gnat dlang rust)'
       '!(--no-recurse-limit)--recurse-limit'
       '--no-recurse-limit[disable demangling recursion limit]'
-      '-U+[specify how to display unicode characters]:method:(d l e x h i)'
-      '--unicode=[specify how to display unicode characters]:method:(default locale escape hex highlight invalid)'
+      '(-U --unicode)'{-U+,--unicode=}'[specify how to treat UTF-8 encoded unicode characters]: : _values "treatment [locale]"
+        {l,locale,d,default}"[convert to current locale]"
+        {i,invalid}"[not part of a valid string]"
+        {x,hex}"[<> enclosed hex byte sequences]"
+        {e,escape}"[escape sequences (\\\\uxxxx)]"
+        {h,highlight}"[escape sequences highlighted in red]"' \
       '(-X --extra-sym-info)'{-X,--extra-sym-info}'[display extra information when showing symbols]'
       '!(-X --extra-sym-info)--no-extra-sym-info'
       '(-L --lint --enable-checks)'{-L,--lint,--enable-checks}'[display warning messages for possible problems]'
@@ -71,6 +75,7 @@ case $variant in
       '--ctf-symbols=[use specified section as the CTF external symbol table]:section'
       '--ctf-strings=[use specified section as the CTF external string table]:section'
       '--sframe=-[display SFrame info from section]::section name [.sframe]'
+      '(-a --all)--got-contents[display GOT section contents]'
       '(-T --silent-truncation)'{-T,--silent-truncation}"[if a symbol name is truncated, don't add ... suffix]"
     )
   ;;
diff --git a/Completion/Unix/Command/_screen b/Completion/Unix/Command/_screen
index 9336ae82d..65cb63e31 100644
--- a/Completion/Unix/Command/_screen
+++ b/Completion/Unix/Command/_screen
@@ -76,6 +76,7 @@ _arguments -C \
   '-m[ignore $STY variable, do create a new screen session]' \
   '-O[choose optimal output rather than exact vt100 emulation]' \
   '-p[preselect the named window]:window number or name:((\=\:windowlist -\:blank\ window \:window\ number))' \
+  '-P[enable authentication]' \
   '-q[quiet startup, exit with non-zero return code if unsuccessful]' \
   '-Q[send response to stdout of command query process]:screen command:(echo info lastmsg number select time title windows)' \
   '-r[reattach to a detached screen process]: :->detached-sessions' \
diff --git a/Completion/Unix/Command/_script b/Completion/Unix/Command/_script
index 25f8ea35f..431a112e1 100644
--- a/Completion/Unix/Command/_script
+++ b/Completion/Unix/Command/_script
@@ -30,7 +30,7 @@ case $OSTYPE in
       "(-T --log-timing -t --timing $hlp)"{-T+,--log-timing=}'[log timing information to file]:file:_files'
       "(-m --logging-format $hlp)"{-m+,--logging-format=}'[specify log file format]:format:(classic advanced)'
       "(-a --append $hlp)"{-a,--append}'[append to the log file]'
-      "(-c --command $hlp)"{-c,--command=}'[run specified command instead of a shell]:command:_cmdstring'
+      "(-c --command $hlp --)"{-c,--command=}'[run specified command instead of a shell]:command:_cmdstring'
       "(-e --return $hlp)"{-e,--return}'[return exit status of the child process]'
       "(-f --flush $hlp)"{-f,--flush}'[flush output after each write]'
       "(-E --echo $hlp)"{-E+,--echo=}'[echo input]:when:(auto always never)'
@@ -40,6 +40,7 @@ case $OSTYPE in
       "(-t --timing $hlp)"{-t-,--timing=-}'[output timing data]::timing file:_files'
       '(- 1)'{-h,--help}'[display help information]'
       '(- 1)'{-V,--version}'[display version information]'
+      '!--:*::: : _normal $service'
     )
   ;;
   darwin*|dragonfly*|netbsd*|freebsd*)
diff --git a/Completion/Unix/Command/_sqlite b/Completion/Unix/Command/_sqlite
index 218b92b4a..9b8431248 100644
--- a/Completion/Unix/Command/_sqlite
+++ b/Completion/Unix/Command/_sqlite
@@ -50,18 +50,21 @@ options+=(
   $^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'-ifexists[only open if database already exists]'
   $^dashes'-lookaside[specify size and number of entries for lookaside memory]:size (bytes): :entries'
   $^dashes'-maxsize[specify maximum size for a --deserialize database]:size'
   $^dashes'-memtrace[trace all memory allocations and deallocations]'
   $^dashes'-mmap[set default mmap size]:size'
   $^dashes'-newline[set output row separator]:separator [\n]'
   $^dashes'-nofollow[refuse to open symbolic links to database files]'
+  $^dashes"-noinit[don't read ~/.sqliterc file at startup]"
   $^dashes'-nonce[set the safe-mode escape nonce]:string'
   $^dashes'-no-rowid-in-view[disable rowid-in-view using sqlite3_config()]'
   $^dashes'-pagecache[specify size and number of slots for page cache memory]:size (bytes): :slots'
   $^dashes'-pcachetrace[trace all page cache operations]'
   $^dashes'-readonly[open the database read-only]'
   $^dashes'-safe[enable safe-mode]'
+  $^dashes'-screenwidth[use specified default screen width]:width'
   $^dashes'-stats[print memory stats before each finalize]'
   $^dashes'-unsafe-testing[allow unsafe commands and modes for testing]'
   $^dashes'-vfs[use specified default VFS]:vfs:(unix-dotfile unix-excl unix-none unix-namedsem)'
diff --git a/Completion/Unix/Command/_strings b/Completion/Unix/Command/_strings
index 685daa286..774399328 100644
--- a/Completion/Unix/Command/_strings
+++ b/Completion/Unix/Command/_strings
@@ -18,6 +18,13 @@ if _pick_variant -r variant binutils=GNU elftoolchain=elftoolchain elfutils=elfu
       l\:16-bit\ little-endian
       B\:32-bit\ big-endian
       L\:32-bit\ little-endian))'
+    '(-U --unicode -e --encoding)'{-U+,--unicode=}'[specify how to treat UTF-8 encoded unicode characters]: : _values "treatment [default]"
+      {d,default}"[rely on --encoding]"
+      {l,locale}"[convert to current locale]"
+      {i,invalid}"[not part of a valid string]"
+      {x,hex}"[<> enclosed hex byte sequences]"
+      {e,escape}"[escape sequences (\\\\uxxxx)]"
+      {h,highlight}"[escape sequences highlighted in red]"' \
     '(-f --print-file-name)'{-f,--print-file-name}'[print name of the file before each string]'
     '(-n --bytes)'{-n+,--bytes=}"$bytes"
     '(-d -t --radix)'{-t+,--radix=}"$format"
diff --git a/Completion/Unix/Command/_strip b/Completion/Unix/Command/_strip
index 59cb537b9..930080f89 100644
--- a/Completion/Unix/Command/_strip
+++ b/Completion/Unix/Command/_strip
@@ -49,7 +49,9 @@ if _pick_variant -r variant gnu=GNU elftoolchain=elftoolchain $OSTYPE --version;
         '(*)-o+[output file]:output file:_files'
         '--keep-section-symbols[retain section symbols]'
         '--keep-file-symbols[retain symbols specifying source file names]'
-        '(-v --verbose)'{-v,--verbose}'[list all object files modified or members of archives]')
+        '(-v --verbose)'{-v,--verbose}'[list all object files modified or members of archives]'
+        '--plugin=[load specified plugin]:plugin'
+      )
     ;;
     elftoolchain)
       args+=(
diff --git a/Completion/Unix/Command/_texinfo b/Completion/Unix/Command/_texinfo
index 2f5d0f91f..a37bc8ae9 100644
--- a/Completion/Unix/Command/_texinfo
+++ b/Completion/Unix/Command/_texinfo
@@ -123,13 +123,16 @@ case $service in
       '--conf-dir=[specify additional directory for configuration files]:directory:_directories' \
       '--init-file=[specify initialisation file]:file:_files' \
       \*{-c+,--set-customization-variable=}'[set customization variable]:variable' \
+      '--trace-includes[print names of included files]' \
       '(-v --verbose)'{-v,--verbose}'[explain what is being done]' \
       '(* -)--version[display version info]' \
-      '(--html --xml --plaintext)--docbook[output in DocBook XML format]' \
-      '(--docbook --xml --plaintext)--html[output in HTML format]' \
+      '(--html --xml --epub3 --latex --plaintext)--docbook[output in DocBook XML format]' \
+      '(--docbook --xml --epub3 --latex --plaintext)--html[output in HTML format]' \
       '--no-headers[suppress node separators and menus]' \
-      '(--docbook --html --plaintext)--xml[output in XML (TexinfoML) format]' \
-      '(--docbook --html --xml)--plaintext[output in plain text format]' \
+      '(--docbook --html --epub3 --latex --plaintext)--xml[output in XML (TexinfoML) format]' \
+      '(--docbook --html --xml --latex --plaintext)--epub3[output in EPUB 3 format]' \
+      '(--docbook --html --xml --epub3 --plaintext)--latex[output in LaTeX format]' \
+      '(--docbook --html --xml --epub3 --latex)--plaintext[output in plain text format]' \
       '--dvi[output in dvi format]' \
       '--dvipdf[output in pdf format]' \
       '--ps[output in ps format]' \
@@ -138,11 +141,13 @@ case $service in
       '(--docbook --xml)--no-split[suppress splitting of output]' \
       '--no-number-sections[output chapter and section numbers]' \
       '!(--no-number-sections)--number-sections' \
+      '--no-number-footnotes[number footnotes sequentially]' \
+      '!(--no-number-footnotes)--number-footnotes' \
       '(-o --output=)'{-o,--output}'[specify output file]:output file:_files' \
       '(--docbook --html --xml)--disable-encoding[output special characters]' \
       '!(--disable-encoding)--enable-encoding' \
       '(--docbook --html --xml)--fill-column=[specify width to break lines at]:width [72]' \
-      '(--docbook --html --xml)--footnote-style=[specify style for output of footnotes]:((separate\:in\ own\ node end\:at\ end\ of\ node))' \
+      '(--docbook --html --xml)--footnote-style=[specify style for output of footnotes]:style [end]:((separate\:in\ own\ node end\:at\ end\ of\ node))' \
       '(--docbook --html --xml)--paragraph-indent=[specify spaces to indent paragraphs by]:indent [3]' \
       '(--docbook --html --xml)--split-size=[split Info files at specified size]:size [300000]' \
       '(--docbook --xml --plaintext)--css-include=[specify file in include in HTML <style> output]:file:_files' \
@@ -151,7 +156,7 @@ case $service in
       '(--docbook --xml --plaintext)--split=[split output at specified boundary]:split boundary:(chapter section node)' \
       '(--docbook --xml --plaintext)--transliterate-file-names[produce file names in ASCII transliteration]' \
       '(--docbook --xml --plaintext)--node-files[produce redirection files for nodes]' \
-      '-Xopt=[specify option to texi2dvi]:options' \
+      '*-Xopt=[pass option to texi2dvi]:option' \
       '-D[define variable]:variable' \
       '-I[specify directory to append to @include search path]:directory:_files -/' \
       '-P[specify directory to prepend to @include search path]:directory:_files -/' \
diff --git a/Completion/Unix/Command/_tiff b/Completion/Unix/Command/_tiff
index 1aeff3ff7..f8c4a1164 100644
--- a/Completion/Unix/Command/_tiff
+++ b/Completion/Unix/Command/_tiff
@@ -157,7 +157,8 @@ tiffinfo)
     '-s[display offsets and byte counts for all data strips]' \
     '-i[ignore read errors]' \
     '-f+[force fill order]:fill order:(lsb2msb msb2lsb)' \
-    '-w[display raw data in words]' \
+    '-w[show image data as 16-bit words]' \
+    '-W[warn about unknown tags]' \
     '-z[enable strip chopping]' \
     '-M+[set the memory allocation limit]:limit (MiB), 0 for unlimited' \
     '*:input TIFF file:_files -g "*.(#i)tif(|f)(-.)"' && ret=0
@@ -235,6 +236,7 @@ pal2rgb)
 *)
   _description files expl 'picture file'
   _files "$expl[@]" -g "$pat" && ret=0
+;;
 esac
 
 if [[ -n "$state" ]]; then
@@ -265,7 +267,7 @@ if [[ -n "$state" ]]; then
     while _tags; do
       while _next_label values expl 'compression scheme'; do
         compadd "$expl[@]" - none jbig g4 packbits sgilog && ret=0
-        compadd "$expl[@]" -qS: - lzw zip lzma zstd webp jpeg g3 && ret=0
+        compadd "$expl[@]" -qS: - lzw zip lerc lzma zstd webp jpeg g3 && ret=0
       done
       (( ret )) || return 0
     done
diff --git a/Completion/Unix/Command/_w b/Completion/Unix/Command/_w
index 2da57a8f6..b63018024 100644
--- a/Completion/Unix/Command/_w
+++ b/Completion/Unix/Command/_w
@@ -9,6 +9,7 @@ case $OSTYPE in
       '(-c --container)'{-c,--container}'[show container uptime]'
       '(H -h)--no-header[suppress the heading]'
       '(H -i --ip-addr)'{-i,--ip-addr}'[display IP address instead of hostname]'
+      '(H -t --terminal)'{-t,--terminal}'[scan terminal devices to locate user sessions]'
       '(H -o --old-style -s --short)'{-o,--old-style}'[old style output format]'
       '(H -s --short -o --old-style)'{-s,--short}'[use short output format]'
       '(H -u --no-current)'{-u,--no-current}'[ignore the username while figuring out the current process and cpu times]'
@@ -41,12 +42,18 @@ case $OSTYPE in
       '-A[sort tty names alphabetically instead of utmp or utmpx order]'
     )
   ;|
-  solaris*)
+  aix*|solaris*)
     args+=( '!(-s -w -l)'{-l,-w}
       '-s[short output form]'
       '(-)-u[produce only the heading line]'
     )
   ;|
+  aix*)
+    args+=(
+      "-X[don't truncate user names]"
+      '-@[tag system activity with workload partition name]:wpar'
+    )
+  ;;
 esac
 
 _arguments -S -s \
diff --git a/Completion/Unix/Command/_w3m b/Completion/Unix/Command/_w3m
index de425cfb1..65c150590 100644
--- a/Completion/Unix/Command/_w3m
+++ b/Completion/Unix/Command/_w3m
@@ -14,6 +14,8 @@ _arguments -C \
   '(-e -s   )-j[JIS]' \
   '(-v *)-B[load bookmark]' \
   '-bookmark[specify bookmark file]:bookmark file:_files' \
+  '-R[restore from session file]' \
+  '-session[specify session file]:session file:_files' \
   '-T[specify content-type]:content type:_mime_types' \
   '-m[internet message mode]' \
   '(-B *)-v[visual startup mode]' \
@@ -36,9 +38,11 @@ _arguments -C \
   "-no-proxy[don't use proxy]" \
   '(-6)-4[IPv4 only (-o dns_order=4)]' \
   '(-4)-6[IPv6 only (-o dns_order=6)]' \
+  '-insecure[use insecure SSL config options]' \
   "-no-mouse[don't use mouse]" \
   '(-no-cookie)-cookie[use cookie]' \
   "(-cookie)-no-cookie[don't use cookie]" \
+  '-cookie-jar[use specified cookie file]:file:_files' \
   '(-no-graph)-graph[use DEC special graphics for border of table and menu]' \
   '(-graph)-no-graph[use ASCII character for border of table and menu]' \
   '-S[squeeze multiple blank lines]' \
@@ -86,13 +90,13 @@ case "$state" in
       'history:history:compadd -a w3mhistory' && ret=0
   ;;
   option)
-    local -a options
-    options=( ${${(M)${(f)"$(_call_program options $words[1] -show-option 2>/dev/null)"}:#    -o *}/(#b)    -o (*)=[^ ]#[[:blank:]]##(*)/$match[1]:${match[2]:l}} )
+    local -a wopts
+    wopts=( ${${(M)${(f)"$(_call_program options $words[1] -show-option)"}:#    -o *}/(#b)    -o (*)=[^ ]#[[:blank:]]##(*)/$match[1]:${match[2]:l}} )
     if compset -P 1 '*='; then
       _message -e values 'value'
     else
       compset -S '=*' || suf=( -S '=' )
-      _describe -t options 'option' options "$suf[@]" && ret=0
+      _describe -t config-options 'option' wopts "$suf[@]" && ret=0
     fi
   ;;
 esac
diff --git a/Completion/Unix/Command/_xmlsoft b/Completion/Unix/Command/_xmlsoft
index b8cf92700..aefb0e978 100644
--- a/Completion/Unix/Command/_xmlsoft
+++ b/Completion/Unix/Command/_xmlsoft
@@ -37,9 +37,8 @@ case $service in
       '--novalid[skip the DTD loading phase]' \
       '--nodtdattr[do not default attributes from the DTD]' \
       '--noout[do not dump the result]' \
-      '--maxdepth[increase the maximum depth]:depth' \
-      '--maxvars[increase the maximum variables]:variables' \
-      '--maxparserdepth[increase the maximum parser depth]:depth' \
+      '--maxdepth[increase the maximum depth]:depth [3000]' \
+      '--maxvars[increase the maximum variables]:variables [15000]' \
       '--huge[relax hardcoded limits of the parser]' \
       '--seed-rand[initialise random number generator]:seed' \
       '--html[input document is an HTML file]' \
@@ -64,7 +63,6 @@ case $service in
       '--version[display the version of the XML library used]' \
       '--debug[dump a debug tree of the in-memory document]' \
       '--shell[run a navigating shell]' \
-      '--debugent[debug the entities defined in the document]' \
       '--copy[used to test the internal copy implementation]' \
       '--recover[output what was parsable on broken XML documents]' \
       '--huge[remove any internal arbitrary parser limits]' \
@@ -75,8 +73,6 @@ case $service in
       '--load-trace[print trace of all external entities loaded]' \
       '--nonet[refuse to fetch DTDs or entities over network]' \
       '--nocompact[do not generate compact text nodes]' \
-      '--htmlout[output results as HTML]' \
-      '--nowrap[do not put HTML doc wrapper]' \
       '--valid[validate the document in addition to std well-formed check]' \
       '(--dtdvalid --relaxng --schema)--postvalid[do a posteriori validation, i.e after parsing]' \
       '(--postvalid --relaxng --schema --dtdvalidfpi)--dtdvalid[do a posteriori validation against a given DTD]:DTD:_webbrowser' \
@@ -86,17 +82,19 @@ case $service in
       '(--noout --output -o)'{--output,-o}'[save to a given file]:output file:_files' \
       '--repeat[repeat 100 times, for timing or profiling]' \
       '--insert[ad-hoc test for valid insertions]' \
+      '--strict-namespace[return failure if document has namespace errors]' \
       '--compress[turn on gzip compression of output]' \
       '--html[use the HTML parser]' \
       '--xmlout[use the XML serializer when using --html]' \
       '--nodefdtd[do not default HTML doctype]' \
       '--push[use the push mode of the parser]' \
-      '--pushsmall[use the push mode of the parser using tiny increments]' \
       '--memory[parse from memory]' \
-      '--maxmem[limit memory allocation]:bytes' \
+      '--maxmem[limit memory allocation]:maximum (bytes)' \
       '--nowarning[do not emit warnings from parser/validator]' \
       '--noblanks[drop (ignorable?) blanks spaces]' \
       '--nocdata[replace cdata section with text nodes]' \
+      '--nodict[create document without dictionary]' \
+      '--pedantic[enable additional warnings]' \
       '--format[reformat/reindent the input]' \
       '--encode[output in the given encoding]:encoding:(${encoding[@]})' \
       '--dropdtd[remove the DOCTYPE of the input docs]' \
@@ -124,6 +122,8 @@ case $service in
       '--sax[do not build a tree but work just at the SAX level]' \
       '--oldxml10[use XML-1.0 parsing rules before the 5th edition]' \
       '(--noout)--xpath[evaluate the XPath expression, implies --noout]:XPath expression' \
+      '(--noout)--xpath0[evaluate the XPath expression separating results by NUL, implies --noout]:XPath expression' \
+      '--max-ampl[set maximum amplification factor]:factor [5]' \
       '*:XML file:_webbrowser' && return
   ;;
   *XML_CATALOG_FILES*)
diff --git a/Completion/Unix/Command/_xxd b/Completion/Unix/Command/_xxd
index e9015a081..f56590915 100644
--- a/Completion/Unix/Command/_xxd
+++ b/Completion/Unix/Command/_xxd
@@ -22,13 +22,14 @@ local arguments
 
 arguments=(
   # output options
-  '(-b -bits            -i -include -p -postscript -plain -ps -r -revert -u -uppercase)'{-b,-bits}'[output in binary digits, rather than hex]'
-  '(         -E -EBCDIC -i -include -p -postscript -plain -ps -r -revert              )'{-E,-EBCDIC}'[print human-readable part in EBCDIC rather than ASCII]'
-  '(-i -include -p -postscript -plain -ps -r -revert)-e[little-endian dump]'
-  '(-b -bits -E -EBCDIC -i -include -p -postscript -plain -ps -r -revert              )'{-i,-include}'[output in C include file style]'
-  '(-b -bits -E -EBCDIC -i -include -p -postscript -plain -ps -C -capitalize          )'{-p,-postscript,-plain,-ps}'[read or write a plain hexdump (no line numbers or ASCII rendering)]'
+  '(-b -bits -i -include -t -p -postscript -plain -ps -r -revert -u -uppercase)'{-b,-bits}'[output in binary digits, rather than hex]'
+  '(-E -EBCDIC -i -include -t -p -postscript -plain -ps -r -revert)'{-E,-EBCDIC}'[print human-readable part in EBCDIC rather than ASCII]'
+  '(-i -include -t -p -postscript -plain -ps -r -revert)-e[little-endian dump]'
+  '(-E -EBCDIC -i -include -p -postscript -plain -ps -r -revert)'{-i,-include}'[output in C include file style]'
+  '(-E -EBCDIC -p -postscript -plain -ps -r -revert)-t[append terminating zero to C include output]'
+  '(-b -bits -E -EBCDIC -i -include -t -p -postscript -plain -ps -C -capitalize)'{-p,-postscript,-plain,-ps}'[read or write a plain hexdump (no line numbers or ASCII rendering)]'
 
-  '(-b -bits -E -EBCDIC -i -include                           -r -revert -u -uppercase)'{-r,-revert}'[reverse mode\: read a hex dump and output binary data]'
+  '(-b -bits -E -EBCDIC -i -include -t -r -revert -u -uppercase)'{-r,-revert}'[reverse mode\: read a hex dump and output binary data]'
   '(-b -bits                                                  -r -revert -u -uppercase)'{-u,-uppercase}'[output upper-case hex digits]'
 
   '(- :)'{-h,-help}'[display usage message]'
@@ -42,7 +43,7 @@ arguments=(
   '(-o -offset)'{-o+,-offset}'[add specified offset to displayed file position]:offset'
   '-d[show offset in decimal instead of hex]'
   '-R+[colorize the output]:when:(always auto never)'
-  '(-s -skip -seek)'{-s+,-skip,-seek}'[specify file offset to dump from]: :_guard "(0x|)[0-9a-fA-F]#" "file offset to dump from (absolute or relative)"'
+  '(-s -skip -seek)'{-s+,-skip,-seek}'[specify file offset to dump from]: :_guard "([+-]|)(0x|)[0-9a-fA-F]#" "file offset to dump from (bytes, absolute or +/- relative)"'
 
   ': :_files'
 )
diff --git a/Completion/Unix/Command/_xz b/Completion/Unix/Command/_xz
index 6e68e0f69..d441a6545 100644
--- a/Completion/Unix/Command/_xz
+++ b/Completion/Unix/Command/_xz
@@ -18,12 +18,13 @@ case "$service" in
     '(I -k --keep)'{-k,--keep}"[keep (don't delete) input files]" \
     '(I -f --force)'{-f,--force}'[force overwrite]' \
     '(I -c --stdout)'{-c,--stdout}'[write on standard output]' \
+    "(I)--no-sync[don't flush writes before removing input file]" \
     '(I)*'{-q,--quiet}'[suppress all warnings]' \
     '(I)*'{-v,--verbose}'[verbose mode]' \
     '(I * --files --files0)--files=-[read list of files to process from file]::file:_files' \
     '(I * --files --files0)--files0=-[read null terminated list of files to process from file]::file:_files' \
     '(I -F --format)'{-F+,--format=}'[specify file format]:format:(auto xz lzma lzip raw)' \
-    '(I -T --threads)'{-T+,--threads=}'[use specified number of threads]:threads [1]' \
+    '(I -T --threads)'{-T+,--threads=}'[use specified number of threads]:threads [0]' \
     '(I -M --memlimit --memory)'{-M+,--memlimit=,--memory=}'[set memory usage limit]: :_numbers -u bytes "memory limit" KiB MiB GiB %\:percentage\ of\ available\ RAM' \
     '(I)--no-adjust[give error if settings exceed memory limit]' \
     '(I -Q --no-warn)'{-Q,--no-warn}'[make warnings not affect exit status]' \
@@ -49,11 +50,14 @@ case "$service" in
     '(* comp decomp level filters common)--info-memory[display amount of RAM and memory usage limits]' \
     '(- *)'{-h,--help}'[display help message]' \
     '(- *)'{-H,--long-help}'[display the long help (lists also the advanced options)]' \
+    '(- *)--filters-help[display liblzma filter string syntax information]' \
     '(* comp decomp level filters common)'{-V,--version}'[display version number]' \
     + '(level)' \
     '(I filters decomp)-'{-best,-fast,1,2,3,4,5,6,7,8,9} \
     + filters \
-    '(I level decomp --extreme)'--{x86,powerpc,ia64,arm,armthumb,arm64,sparc}=-'[add a branch/call/jump filter]::option:->bcj-options' \
+    '(I level decomp --extreme)'--{x86,powerpc,ia64,arm,armthumb,arm64,sparc,riscv}=-'[add a branch/call/jump filter]::option:->bcj-options' \
+    '(I level decomp --extreme)--filters=[set filter chain using liblzma filter string]:filter string' \
+    '!(I level decomp --extreme)--filters'{1..9}'=:filter string' \
     '(I level decomp --extreme)'--lzma{1,2}=-'[add lzma filter]::option:->lzma-options' \
     '(I level decomp --extreme)--delta=-[add delta filter]::option:->delta-options' && ret=0
   ;;
diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs
index 3e2882536..47e60ec66 100644
--- a/Completion/Unix/Command/_zfs
+++ b/Completion/Unix/Command/_zfs
@@ -477,9 +477,11 @@ case $service:$words[1] in
   ;;
 
   zfs:clone)
-    [[ $implementation = solaris ]] && args+=(
-    '-K[create encryption key]'
-  )
+    if [[ $implementation = solaris ]]; then
+      args+=( '-K[create encryption key]' )
+    else
+      args+=( "-u[don't mount newly created dataset]" )
+    fi
   _arguments -C -A "-*" -S $args \
     '-p[create parent datasets]' \
     '*-o+[set property]:property:->create-properties' \
diff --git a/Completion/Unix/Command/_zstd b/Completion/Unix/Command/_zstd
index 92c4a8e41..c1b5c65a7 100644
--- a/Completion/Unix/Command/_zstd
+++ b/Completion/Unix/Command/_zstd
@@ -52,6 +52,7 @@ elif (( $words[(I)(-d|--decompress|--uncompress|-l|--list|-t|--test)] )); then
     '(--sparse)-o[specify output file]:file:_files -g "^*.(|t)zst(-.)"'
     "(M)--no-check[ignore checksums in compressed frame]"
     '!(M --no-check)'{-C,--check}
+    '--pass-through[pass through uncompressed files as-is]'
     '*:files:_files -g "*.(|t)zst(-.)"'
   )
 else
@@ -108,6 +109,7 @@ _arguments -s -S : $args \
   '--filelist=[read list of files to operate upon from file]: :_files' \
   '--output-dir-flat=[store processed files in directory]: :_directories' \
   '--output-dir-mirror=[store processed files in directory respecting original structure]: :_directories' \
+  '--no-asyncio[display asynchronous IO]' \
   '--trace=[log tracing information to file]: :_files' \
   + '(M)' \
   \!{-z,--compress,--uncompress} \




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