about summary refs log tree commit diff
path: root/Completion/Unix/Command
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command')
-rw-r--r--Completion/Unix/Command/_cowsay39
-rw-r--r--Completion/Unix/Command/_git88
-rw-r--r--Completion/Unix/Command/_gsettings5
-rw-r--r--Completion/Unix/Command/_gzip7
-rw-r--r--Completion/Unix/Command/_ssh113
-rw-r--r--Completion/Unix/Command/_sudo3
-rw-r--r--Completion/Unix/Command/_tidy8
-rw-r--r--Completion/Unix/Command/_tmux72
-rw-r--r--Completion/Unix/Command/_truss3
-rw-r--r--Completion/Unix/Command/_wget4
10 files changed, 190 insertions, 152 deletions
diff --git a/Completion/Unix/Command/_cowsay b/Completion/Unix/Command/_cowsay
index 19e73811c..8a1b4c4c9 100644
--- a/Completion/Unix/Command/_cowsay
+++ b/Completion/Unix/Command/_cowsay
@@ -3,26 +3,29 @@
 local context state line
 typeset -A opt_args
 
-_arguments \
-  '-e:eye string:' \
-  '-f:cowfile:->cowfile' \
-  '-T:tongue string:' \
-  '-W:wrap column:' \
-  '-b[borg mode]' \
-  '-d[dead mode]' \
-  '-g[greedy mode]' \
-  '-h[help]' \
-  '-l[list]' \
-  '-n[no wordwrap]' \
-  '-p[paranoia mode]' \
-  '-s[stoned mode]' \
-  '-t[tired mode]' \
-  '-w[wired mode]' \
-  '-y[youthful mode]' \
-  ':message:' && return 0
+_arguments -s -S -A "-*" \
+  "(H mode)-e+[specify cow's eyes]:eye string [oo]" \
+  '(H)-f+[specify cowfile]:cowfile:->cowfile' \
+  "(H mode)-T+[specify cow's tongue]:tongue string" \
+  '(H)-W+[specify width for message word wrap]:wrap column [40]' \
+  '(H)-n[no wordwrap]' \
+  '*:message' \
+  + 'H' \
+  '(- *)-h[display usage information]' \
+  '(- *)-l[list all cowfiles]' \
+  + '(mode)' \
+  '(H -e -T)-b[borg mode]' \
+  '(H -e -T)-d[dead mode]' \
+  '(H -e -T)-g[greedy mode]' \
+  '(H -e -T)-p[paranoia mode]' \
+  '(H -e -T)-s[stoned mode]' \
+  '(H -e -T)-t[tired mode]' \
+  '(H -e -T)-w[wired mode]' \
+  '(H -e -T)-y[youthful mode]' && return
 
 case "$state" in
   (cowfile)
-  compadd ${=${(f)"$($service -l 2>/dev/null)"}:#*\:} || _files
+    _wanted -C option-f-1 cowfiles expl 'cow file' compadd \
+      ${=${(f)"$(_call_program cowfiles $words[1] -l)"}:#*\:} || _files -g "*.cow(-.)"
   ;;
 esac
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index a46da5b3c..30ca80835 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -60,9 +60,10 @@ _git-add () {
     '(-i --interactive : -)'{-i,--interactive}'[add contents interactively to index]' \
     '(-p --patch)'{-p,--patch}'[like -i but go directly into patch mode for specified files]' \
     '(-e --edit)'{-e,--edit}'[open diff against index in editor]' \
-    '(-A --all --no-ignore-removal -u --update --no-all --ignore-removal)'{-A,--all,--no-ignore-removal}'[add, modify, and remove index entries to match the working tree]' \
-    '(-A --all --no-ignore-removal -u --update --no-all --ignore-removal)'{--no-all,--ignore-removal}'[like "--all" but ignore removals]' \
+    '(-A --all --no-ignore-removal -u --update --no-all --ignore-removal --renormalize)'{-A,--all,--no-ignore-removal}'[add, modify, and remove index entries to match the working tree]' \
+    '(-A --all --no-ignore-removal -u --update --no-all --ignore-removal --renormalize)'{--no-all,--ignore-removal}'[like "--all" but ignore removals]' \
     '(-A --all --no-ignore-removal -u --update --no-all --ignore-removal)'{-u,--update}'[update the index just where it already has an entry matching <pathspec>]' \
+    '(-A --all --no-ignore-removal -u --update --no-all --ignore-removal)--renormalize[renormalize EOL of tracked files (implies -u)]' \
     '(-N --intent-to-add)'{-N,--intent-to-add}'[record only that path will be added later]' \
     '--refresh[do not add files, but refresh their stat() info in index]' \
     '--ignore-errors[continue adding if an error occurs]' \
@@ -1207,7 +1208,6 @@ _git-merge () {
     '--abort[restore the original branch and abort the merge operation]' \
     '--continue[continue the current in-progress merge]' \
     '--progress[force progress reporting]' \
-    '--signoff[add Signed-off-by:]' \
     '--verify[verify commit-msg hook]' \
     '*: : __git_commits -O expl:git_commit_opts'
 }
@@ -1751,7 +1751,7 @@ _git-status () {
                                                                                      normal\:"show untracked files and directories" \
                                                                                      all\:"also show untracked files in untracked directories (default)"))' \
     '--ignore-submodules[ignore changes to submodules]:: :__git_ignore_submodules_whens' \
-    '--ignored[show ignored files as well]' \
+    '--ignored=-[show ignored files as well]:mode [traditional]:(traditional matching no)' \
     '(-z --null --column --no-column)'{-z,--null}'[use NUL termination on output]' \
     '(--no-column -z --null)--column=-[display in columns]::column.status option:((always\:"always show in columns" never\:"never show in columns" auto\:"show in columns if the output is to the terminal" column\:"fill columns before rows (default)" row\:"fill rows before columns" plain\:"show in one column" dense\:"make unequal size columns to utilize more space" nodense\:"make equal size columns"))' \
     '(--column)--no-column[do not display in columns]' \
@@ -2126,10 +2126,11 @@ _git-config () {
     '(--global --system         -f --file --blob)--local[use local config file]' \
     '(--global --system --local           --blob)'{-f+,--file=}'[use given config file]:config file:_files' \
     '(--global --system --local -f --file)--blob=[read config from given blob object]:blob:__git_blobs' \
-    '(       --int --bool-or-int --path)--bool[setting is a boolean]' \
-    '(--bool       --bool-or-int --path)--int[setting is an integer]' \
-    '(--bool --int               --path)--bool-or-int[setting is an integer]' \
-    '(--bool --int --bool-or-int       )--path[setting is a path]' \
+    '(       --int --bool-or-int --path --expiry-date)--bool[setting is a boolean]' \
+    '(--bool       --bool-or-int --path --expiry-date)--int[setting is an integer]' \
+    '(--bool --int               --path --expiry-date)--bool-or-int[setting is an integer]' \
+    '(--bool --int --bool-or-int        --expiry-date)--path[setting is a path]' \
+    '(--bool --int --bool-or-int --path              )--expiry-date[setting is an expiry date]' \
     '(-z --null)'{-z,--null}'[end values with NUL and newline between key and value]' \
     '(--get --get-all --get-urlmatch --replace-all --add --unset --unset-all --rename-section --remove-section -e --edit --get-color --get-colorbool)--name-only[show variable names only]' \
     '(--includes)'--no-includes"[don't respect \"include.*\" directives]" \
@@ -4669,6 +4670,8 @@ _git-pack-objects () {
     '--keep-true-parents[pack parents hidden by grafts]' \
     '--use-bitmap-index[use a bitmap index if available to speed up counting objects]' \
     '--write-bitmap-index[write a bitmap index together with the pack index]' \
+    '--filter=[omit certain objects from pack file]:filter:_git_rev-list_filters' \
+    '--missing=[specify how missing objects are handled]:action:(error allow-any print)' \
     ':base-name:_files'
 }
 
@@ -4781,6 +4784,10 @@ _git-update-index () {
     '--untracked-cache[enable/disable untracked cache]' \
     '--test-untracked-cache[test if the filesystem supports untracked cache]' \
     '--force-untracked-cache[enable untracked cache without testing the filesystem]' \
+    '--force-write-index[write out the index even if is not flagged as changed]' \
+    '--fsmonitor[enable or disable file system monitor]' \
+    '--fsmonitor-valid[mark files as fsmonitor valid]' \
+    '--no-fsmonitor-valid[clear fsmonitor valid bit]' \
     $z_opt \
     '*:: :_files'
 }
@@ -4972,7 +4979,8 @@ _git-ls-files () {
     '--exclude-standard[skip files in standard Git exclusion lists]' \
     '--error-unmatch[if any file does not appear in index, treat this as an error]' \
     '(-s --stage -u --unmerged)--with-tree=[treat paths removed since given tree-ish as still present]: :__git_tree_ishs' \
-    '-v[identify each files status (hmrck?)]' \
+    '(-f)-v[indicate status of each file using lowercase for assume changed files]' \
+    '(-v)-f[indicate status of each file using lowercase for fsmonitor clean files]' \
     '--full-name[force paths to be output relative to the project top directory]' \
     '--recurse-submodules[recurse through submodules]' \
     '--abbrev=[set minimum SHA1 display-length]: :__git_guard_number length' \
@@ -5069,7 +5077,14 @@ _git-rev-list () {
 
   _arguments -C -S \
     $revision_options \
-    '(--pretty)--header[display contents of commit in raw-format]' \
+    '--no-filter[turn off any previous --filter argument]' \
+    '--filter-print-omitted[print a list of objects omitted by --filter]' \
+    '--filter=[omit certain objects from pack file]:filter:_git_rev-list_filters' \
+    '--missing=[specify how missing objects are handled]:action:(error allow-any print)' \
+    '(--count --pretty --header --left-right --abbrev-commit --abbrev --parent --children)--quiet[print nothing; exit status indicates if objects are fully connected]' \
+    '--use-bitmap-index[try to speed traversal using pack bitmap index if available]' \
+    '--progress=-[show progress reports as objects are considered]:header' \
+    '(--pretty --quiet)--header[display contents of commit in raw-format]' \
     '--timestamp[print raw commit timestamp]' \
     '(         --bisect-vars --bisect-all)--bisect[show only middlemost commit object]' \
     '(--bisect)--bisect-vars[same as --bisect, displaying shell-evalable code]' \
@@ -5092,6 +5107,15 @@ _git-rev-list () {
   return ret
 }
 
+(( $+functions[_git_rev-list_filters] )) ||
+_git_rev-list_filters() {
+  _values 'filter' \
+    'blob\:none[omit all blobs]' \
+    'blob\:limit[omit blobs larger than specified size]:size' \
+    'sparse\:oid[uses a sparse-checkout specification contained in the blob]:blob-ish' \
+    'sparse\:path[uses a sparse-checkout specification contained in path]:path:_directories'
+}
+
 (( $+functions[_git-show-index] )) ||
 _git-show-index () {
   _message 'no arguments allowed; accepts index file on standard input'
@@ -5812,16 +5836,24 @@ __git_extract_aliases () {
 __git_date_formats () {
   declare -a date_formats
 
+  if compset -P 'format:'; then
+    _strftime
+    return
+  fi
+
   date_formats=(
     relative:'show dates relative to the current time'
     local:'show timestamps in local timezone'
-    iso:'show timestamps in ISO 8601 format'
-    rfc:'show timestamps in RFC 2822 format'
+    iso{,8601}:'show timestamps in ISO 8601 format'
+    iso-strict:'show timestamps in strict ISO 8601 format'
+    rfc{,2822}:'show timestamps in RFC 2822 format'
     short:'show only date but not time'
     raw:'show date in internal raw git format (%s %z)'
-    default:'show timestamp in the original timezone')
+    unix:'show date as a Unix epoch timestamp'
+    default:'show timestamp in the original timezone'
+  )
 
-  _describe -t date-formats 'date format' date_formats $*
+  _describe -t date-formats 'date format' date_formats -- '( format\:custom\ format )' -S :
 }
 
 (( $+functions[__git_gpg_secret_keys] )) ||
@@ -6983,6 +7015,8 @@ __git_setup_log_options () {
   # TODO: Need to implement -<n> for limiting the number of commits to show.
   log_options=(
     '(- *)-h[display help]'
+    '--decorate-refs=[only decorate refs that match pattern]:pattern'
+    "--decorate-refs-exclude=[don't decorate refs that match pattern]:pattern"
     '(           --no-decorate)--decorate=-[print out ref names of any commits that are shown]: :__git_log_decorate_formats'
     '(--decorate              )--no-decorate[do not print out ref names of any commits that are shown]'
     '(          --no-follow)--follow[follow renames]'
@@ -7204,16 +7238,19 @@ __git_setup_revision_options () {
     '*--author=[limit commits to those by given author]:author'
     '*--committer=[limit commits to those by given committer]:committer'
     '*--grep=[limit commits to those with log messages matching the given pattern]:pattern'
-    '--all-match[limit commits to ones matching all --grep, --author, and --committer]'
+    '--all-match[limit commits to those matching all --grep, --author, and --committer]'
+    '--invert-grep[limit commits to those not matching --grep, --author and --committer]'
     '(-i --regexp-ignore-case)'{-i,--regexp-ignore-case}'[match regexps ignoring case]'
-    '(-E --extended-regexp)'{-E,--extended-regexp}'[use POSIX extended regexps]'
-    '(-F --fixed-strings)'{-F,--fixed-strings}'[do not interpret patterns as regexps]'
+    '!(-E --extended-regexp -F --fixed-strings -P --perl-regexp)--basic-regexp'
+    '(-E --extended-regexp -F --fixed-strings -P --perl-regexp)'{-E,--extended-regexp}'[use POSIX extended regexps]'
+    '(-E --extended-regexp -F --fixed-strings -P --perl-regexp)'{-F,--fixed-strings}"[don't interpret patterns as regexps]"
+    '(-E --extended-regexp -F --fixed-strings -P --perl-regexp)'{-P,--perl-regexp}'[use perl regular expression]'
     '--remove-empty[stop when given path disappears from tree]'
-    '--merges[display only merge commits]'
-    '--no-merges[do not display commits with more than one parent]'
-    '(--min-parents --no-min-parents)--min-parents=-[show only commits having at least <n> commits]: :__git_guard_number "minimum number of parents"'
-    '(--min-parents --no-min-parents)--no-min-parents[reset limit]'
-    '(--max-parents --no-max-parents)--max-parents=-[show only commits having at most <n> commits]: :__git_guard_number "maximum number of parents"'
+    '(--no-merges --min-parents)--merges[display only merge commits]'
+    "(--merges --max-parents)--no-merges[don't display commits with more than one parent]"
+    '(--min-parents --no-min-parents --merges)--min-parents=-[show only commits with at least specified number of commits]: :__git_guard_number "number of parents"'
+    '(--min-parents --no-min-parents --merges)--no-min-parents[reset limit]'
+    '(--max-parents --no-max-parents --no-merges)--max-parents=-[show only commits with at most specified number of commits]: :__git_guard_number "number of parents"'
     '(--max-parents --no-max-parents)--no-max-parents[reset limit]'
     '--first-parent[follow only first parent from merge commits]'
     '*--not[reverses meaning of ^ prefix for revisions that follow]'
@@ -7242,18 +7279,20 @@ __git_setup_revision_options () {
     '(-g --walk-reflogs)--reverse[display commits in reverse order]'
     '(          --objects-edge)--objects[display object ids of objects referenced by listed commits]'
     '(--objects               )--objects-edge[display object ids of objects referenced by listed and excluded commits]'
-    '(          --do-walk)--no-walk[only display given revs, do not traverse their ancestors]'
+    "(          --do-walk)--no-walk=-[only display given revs, don't traverse their ancestors]::order:(sorted unsorted)"
     '(--no-walk          )--do-walk[only display given revs, traversing their ancestors]'
     '(              --cherry-pick)--cherry-mark[like --cherry-pick but mark equivalent commits instead of omitting them]'
     '(--cherry-pick              )--cherry-pick[omit any commit that introduces the same change as another commit on "the other side" of a symmetric range]'
     '(            --right-only)--left-only[list only commits on the left side of a symmetric range]'
     '(--left-only             )--right-only[list only commits on the right side of a symmetric range]'
-    '(--left-only --right-only --cherry-pick --cherry-mark)--cherry[synonym for --right-only --cherry-mark --no-merges]'
+    '(--left-only --right-only --cherry-pick --cherry-mark --no-merges --merges --max-parents)--cherry[synonym for --right-only --cherry-mark --no-merges]'
     '(-c --cc            )--full-diff[show full commit diffs when using log -p, not only those affecting the given path]'
     '--log-size[print log message size in bytes before the message]'
     '--use-mailmap[use mailmap file to map author and committer names and email]'
 
     '--reflog[show all commits from reflogs]'
+    '--single-worktree[examine the current working tree only]'
+    '--stdin[additionally read commits from standard input]'
     '--default[use argument as default revision]:default revision:__git_revisions'
     # TODO: --early-output is undocumented.
     '--early-output=-[undocumented]::undocumented'
@@ -7278,6 +7317,7 @@ __git_setup_merge_options () {
     '(-n --no-stat)--stat[show a diffstat at the end of the merge]'
     '(--stat -n --no-stat)'{-n,--no-stat}'[do not show diffstat at the end of the merge]'
     '(         --no-squash)--squash[merge, but do not commit]'
+    '--signoff[add Signed-off-by:]'
     '(--squash            )--no-squash[merge and commit]'
     '--ff-only[refuse to merge unless HEAD is up to date or merge can be resolved as a fast-forward]'
     '(-S --gpg-sign --no-gpg-sign)'{-S-,--gpg-sign=-}'[GPG-sign the commit]::key id'
diff --git a/Completion/Unix/Command/_gsettings b/Completion/Unix/Command/_gsettings
index 890b56403..2724be0ea 100644
--- a/Completion/Unix/Command/_gsettings
+++ b/Completion/Unix/Command/_gsettings
@@ -3,7 +3,7 @@
 local curcontext="$curcontext" state line expl ret=1
 local subcmds
 
-_arguments \
+_arguments -A "-*" \
   '(- 1 *)--version[show version information]' \
   '--schemadir[specify location of schemata]:directory:_directories' \
   ':command:->subcmds' \
@@ -20,6 +20,9 @@ if [[ $state = subargs ]]; then
       _arguments ':schema:->schemata' ':key:->keys' ':value'
     ;;
     (list|reset)-(keys|recursively|children)) state=schemata ;;
+    list-schemas)
+      _arguments '--print-paths'
+    ;;
     *) _default && ret=0 ;;
   esac
 fi
diff --git a/Completion/Unix/Command/_gzip b/Completion/Unix/Command/_gzip
index f9fd17819..42d4ae705 100644
--- a/Completion/Unix/Command/_gzip
+++ b/Completion/Unix/Command/_gzip
@@ -13,7 +13,9 @@ unpigz|pigz)
     '(-b --blocksize)'{-b+,--blocksize}'[set compression block size]:size (KiB)'
     '(-p --processes)'{-p,--processes}'[specify number of processes to use]'
     '(-z --zlib)'{-z,--zlib}'[compress to zlib (.zz) format]'
-    '(-T --no-time)'{-T,--no-time}"[don't store/restore modification time in/from header]"
+    '(-m --no-time)'{-m,--no-time}"[don't store/restore modification time in/from header]"
+    '(-M --time)'{-M,--time}"[store/restore modification time in/from header]"
+    '(--synchronous)-Y[force output file write to permanent storage]'
   )
 ;|
 pigz)
@@ -23,7 +25,7 @@ pigz)
     '(--rsyncable)-R[make rsync-friendly archive]'
     "($excl)"{-F,--first}'[do iterations first, before block split]'
     "($excl)"{-I+,--iterations}'[specify number of iterations for optimization]:iterations [15]'
-    "($excl)"{-M+,--maxsplits}'[specify maximum number of split blocks]:split blocks [15]'
+    "($excl)"{-J+,--maxsplits}'[specify maximum number of split blocks]:split blocks [15]'
     "($excl)"{-O,--oneblock}"[don't split into smaller blocks]"
   )
 ;|
@@ -62,6 +64,7 @@ gzip|pigz)
     '(-R)--rsyncable[make rsync-friendly archive]' \
     '(--suffix)-S+[specify suffix for compressed files]:suffix:' \
     '(-S)--suffix=[specify suffix for compressed files]:suffix:' \
+    '(-Y)--synchronous[force output file write to permanent storage]' \
     '(--test)-t[test compressed file integrity]' \
     '(-t)--test[test compressed file integrity]' \
     '(--verbose)-v[verbose mode]' \
diff --git a/Completion/Unix/Command/_ssh b/Completion/Unix/Command/_ssh
index e5d51dd29..8a122a5b3 100644
--- a/Completion/Unix/Command/_ssh
+++ b/Completion/Unix/Command/_ssh
@@ -8,19 +8,16 @@ _ssh () {
   typeset -A opt_args
 
   common=(
-    '(-2)-1[forces ssh to try protocol version 1 only]'
-    '(-1)-2[forces ssh to try protocol version 2 only]'
     '(-6)-4[forces ssh to use IPv4 addresses only]'
     '(-4)-6[forces ssh to use IPv6 addresses only]'
     '-C[compress data]'
-    # for protocol version 2, this can be a comma-separated list
-    '-c+[select encryption cipher]:encryption cipher:(idea des 3des blowfish arcfour tss none)'
+    '-c+[select encryption cipher]:encryption cipher:->ciphers'
     '-F+[specify alternate config file]:config file:_files'
     '*-i+[select identity file]:SSH identity file:_files -g "*(-.^AR)"'
     '*-o+[specify extra options]:option string:->option'
   )
   common_transfer=(
-    '-l+[limit used bandwidth]:bandwidth in Kbit/s:'
+    '-l+[limit used bandwidth]:bandwidth (Kbit/s)'
     '-P+[specify port on remote host]:port number on remote host'
     '-p[preserve modification times, access times and modes]'
     '-q[disable progress meter and warnings]'
@@ -49,8 +46,8 @@ _ssh () {
       '*-L+[specify local port forwarding]:local port forwarding:->forward' \
       '-l+[specify login name]:login name:_ssh_users' \
       '-M[master mode for connection sharing]' \
-      '(-1)-m+[specify mac algorithms]:mac spec:->macs' \
-      '(-1)-N[do not execute a remote command (protocol version 2 only)]' \
+      '-m+[specify mac algorithms]: :->macs' \
+      "-N[don't execute a remote command]" \
       '-n[redirect stdin from /dev/null]' \
       '-O+[control an active connection multiplexing master process]:multiplex control command:((check\:"check master process is running" exit\:"request the master to exit" forward\:"request forward without command execution" stop\:"request the master to stop accepting further multiplexing requests" cancel\:"cancel existing forwardings with -L and/or -R" proxy))' \
       '-P[use non privileged port]' \
@@ -59,8 +56,8 @@ _ssh () {
       '*-R+[specify remote port forwarding]:remote port forwarding:->forward' \
       '-S+[specify location of control socket for connection sharing]:path to control socket:_files' \
       '-Q+[query parameters]:parameter type:((cipher\:"supported symmetric ciphers" cipher-auth\:"supported symmetric ciphers that support authenticated encryption" mac\:"supported message integrity codes" kex\:"key exchange algorithms" key\:"key types" protocol-version\:"supported SSH protocol versions"))' \
-      '(-1)-s[invoke subsystem]' \
-      '(-1 -t)-T[disable pseudo-tty allocation (protocol version 2 only)]' \
+      '-s[invoke subsystem]' \
+      '(-t)-T[disable pseudo-tty allocation]' \
       '(-T)-t[force pseudo-tty allocation]' \
       '-V[show version number]' \
       '(-q)*-v[verbose mode (multiple increase verbosity, up to 3)]' \
@@ -95,6 +92,7 @@ _ssh () {
       '-l[list all identities]' \
       '-s+[add keys provided by the PKCS#11 shared library]:library:_files -g "*.(so|dylib)(|.<->)(-.)"' \
       '-t+[set maximum lifetime for identity]:maximum lifetime (in seconds or time format):' \
+      '-q[be quiet after a successful operation]' \
       '-X[unlock the agent]' \
       '-x[lock the agent with a password]' \
       '*:SSH identity file:_files'
@@ -177,8 +175,14 @@ _ssh () {
       "($cmn)-s[$sdesc]:CA key:_files" \
       "$p1($cmn -f -u)-I+[specify key identifier to include in certificate]:key id" \
       "$p1($cmn -f -u)-h[generate host certificate instead of a user certificate]" \
+      "$p1($cmn -f -u -D)-U[indicate that CA key is held by ssh-agent]" \
+      "$p1($cmn -f -u -U)-D+[indicate the CA key is stored in a PKCS#11 token]:PKCS11 shared library:_files -g '*.(so|dylib)(|.<->)(-.)'" \
       "$p1($cmn -f -u)-n+[specify user/host principal names to include in certificate]:principals" \
-      "$p1($cmn -f -u)-O+[specify a certificate option]:option" \
+      "$p1($cmn -f -u)*-O+[specify a certificate option]: : _values 'option'
+        clear critical\:name extension\:name force-command\:command\:_cmdstring
+	no-agent-forwarding no-port-forwarding no-pty no-user-rc no-x11-forwarding
+	permit-agent-forwarding permit-port-forwarding permit-pty permit-user-rc
+	permit-x11-forwarding source-address\:source\ address" \
       "$p1($cmn -f -u)-V+[specify certificate validity interval]:interval" \
       "($cmn -I -h -n -O -V)-k[generate a KRL file]" \
       "$p1($cmn -I -h -n -O -V)-u[update a KRL]"
@@ -217,7 +221,7 @@ _ssh () {
           ;;
         esac
         case "${IPREFIX#-o}" in
-        (#i)(afstokenpassing|batchmode|canonicalizefallbacklocal|challengeresponseauthentication|checkhostip|clearallforwardings|compression|enablesshkeysign|exitonforwardfailure|fallbacktorsh|forward(agent|x11)|forwardx11trusted|gatewayports|gssapiauthentication|gssapidelegatecredentials|gssapitrustdns|hashknownhosts|hostbasedauthentication|identitiesonly|kbdinteractiveauthentication|(tcp|)keepalive|nohostauthenticationforlocalhost|passwordauthentication|permitlocalcommand|proxyusefdpass|pubkeyauthentication|rhosts(|rsa)authentication|rsaauthentication|streamlocalbindunlink|usersh|kerberos(authentication|tgtpassing)|useprivilegedport|visualhostkey)=*)
+        (#i)(afstokenpassing|batchmode|canonicalizefallbacklocal|challengeresponseauthentication|checkhostip|clearallforwardings|compression|enablesshkeysign|exitonforwardfailure|fallbacktorsh|forward(agent|x11)|forwardx11trusted|gatewayports|gssapiauthentication|gssapidelegatecredentials|gssapikeyexchange|gssapirenewalforcesrekey|gssapitrustdns|hashknownhosts|hostbasedauthentication|identitiesonly|kbdinteractiveauthentication|(tcp|)keepalive|nohostauthenticationforlocalhost|passwordauthentication|permitlocalcommand|proxyusefdpass|pubkeyauthentication|rhosts(|rsa)authentication|rsaauthentication|streamlocalbindunlink|usersh|kerberos(authentication|tgtpassing)|useprivilegedport|visualhostkey)=*)
           _wanted values expl 'truth value' compadd yes no && ret=0
           ;;
         (#i)addressfamily=*)
@@ -239,32 +243,7 @@ _ssh () {
           _message -e 'CNAME rule list (source_domain_list:target_domain_list, each pattern list comma separated)' && ret=0
           ;;
         (#i)ciphers=*)
-          _values -s , 'encryption cipher' \
-              '3des-cbc' \
-              'aes128-cbc' \
-              'aes192-cbc' \
-              'aes256-cbc' \
-              'aes128-ctr' \
-              'aes192-ctr' \
-              'aes256-ctr' \
-              'arcfour128' \
-              'arcfour256' \
-              'arcfour' \
-              'blowfish-cbc' \
-              'cast128-cbc' \
-              \
-              'rijndael128-cbc' \
-              'rijndael192-cbc' \
-              'rijndael256-cbc' \
-              'rijndael-cbc@lysator.liu.se' \
-              && ret=0
-          ;;
-        (#i)cipher=*)
-          _wanted values expl 'encryption cipher (protocol version 1)' \
-              compadd blowfish 3des des idea arcfour tss none && ret=0
-          ;;
-        (#i)compressionlevel=*)
-          _values 'compression level' {1..9} && ret=0
+          state=ciphers
           ;;
         (#i)connectionattempts=*)
           _message -e 'connection attempts' && ret=0
@@ -304,21 +283,7 @@ _ssh () {
           _wanted hosts expl 'real host name to log into' _ssh_hosts && ret=0
           ;;
         (#i)(hostbasedkeytypes|hostkeyalgorithms|pubkeyacceptedkeytypes)=*)
-          _values -s , 'key types' \
-              'ecdsa-sha2-nistp256-cert-v01@openssh.com' \
-              'ecdsa-sha2-nistp384-cert-v01@openssh.com' \
-              'ecdsa-sha2-nistp521-cert-v01@openssh.com' \
-              'ssh-ed25519-cert-v01@openssh.com' \
-              'ssh-rsa-cert-v01@openssh.com' \
-              'ssh-dss-cert-v01@openssh.com' \
-              'ssh-rsa-cert-v00@openssh.com' \
-              'ssh-dss-cert-v00@openssh.com' \
-              'ecdsa-sha2-nistp256' \
-              'ecdsa-sha2-nistp384' \
-              'ecdsa-sha2-nistp521' \
-              'ssh-ed25519' \
-              'ssh-rsa' \
-              'ssh-dss' && ret=0
+	  _wanted key-types expl 'key type' _sequence compadd - $(_call_program key-types ssh -Q key) && ret=0
           ;;
         (#i)identityfile=*)
           _description files expl 'SSH identity file'
@@ -350,12 +315,9 @@ _ssh () {
           _values -s , 'keyboard-interactive authentication methods' \
               'bsdauth' 'pam' 'skey' && ret=0
           ;;
-        (#i)kexalgorithms=*)
-          _values -s , 'KEX algorithms' \
-              ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 \
-              diffie-hellman-group-exchange-sha256 \
-              diffie-hellman-group-exchange-sha1 \
-              diffie-hellman-group14-sha1 diffie-hellman-group1-sha1 && ret=0
+        (#i)(kexalgorithms|gssapikexalgorithms)=*)
+          _wanted algorithms expl 'key exchange algorithm' _sequence compadd - \
+              $(_call_program algorithms ssh -Q kex) && ret=0
           ;;
         (#i)localcommand=*)
           _description commands expl 'run command locally after connecting'
@@ -389,7 +351,7 @@ _ssh () {
               '1' \
               '2' && ret=0
           ;;
-        (#i)proxycommand=*)
+        (#i)(proxy|remote)command=*)
           _cmdstring && ret=0
           ;;
         (#i)rekeylimit=*)
@@ -421,7 +383,13 @@ _ssh () {
         (#i)streamlocalbindmask=*)
           _message -e 'octal mask' && ret=0
           ;;
-        (#i)(stricthostkeychecking|verifyhostkeydns|updatehostkeys)=*)
+        (#i)stricthostkeychecking=*)
+          _wanted values expl 'value' compadd yes no ask accept-new off && ret=0
+          ;;
+        (#i)syslogfacility=*)
+          _wanted facilities expl 'facility' compadd -M 'm:{a-z}={A-Z}' DAEMON USER AUTH LOCAL{0,1,2,3,4,5,6,7} && ret=0
+          ;;
+        (#i)(verifyhostkeydns|updatehostkeys)=*)
           _wanted values expl 'truthish value' compadd yes no ask && ret=0
           ;;
         (#i)transport=*)
@@ -466,11 +434,9 @@ _ssh () {
                 CertificateFile \
                 ChallengeResponseAuthentication \
                 CheckHostIP \
-                Cipher \
                 Ciphers \
                 ClearAllForwardings \
                 Compression \
-                CompressionLevel \
                 ConnectionAttempts \
                 ConnectTimeout \
                 ControlMaster \
@@ -488,10 +454,14 @@ _ssh () {
                 GatewayPorts \
                 GlobalKnownHostsFile \
                 GSSAPIAuthentication \
+                GSSAPIClientIdentity \
                 GSSAPIDelegateCredentials \
+                GSSAPIKeyExchange \
+                GSSAPIRenewalForcesRekey \
+                GSSAPIServerIdentity \
                 GSSAPITrustDns \
+                GSSAPIKexAlgorithms \
                 HashKnownHosts \
-                Host \
                 HostbasedAuthentication \
                 HostbasedKeyTypes \
                 HostKeyAlgorithms \
@@ -516,13 +486,13 @@ _ssh () {
                 PKCS11Provider \
                 Port \
                 PreferredAuthentications \
-                Protocol \
                 ProxyCommand \
                 ProxyJump \
                 ProxyUseFdpass \
                 PubkeyAcceptedKeyTypes \
                 PubkeyAuthentication \
                 RekeyLimit \
+                RemoteCommand \
                 RemoteForward \
                 RequestTTY \
                 RevokedHostKeys \
@@ -534,8 +504,8 @@ _ssh () {
                 StreamLocalBindMask \
                 StreamLocalBindUnlink \
                 StrictHostKeyChecking \
+                SyslogFacility \
                 TCPKeepAlive \
-                Transport \
                 Tunnel \
                 TunnelDevice \
                 UpdateHostKeys \
@@ -608,11 +578,18 @@ _ssh () {
       return ret
       ;;
     macs)
-      _values -s , 'MAC algorithms' hmac-md5 hmac-sha1 umac-64@openssh.com \
-          hmac-ripemd160 hmac-sha1-96 hmac-md5-96 hmac-sha2-256 \
-          hmac-sha2-256-96 hmac-sha2-512 hmac-sha2-512-96 && ret=0
+      _wanted macs expl 'MAC algorithm' _sequence compadd - $(_call_program macs ssh -Q mac)
+      return
+      ;;
+    ciphers)
+      _wanted ciphers expl 'encryption cipher' _sequence compadd - $(_call_program ciphers ssh -Q cipher)
+      return
       ;;
     command)
+      if (( $+opt_args[-s] )); then
+	_wanted subsystems expl subsystem compadd sftp
+	return
+      fi
       local -a _comp_priv_prefix
       shift 1 words
       (( CURRENT-- ))
diff --git a/Completion/Unix/Command/_sudo b/Completion/Unix/Command/_sudo
index ec293d469..10fa2e82e 100644
--- a/Completion/Unix/Command/_sudo
+++ b/Completion/Unix/Command/_sudo
@@ -47,7 +47,8 @@ else
     '(-s --shell)'{-s,--shell}'[run shell as the target user; a command may also be specified]' \
     '(-i --login)'{-i,--login}'[run login shell as the target user; a command may also be specified]' \
     '(-b --background -i --login -s --shell -e --edit)'{-b,--background}'[run command in the background]' \
-    '(-E --preserve-env -i --login -s --shell -e --edit)'{-E,--preserve-env}'[preserve user environment when running command]' \
+    '(--preserve-env -i --login -s --shell -e --edit)-E[preserve user environment when running command]' \
+    '(-E -i --login -s --shell -e --edit)--preserve-env=-[preserve user environment when running command]::environment variable:_sequence _parameters -g "*export*"' \
     '(-H --set-home -i --login -s --shell -e --edit)'{-H,--set-home}"[set HOME variable to target user's home dir]" \
     '(-P --preserve-groups -i -login -s --shell -e --edit)'{-P,--preserve-groups}"[preserve group vector instead of setting to target's]" \
     '(-)1:command: _command_names -e'
diff --git a/Completion/Unix/Command/_tidy b/Completion/Unix/Command/_tidy
index a4dccd5f5..3998ccdb3 100644
--- a/Completion/Unix/Command/_tidy
+++ b/Completion/Unix/Command/_tidy
@@ -6,8 +6,8 @@ opts=( ${${${(s.</option>.)"$(_call_program options $words[1] -xml-config)"}##*<
 opts=( ${opts/;Integer*/:number} )
 opts=( ${opts/;Boolean*/:boolean:(yes no)} )
 opts=( ${opts/;AutoBool*/:value:(auto yes no)} )
-opts=( ${opts/;(String|Tag)*/:value} )
-opts=( ${opts/(#b);(enum|Encoding|DocType)*<default>(*)<*<example>([^<]#)<*/:value [${match[2]%% *}]:(${(j. .)${(@s., .)match[3]}%% *})} )
+opts=( ${opts/;(String|Tag|Attributes)*/:value} )
+opts=( ${opts/(#bi);(enum|Encoding|DocType)*<default>(*)<*<example>([^<]#)<*/:value [${match[2]%% *}]:(${(j. .)${(@s., .)match[3]}%% *})} )
 opts=( ${(M)opts:#*:*} )
 
 _arguments -s -A "-*" --$^opts \
@@ -33,7 +33,10 @@ _arguments -s -A "-*" --$^opts \
   '(- *)'{-version,-v}'[show the version of Tidy]' \
   '(- *)'{-help,-h,-\?}'[list the command line options]' \
   '(- *)-help-config[list all configuration options]' \
+  '(- *)-help-env[show details of environment and runtime configuration]' \
   '(- *)-show-config[list the current configuration settings]' \
+  '(- *)-export-config[list the current settings in config file form]' \
+  '(- *)-export-default-config[list the default settings in config file form]' \
   "(*)-help-option[show a description of specified configuration option]:config option:(${(@j. .)opts%%:*})" \
   '(-lang -language)'{-lang,-language}'[set the two-letter language code]:language:_locales' \
   '-xml-help[list the command line options in XML format]' \
@@ -41,6 +44,7 @@ _arguments -s -A "-*" --$^opts \
   "-xml-strings[output all of Tidy's strings in XML format]" \
   '-xml-error-strings[output error constants and strings in XML format]' \
   '-xml-options-strings[output option descriptions in XML format]' \
+  '-options[specify file containing configuration settings]:config file:_files' \
   '*:file:_files' \
   + '(encoding)' \
   '-ascii[use US-ASCII for output, ISO-8859-1 for input]' \
diff --git a/Completion/Unix/Command/_tmux b/Completion/Unix/Command/_tmux
index b0aa75ba1..730959e84 100644
--- a/Completion/Unix/Command/_tmux
+++ b/Completion/Unix/Command/_tmux
@@ -180,7 +180,7 @@ _tmux-bind-key() {
     '-r[the key may repeat]' \
     '-T+[specify key table for the binding]:key table' \
     '1:key' \
-    '*:::template:_tmux'
+    '*:::template:= _tmux'
 }
 
 _tmux-break-pane() {
@@ -211,49 +211,38 @@ _tmux-capture-pane() {
 }
 
 _tmux-choose-buffer() {
-  [[ -n ${tmux_describe} ]] && print "put a window into buffer choice mode" && return
+  [[ -n ${tmux_describe} ]] && print "put a pane into buffer choice mode" && return
   _arguments -s \
-    '-F+[specify output format]:format:__tmux-format' \
+    '-N[start without the preview]' \
+    '-F+[specify format for each list item]:format:__tmux-formats' \
+    '-f+[filter items]:filter format:__tmux-formats' \
+    '-O+[initial sort order]:order:(time name size)' \
     '-t+[specify target window]:session:__tmux-windows' \
-    '*:::template:_tmux'
+    '*:::template:= _tmux'
 }
 
 _tmux-choose-client() {
   [[ -n ${tmux_describe} ]] && print "put a window into client choice mode" && return
   _arguments -s \
-    '-F+[specify output format]:format:__tmux-format' \
+    '-N[start without the preview]' \
+    '-F+[specify format for each list item]:format:__tmux-formats' \
+    '-f+[filter items]:filter format:__tmux-formats' \
+    '-O+[initial sort order]:order:(time name size)' \
     '-t+[specify target window]:session:__tmux-windows' \
-    '*:::template:_tmux'
-}
-
-_tmux-choose-session() {
-  [[ -n ${tmux_describe} ]] && print "put a window into session choice mode" && return
-  _arguments -s \
-    '-F+[specify output format]:format:__tmux-format' \
-    '-t+[specify target window]:session:__tmux-windows' \
-    '*:::template:_tmux'
+    '*:::template:= _tmux'
 }
 
 _tmux-choose-tree() {
   [[ -n ${tmux_describe} ]] && print "put a window into tree choice mode" && return
   _arguments -s \
-    '-b+[override default session command]:session-command' \
-    '-c+[override default window command]:window-command' \
-    '-S+[specify session format]:session-format:__tmux-formats' \
+    '-N[start without the preview]' \
+    '-F+[specify format for each list item]:format:__tmux-formats' \
+    '-f+[filter items]:filter format:__tmux-formats' \
+    '-O+[initial sort order]:order:(time name size)' \
     '-s[choose among sessions]' \
     '-t+[specify target window]:session:__tmux-windows' \
-    '-u[show generated tree uncollapsed at startup]' \
-    '-W+[specify window format]:window-format:__tmux-formats' \
     '-w[choose among windows]' \
-    '*:::template:_tmux'
-}
-
-_tmux-choose-window() {
-  [[ -n ${tmux_describe} ]] && print "put a window into window choice mode" && return
-  _arguments -s \
-    '-F+[specify output format]:format:__tmux-formats' \
-    '-t+[specify target window]:session:__tmux-windows' \
-    '*:::template:_tmux'
+    '*:::template:= _tmux'
 }
 
 _tmux-clear-history() {
@@ -275,7 +264,7 @@ _tmux-command-prompt() {
     '-I+[specify list of initial inputs]:initial-text (comma-separated list)' \
     '-p+[specify list of prompts]:prompts (comma-separated list)' \
     '-t+[specify target client]:client:__tmux-clients' \
-    '*:::template:_tmux'
+    '*:::template:= _tmux'
 }
 
 _tmux-confirm-before() {
@@ -283,7 +272,7 @@ _tmux-confirm-before() {
   _arguments -s \
     '-p+[specify prompt]:prompt string' \
     '-t+[specify target client]:client:__tmux-clients' \
-    '*:::command:_tmux'
+    '*:::command:= _tmux'
 }
 
 _tmux-copy-mode() {
@@ -321,14 +310,16 @@ _tmux-display-message() {
 
 _tmux-display-panes() {
   [[ -n ${tmux_describe} ]] && print "display an indicator for each visible pane" && return
-  _arguments '-t+[specify target client]:client:__tmux-clients'
+  _arguments -S \
+    '-d+[time to show indicator for]:duration (ms)' \
+    '-t+[specify target client]:client:__tmux-clients' \
+    '*:::command:= _tmux'
 }
 
 _tmux-find-window() {
   [[ -n ${tmux_describe} ]] && print "search for a pattern in windows" && return
   _arguments -s \
     '-C[match visible contents]' \
-    '-F+[specify output format]:format:__tmux-formats' \
     '-N[match window name]' \
     '-T[match window title]' \
     '-t+[specify target window]:window:__tmux-windows' \
@@ -628,6 +619,7 @@ _tmux-resize-pane() {
 _tmux-respawn-pane() {
   [[ -n ${tmux_describe} ]] && print "reuse a pane in which a command has exited" && return
   _arguments -s -A "-*" -S \
+    '-c+[specify a new working directory for the pane]:directory:_directories' \
     '-k[kill window if it is in use]' \
     '-t+[specify target pane]:pane:__tmux-pane' \
     ':command:_cmdambivalent'
@@ -636,6 +628,7 @@ _tmux-respawn-pane() {
 _tmux-respawn-window() {
   [[ -n ${tmux_describe} ]] && print "reuse a window in which a command has exited" && return
   _arguments -s -A "-*" -S \
+    '-c+[specify a new working directory for the window]:directory:_directories' \
     '-k[kill window if it is in use]' \
     '-t+[specify target window]:window:__tmux-windows' \
     ':command:_cmdambivalent'
@@ -688,6 +681,7 @@ _tmux-select-pane() {
     '-R[move to the pane right of target]' \
     '-U[move to the pane above target]' \
     '-P+[set pane style]:style:__tmux-style' \
+    '-T+[set the pane title]:title' \
     '-t+[specify target pane]:pane:__tmux-panes'
 }
 
@@ -772,6 +766,7 @@ _tmux-set-option() {
   typeset -A opt_args
   _arguments -C -s : \
     '-a[append to string options]' \
+    '-F[expand formats in the option value]' \
     '-g[set a global session option]' \
     '-o[prevent setting of an option that is already set]' \
     '-q[suppress errors about unknown or ambiguous options]' \
@@ -796,6 +791,7 @@ _tmux-set-window-option() {
   typeset -A opt_args
   _arguments -C -s : \
     '-a[append to string options]' \
+    '-F[expand formats in the option value]' \
     '-g[set a global window option]' \
     '-o[prevent setting of an option that is already set]' \
     '-q[suppress errors about unknown or ambiguous options]' \
@@ -811,8 +807,9 @@ _tmux-set-hook() {
   _arguments -s \
     '-g[add hook to global list]' \
     '-u[unset a hook]' \
-    '-t+[specify target session]:session:__tmux-sessions'
-    ':command'
+    '-t+[specify target session]:session:__tmux-sessions' \
+    ':hook name:_tmux_hooks' \
+    '*:::command:= _tmux'
 }
 
 _tmux-show-hooks() {
@@ -820,7 +817,6 @@ _tmux-show-hooks() {
   _arguments -s -S -A "-*" \
     '-g[show global list of hooks]' \
     '-t+[specify target session]:session:__tmux-sessions' \
-    ':hook name:(alert-activity alert-bell alert-silence client-attached client-detached client-resized pane-died pane-exited)' \
 }
 
 _tmux-show-buffer() {
@@ -1105,6 +1101,12 @@ function __tmux-colours() {
     fi
 }
 
+_tmux_hooks() {
+  _alternative \
+    'hooks:hook name:(alert-activity alert-bell alert-silence client-attached client-detached client-resized client-session-changed pane-died pane-exited pane-set-clipboard session-created session-closed session-renamed window-linked window-renamed window-unlinked)' \
+    'post-hooks:command post-hook:compadd - after-${_tmux_aliasmap}'
+}
+
 function __tmux-get-optarg() {
     local opt="$1"
     local -i i
diff --git a/Completion/Unix/Command/_truss b/Completion/Unix/Command/_truss
index d56839e02..b798f03cb 100644
--- a/Completion/Unix/Command/_truss
+++ b/Completion/Unix/Command/_truss
@@ -43,6 +43,9 @@ case $OSTYPE in
       "(-c)-S[don't report signals received by the process]"
       '(*)-p[trace specified existing processes]:pid:_pids'
     )
+  ;|
+  freebsd<10->.*)
+    args+=( '-H[include thread ID in the output of each event]' )
   ;;
 esac
 
diff --git a/Completion/Unix/Command/_wget b/Completion/Unix/Command/_wget
index 2a7390fba..1a7e2d0a3 100644
--- a/Completion/Unix/Command/_wget
+++ b/Completion/Unix/Command/_wget
@@ -71,6 +71,7 @@ _arguments -C -s \
   '(--adjust-extension -E)'{--adjust-extension,-E}'[save all HTML/CSS documents with proper extensions]' \
   "--ignore-length[ignore \`Content-Length' header field]" \
   '*--header=[send a custom HTTP header]:header:->header' \
+  '--compression=:compression:(auto gzip none)' \
   '--max-redirect=:number' \
   '--proxy-user=:user' \
   '--proxy-password=:password' \
@@ -90,7 +91,7 @@ _arguments -C -s \
   '--content-disposition[honor the Content-Disposition header when choosing local file names]'  \
   '--content-on-error[output received content on server errors]' \
   "--auth-no-challenge[send basic HTTP authentication without first waiting for server's challenge]" \
-  '--secure-protocol=[choose secure protocol]:protocol:(SSLv2 SSLv3 TLSv1)' \
+  '--secure-protocol=[choose secure protocol]:protocol:(SSLv2 SSLv3 TLSv1 TLSv1_1 TLSv1_2 PFS)' \
   --https-only \
   "--no-check-certificate=[don't check the server certificate]" \
   '--certificate=[specify client certificate]:client certificate file:_files' \
@@ -142,6 +143,7 @@ _arguments -C -s \
   '(-np --no-parent)'{-np,--no-parent}"[don't ascend to parent directory]" \
   '--no-verbose' \
   '--no-clobber' \
+  '--no-netrc' \
   '--no-use-server-timestamps[do not set timestamp to server provided value]' \
   '--htmlify=:htmlify:' \
   '--no:no:->noflags' \