Browse Source

Add common shell completions, fix invalid quiet check

timvisee 6 years ago
parent
commit
fba888c5aa

+ 1797 - 223
contrib/completions/_ffsend

@@ -1,233 +1,1807 @@
 #compdef ffsend
 
-local -a root_args
-root_args=(
-  '(- *)'{-h,--help}'[Prints help information]'
-  '(- *)'{-V,--version}'[Prints version information]'
-)
+autoload -U is-at-least
 
-local -a common_args
-common_args=(
-  '(-f --force)'{-f,--force}'[Force the action, ignore warnings]'
-  '(-i --incognito)'{-i,--incognito}"[Don't update local history for actions]"
-  '(-I --no-interact)'{-I,--no-interact}'[Not interactive, do not prompt]'
-  '(-q --quiet)'{-q,--quiet}'[Produce output suitable for logging and automation]'
-  '(-v --verbose)'{-v,--verbose}'[Enable verbose information and logging]'
-  '(-y --yes)'{-y,--yes}'[Assume yes for prompts]'
-)
+_ffsend() {
+    typeset -A opt_args
+    typeset -a _arguments_options
+    local ret=1
 
-local -a common_options
-common_options=(
-  '(-A --api)'{-A,--api}"[Server API version to use, '-' to lookup]:api:(2 3 auto -)"
-  '(-H --history)'{-H,--history}'[Use the specified history file]:history file:_files'
-  '(-t --timeout)'{-t,--timeout}'[Request timeout (0 to disable)]:timeout:'
-  '(-T --transfer-timeout)'{-T,--transfer-timeout}'[Transfer timeout (0 to disable)]:timeout:'
-)
+    if is-at-least 5.2; then
+        _arguments_options=(-s -S -C)
+    else
+        _arguments_options=(-s -C)
+    fi
 
-_ffsend_commands() {
-  local -a commands
-  commands=(
-    'upload:Upload files'
-    'download:Download files'
-    'debug:View debug information'
-    'delete:Delete a shared file'
-    'exists:Check whether a remote file exists'
-    'help:Prints this message or the help of the given subcommand(s)'
-    'history:View file history'
-    'info:Fetch info about a shared file'
-    'parameters:Change parameters of a shared file'
-    'password:Change the password of a shared file'
-    'version:Determine the Send server version'
-  )
-  _describe 'command' commands
-}
-
-_arguments -w -s -S \
-  ${root_args[@]} \
-  ${common_args[@]} \
-  ${common_options[@]} \
-  '1: :_ffsend_commands' \
-  '*:: :->subcommands'
-
-case ${words[1]} in
-  upload)
-    local -a upload_args
-    upload_args=(
-      '(-a --archive)'{-a,--archive}'[Archive the upload in a single file]'
-      '(-c --copy)'{-c,--copy}'[Copy the share link to your clipboard]'
-      '(-C --copy-cmd)'{-C,--copy-cmd}'[Copy the ffsend download command to your clipboard]'
-      '(-P --gen-passphrase)'{-P,--gen-passphrase}'[Protect the file with a generated passphrase]'
-      '(- *)--help[Prints help information]'
-      '(-o --open)'{-o,--open}'[Open the share link in your browser]'
-    )
-    local -a upload_options
-    upload_options=(
-      '(-d --download-limit)'{-d,--download-limit}'[The file download limit]:count:'
-      '(-h --host)'{-h,--host}'[The remote host to upload to]:host:'
-      '(-n --name)'{-n,--name}'[Rename the file being uploaded]:name:'
-      '(-p --password)'{-p,--password}'[Protect the file with a password]:password:'
-    )
-    _arguments -w -s -S \
-      ${upload_args[@]} \
-      ${common_args[@]} \
-      ${upload_options[@]} \
-      ${common_options[@]} \
-      ':file:_files'
-    ;;
-  download)
-    local -a download_args
-    download_args=(
-      '(-e --extract)'{-e,--extract}'[Extract an archived file]'
-      '(- *)'{-h,--help}'[Prints help information]'
-    )
-    local -a download_options
-    download_options=(
-      '(-o --output)'{-o,--output}'[The output file or directory]:output file or directory:_files'
-      '(-p --password)'{-p,--password}'[Unlock a password protected file]:password:'
-    )
-    _arguments -w -s -S \
-      ${download_args[@]} \
-      ${common_args[@]} \
-      ${download_options[@]} \
-      ${common_options[@]} \
-      ':url:()'
-    ;;
-  debug)
-    local -a debug_args
-    debug_args=(
-      '(- *)--help[Prints help information]'
-    )
-    local -a debug_options
-    debug_options=(
-      '(-h --host)'{-h,--host}'[The remote host to upload to]:host:'
-    )
-    _arguments -w -s -S \
-      ${debug_args[@]} \
-      ${common_args[@]} \
-      ${debug_options[@]} \
-      ${common_options[@]}
-    ;;
-  delete)
-    local -a delete_args
-    delete_args=(
-      '(- *)'{-h,--help}'[Prints help information]'
-    )
-    local -a delete_options
-    delete_options=(
-      '(-o --owner)'{-o,--owner}'[Specify the file owner token]:token:'
-    )
-    _arguments -w -s -S \
-      ${delete_args[@]} \
-      ${common_args[@]} \
-      ${delete_options[@]} \
-      ${common_options[@]} \
-      '1:url:()'
-    ;;
-  exists)
-    local -a exists_args
-    exists_args=(
-      '(- *)'{-h,--help}'[Prints help information]'
-    )
-    _arguments -w -s -S \
-      ${exists_args[@]} \
-      ${common_args[@]} \
-      ${common_options[@]} \
-      '1:url:()'
-    ;;
-  help)
-    local -a help_topics
-    help_topics=(
-      'upload'
-      'download'
-      'debug'
-      'delete'
-      'exists'
-      'help'
-      'history'
-      'info'
-      'parameters'
-      'password'
-      'version'
-    )
-    _values 'help topics' ${help_topics[@]}
+    local context curcontext="$curcontext" state line
+    _arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+":: :_ffsend_commands" \
+"*::: :->ffsend" \
+&& ret=0
+    case $state in
+    (ffsend)
+        words=($line[1] "${words[@]}")
+        (( CURRENT += 1 ))
+        curcontext="${curcontext%:*:*}:ffsend-command-$line[1]:"
+        case $line[1] in
+            (dbg)
+_arguments "${_arguments_options[@]}" \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(debug)
+_arguments "${_arguments_options[@]}" \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(del)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(delete)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(d)
+_arguments "${_arguments_options[@]}" \
+'-p+[Unlock a password protected file]' \
+'--password=[Unlock a password protected file]' \
+'-o+[Output file or directory]' \
+'--output=[Output file or directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-e[Extract an archived file]' \
+'--extract[Extract an archived file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(down)
+_arguments "${_arguments_options[@]}" \
+'-p+[Unlock a password protected file]' \
+'--password=[Unlock a password protected file]' \
+'-o+[Output file or directory]' \
+'--output=[Output file or directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-e[Extract an archived file]' \
+'--extract[Extract an archived file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(download)
+_arguments "${_arguments_options[@]}" \
+'-p+[Unlock a password protected file]' \
+'--password=[Unlock a password protected file]' \
+'-o+[Output file or directory]' \
+'--output=[Output file or directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-e[Extract an archived file]' \
+'--extract[Extract an archived file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(e)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(exist)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(exists)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(gen)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+":: :_ffsend__generate_commands" \
+"*::: :->generate" \
+&& ret=0
+case $state in
+    (generate)
+        words=($line[1] "${words[@]}")
+        (( CURRENT += 1 ))
+        curcontext="${curcontext%:*:*}:ffsend-generate-command-$line[1]:"
+        case $line[1] in
+            (completion)
+_arguments "${_arguments_options[@]}" \
+'-o+[Shell completion files output directory]' \
+'--output=[Shell completion files output directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':SHELL -- Shell type to generate completions for:(all zsh bash fish powershell elvish)' \
+&& ret=0
+;;
+(complete)
+_arguments "${_arguments_options[@]}" \
+'-o+[Shell completion files output directory]' \
+'--output=[Shell completion files output directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':SHELL -- Shell type to generate completions for:(all zsh bash fish powershell elvish)' \
+&& ret=0
+;;
+(completions)
+_arguments "${_arguments_options[@]}" \
+'-o+[Shell completion files output directory]' \
+'--output=[Shell completion files output directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':SHELL -- Shell type to generate completions for:(all zsh bash fish powershell elvish)' \
+&& ret=0
+;;
+(help)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+        esac
     ;;
-  history)
-    local -a history_args
-    history_args=(
-      '(- *)'{-h,--help}'[Prints help information]'
-    )
-    _arguments -w -s -S \
-      ${history_args[@]} \
-      ${common_args[@]} \
-      ${common_options[@]}
-    ;;
-  info)
-    local -a info_args
-    info_args=(
-      '(- *)'{-h,--help}'[Prints help information]'
-    )
-    local -a info_options
-    info_options=(
-      '(-o --owner)'{-o,--owner}'[Specify the file owner token]:token:'
-      '(-p --password)'{-p,--password}'[Unlock a password protected file]:password:'
-    )
-    _arguments -w -s -S \
-      ${info_args[@]} \
-      ${common_args[@]} \
-      ${info_options[@]} \
-      ${common_options[@]} \
-      '1:url:()'
-    ;;
-  parameters)
-    local -a parameters_args
-    parameters_args=(
-      '(- *)'{-h,--help}'[Prints help information]'
-    )
-    local -a parameters_options
-    parameters_options=(
-      '(-d --download-limit)'{-d,--download-limit}'[The file download limit]:count:'
-      '(-o --owner)'{-o,--owner}'[Specify the file owner token]:token:'
-    )
-    _arguments -w -s -S \
-      ${parameters_args[@]} \
-      ${common_args[@]} \
-      ${parameters_options[@]} \
-      ${common_options[@]} \
-      '1:url:()'
-    ;;
-  password)
-    local -a password_args
-    password_args=(
-      '(-P --gen-passphrase)'{-P,--gen-passphrase}'[Protect the file with a generated passphrase]'
-      '(- *)'{-h,--help}'[Prints help information]'
-    )
-    local -a password_options
-    password_options=(
-      '(-o --owner)'{-o,--owner}'[Specify the file owner token]:token:'
-      '(-p --password)'{-p,--password}'[Unlock a password protected file]:password:'
-    )
-    _arguments -w -s -S \
-      ${password_args[@]} \
-      ${common_args[@]} \
-      ${password_options[@]} \
-      ${common_options[@]} \
-      '1:url:()'
+esac
+;;
+(generate)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+":: :_ffsend__generate_commands" \
+"*::: :->generate" \
+&& ret=0
+case $state in
+    (generate)
+        words=($line[1] "${words[@]}")
+        (( CURRENT += 1 ))
+        curcontext="${curcontext%:*:*}:ffsend-generate-command-$line[1]:"
+        case $line[1] in
+            (completion)
+_arguments "${_arguments_options[@]}" \
+'-o+[Shell completion files output directory]' \
+'--output=[Shell completion files output directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':SHELL -- Shell type to generate completions for:(all zsh bash fish powershell elvish)' \
+&& ret=0
+;;
+(complete)
+_arguments "${_arguments_options[@]}" \
+'-o+[Shell completion files output directory]' \
+'--output=[Shell completion files output directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':SHELL -- Shell type to generate completions for:(all zsh bash fish powershell elvish)' \
+&& ret=0
+;;
+(completions)
+_arguments "${_arguments_options[@]}" \
+'-o+[Shell completion files output directory]' \
+'--output=[Shell completion files output directory]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':SHELL -- Shell type to generate completions for:(all zsh bash fish powershell elvish)' \
+&& ret=0
+;;
+(help)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+        esac
     ;;
-  version)
-    local -a version_args
-    version_args=(
-      '(- *)--help[Prints help information]'
-    )
-    local -a version_options
-    version_options=(
-      '(-h --host)'{-h,--host}'[The remote host to upload to]:host:'
-    )
-    _arguments -w -s -S \
-      ${version_args[@]} \
-      ${common_args[@]} \
-      ${version_options[@]} \
-      ${common_options[@]}
+esac
+;;
+(i)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-p+[Unlock a password protected file]' \
+'--password=[Unlock a password protected file]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(information)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-p+[Unlock a password protected file]' \
+'--password=[Unlock a password protected file]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(info)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-p+[Unlock a password protected file]' \
+'--password=[Unlock a password protected file]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(params)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-d+[The file download limit]' \
+'--download-limit=[The file download limit]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(param)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-d+[The file download limit]' \
+'--download-limit=[The file download limit]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(parameter)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-d+[The file download limit]' \
+'--download-limit=[The file download limit]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(parameters)
+_arguments "${_arguments_options[@]}" \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-d+[The file download limit]' \
+'--download-limit=[The file download limit]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(pass)
+_arguments "${_arguments_options[@]}" \
+'-p+[Specify a password, do not prompt]' \
+'--password=[Specify a password, do not prompt]' \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-P[Protect the file with a generated passphrase]' \
+'--gen-passphrase[Protect the file with a generated passphrase]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(p)
+_arguments "${_arguments_options[@]}" \
+'-p+[Specify a password, do not prompt]' \
+'--password=[Specify a password, do not prompt]' \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-P[Protect the file with a generated passphrase]' \
+'--gen-passphrase[Protect the file with a generated passphrase]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(password)
+_arguments "${_arguments_options[@]}" \
+'-p+[Specify a password, do not prompt]' \
+'--password=[Specify a password, do not prompt]' \
+'-o+[Specify the file owner token]' \
+'--owner=[Specify the file owner token]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-P[Protect the file with a generated passphrase]' \
+'--gen-passphrase[Protect the file with a generated passphrase]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':URL -- The share URL:_files' \
+&& ret=0
+;;
+(u)
+_arguments "${_arguments_options[@]}" \
+'-p+[Protect the file with a password]' \
+'--password=[Protect the file with a password]' \
+'-d+[The file download limit]' \
+'--download-limit=[The file download limit]' \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-n+[Rename the file being uploaded]' \
+'--name=[Rename the file being uploaded]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-P[Protect the file with a generated passphrase]' \
+'--gen-passphrase[Protect the file with a generated passphrase]' \
+'-o[Open the share link in your browser]' \
+'--open[Open the share link in your browser]' \
+'-a[Archive the upload in a single file]' \
+'--archive[Archive the upload in a single file]' \
+'(-C --copy-cmd)-c[Copy the share link to your clipboard]' \
+'(-C --copy-cmd)--copy[Copy the share link to your clipboard]' \
+'(-c --copy)-C[Copy the ffsend download command to your clipboard]' \
+'(-c --copy)--copy-cmd[Copy the ffsend download command to your clipboard]' \
+'-S[Shorten share URLs with a public service]' \
+'--shorten[Shorten share URLs with a public service]' \
+'-Q[Print a QR code for the share URL]' \
+'--qrcode[Print a QR code for the share URL]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':FILE -- The file to upload:_files' \
+&& ret=0
+;;
+(up)
+_arguments "${_arguments_options[@]}" \
+'-p+[Protect the file with a password]' \
+'--password=[Protect the file with a password]' \
+'-d+[The file download limit]' \
+'--download-limit=[The file download limit]' \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-n+[Rename the file being uploaded]' \
+'--name=[Rename the file being uploaded]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-P[Protect the file with a generated passphrase]' \
+'--gen-passphrase[Protect the file with a generated passphrase]' \
+'-o[Open the share link in your browser]' \
+'--open[Open the share link in your browser]' \
+'-a[Archive the upload in a single file]' \
+'--archive[Archive the upload in a single file]' \
+'(-C --copy-cmd)-c[Copy the share link to your clipboard]' \
+'(-C --copy-cmd)--copy[Copy the share link to your clipboard]' \
+'(-c --copy)-C[Copy the ffsend download command to your clipboard]' \
+'(-c --copy)--copy-cmd[Copy the ffsend download command to your clipboard]' \
+'-S[Shorten share URLs with a public service]' \
+'--shorten[Shorten share URLs with a public service]' \
+'-Q[Print a QR code for the share URL]' \
+'--qrcode[Print a QR code for the share URL]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':FILE -- The file to upload:_files' \
+&& ret=0
+;;
+(upload)
+_arguments "${_arguments_options[@]}" \
+'-p+[Protect the file with a password]' \
+'--password=[Protect the file with a password]' \
+'-d+[The file download limit]' \
+'--download-limit=[The file download limit]' \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-n+[Rename the file being uploaded]' \
+'--name=[Rename the file being uploaded]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-P[Protect the file with a generated passphrase]' \
+'--gen-passphrase[Protect the file with a generated passphrase]' \
+'-o[Open the share link in your browser]' \
+'--open[Open the share link in your browser]' \
+'-a[Archive the upload in a single file]' \
+'--archive[Archive the upload in a single file]' \
+'(-C --copy-cmd)-c[Copy the share link to your clipboard]' \
+'(-C --copy-cmd)--copy[Copy the share link to your clipboard]' \
+'(-c --copy)-C[Copy the ffsend download command to your clipboard]' \
+'(-c --copy)--copy-cmd[Copy the ffsend download command to your clipboard]' \
+'-S[Shorten share URLs with a public service]' \
+'--shorten[Shorten share URLs with a public service]' \
+'-Q[Print a QR code for the share URL]' \
+'--qrcode[Print a QR code for the share URL]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+':FILE -- The file to upload:_files' \
+&& ret=0
+;;
+(ver)
+_arguments "${_arguments_options[@]}" \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(v)
+_arguments "${_arguments_options[@]}" \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(version)
+_arguments "${_arguments_options[@]}" \
+'-h+[The remote host to upload to]' \
+'--host=[The remote host to upload to]' \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(h)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(ls)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(history)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+(help)
+_arguments "${_arguments_options[@]}" \
+'-t+[Request timeout (0 to disable)]' \
+'--timeout=[Request timeout (0 to disable)]' \
+'-T+[Transfer timeout (0 to disable)]' \
+'--transfer-timeout=[Transfer timeout (0 to disable)]' \
+'-A+[Server API version to use, '\''-'\'' to lookup]' \
+'--api=[Server API version to use, '\''-'\'' to lookup]' \
+'-H+[Use the specified history file]' \
+'--history=[Use the specified history file]' \
+'-h[Prints help information]' \
+'--help[Prints help information]' \
+'-V[Prints version information]' \
+'--version[Prints version information]' \
+'-f[Force the action, ignore warnings]' \
+'--force[Force the action, ignore warnings]' \
+'-I[Not interactive, do not prompt]' \
+'--no-interact[Not interactive, do not prompt]' \
+'-y[Assume yes for prompts]' \
+'--yes[Assume yes for prompts]' \
+'-q[Produce output suitable for logging and automation]' \
+'--quiet[Produce output suitable for logging and automation]' \
+'*-v[Enable verbose information and logging]' \
+'*--verbose[Enable verbose information and logging]' \
+'-i[Don'\''t update local history for actions]' \
+'--incognito[Don'\''t update local history for actions]' \
+&& ret=0
+;;
+        esac
     ;;
 esac
+}
+
+(( $+functions[_ffsend_commands] )) ||
+_ffsend_commands() {
+    local commands; commands=(
+        "debug:View debug information" \
+"dbg:View debug information" \
+"delete:Delete a shared file" \
+"del:Delete a shared file" \
+"download:Download files" \
+"d:Download files" \
+"down:Download files" \
+"exists:Check whether a remote file exists" \
+"e:Check whether a remote file exists" \
+"generate:Generate assets" \
+"gen:Generate assets" \
+"info:Fetch info about a shared file" \
+"i:Fetch info about a shared file" \
+"parameters:Change parameters of a shared file" \
+"params:Change parameters of a shared file" \
+"password:Change the password of a shared file" \
+"pass:Change the password of a shared file" \
+"p:Change the password of a shared file" \
+"upload:Upload files" \
+"u:Upload files" \
+"up:Upload files" \
+"version:Determine the Send server version" \
+"v:Determine the Send server version" \
+"history:View file history" \
+"h:View file history" \
+"help:Prints this message or the help of the given subcommand(s)" \
+    )
+    _describe -t commands 'ffsend commands' commands "$@"
+}
+(( $+functions[_ffsend__complete_commands] )) ||
+_ffsend__complete_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend complete commands' commands "$@"
+}
+(( $+functions[_ffsend__generate__complete_commands] )) ||
+_ffsend__generate__complete_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend generate complete commands' commands "$@"
+}
+(( $+functions[_ffsend__completion_commands] )) ||
+_ffsend__completion_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend completion commands' commands "$@"
+}
+(( $+functions[_ffsend__generate__completion_commands] )) ||
+_ffsend__generate__completion_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend generate completion commands' commands "$@"
+}
+(( $+functions[_ffsend__generate__completions_commands] )) ||
+_ffsend__generate__completions_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend generate completions commands' commands "$@"
+}
+(( $+functions[_d_commands] )) ||
+_d_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'd commands' commands "$@"
+}
+(( $+functions[_ffsend__d_commands] )) ||
+_ffsend__d_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend d commands' commands "$@"
+}
+(( $+functions[_dbg_commands] )) ||
+_dbg_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'dbg commands' commands "$@"
+}
+(( $+functions[_ffsend__dbg_commands] )) ||
+_ffsend__dbg_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend dbg commands' commands "$@"
+}
+(( $+functions[_ffsend__debug_commands] )) ||
+_ffsend__debug_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend debug commands' commands "$@"
+}
+(( $+functions[_del_commands] )) ||
+_del_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'del commands' commands "$@"
+}
+(( $+functions[_ffsend__del_commands] )) ||
+_ffsend__del_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend del commands' commands "$@"
+}
+(( $+functions[_ffsend__delete_commands] )) ||
+_ffsend__delete_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend delete commands' commands "$@"
+}
+(( $+functions[_down_commands] )) ||
+_down_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'down commands' commands "$@"
+}
+(( $+functions[_ffsend__down_commands] )) ||
+_ffsend__down_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend down commands' commands "$@"
+}
+(( $+functions[_ffsend__download_commands] )) ||
+_ffsend__download_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend download commands' commands "$@"
+}
+(( $+functions[_e_commands] )) ||
+_e_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'e commands' commands "$@"
+}
+(( $+functions[_ffsend__e_commands] )) ||
+_ffsend__e_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend e commands' commands "$@"
+}
+(( $+functions[_exist_commands] )) ||
+_exist_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'exist commands' commands "$@"
+}
+(( $+functions[_ffsend__exist_commands] )) ||
+_ffsend__exist_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend exist commands' commands "$@"
+}
+(( $+functions[_ffsend__exists_commands] )) ||
+_ffsend__exists_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend exists commands' commands "$@"
+}
+(( $+functions[_gen_commands] )) ||
+_gen_commands() {
+    local commands; commands=(
+        "completions:Shell completions" \
+"help:Prints this message or the help of the given subcommand(s)" \
+    )
+    _describe -t commands 'gen commands' commands "$@"
+}
+(( $+functions[_ffsend__generate_commands] )) ||
+_ffsend__generate_commands() {
+    local commands; commands=(
+        "completions:Shell completions" \
+"help:Prints this message or the help of the given subcommand(s)" \
+    )
+    _describe -t commands 'ffsend generate commands' commands "$@"
+}
+(( $+functions[_ffsend__h_commands] )) ||
+_ffsend__h_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend h commands' commands "$@"
+}
+(( $+functions[_h_commands] )) ||
+_h_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'h commands' commands "$@"
+}
+(( $+functions[_ffsend__generate__help_commands] )) ||
+_ffsend__generate__help_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend generate help commands' commands "$@"
+}
+(( $+functions[_ffsend__help_commands] )) ||
+_ffsend__help_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend help commands' commands "$@"
+}
+(( $+functions[_ffsend__history_commands] )) ||
+_ffsend__history_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend history commands' commands "$@"
+}
+(( $+functions[_ffsend__i_commands] )) ||
+_ffsend__i_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend i commands' commands "$@"
+}
+(( $+functions[_i_commands] )) ||
+_i_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'i commands' commands "$@"
+}
+(( $+functions[_ffsend__info_commands] )) ||
+_ffsend__info_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend info commands' commands "$@"
+}
+(( $+functions[_ffsend__information_commands] )) ||
+_ffsend__information_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend information commands' commands "$@"
+}
+(( $+functions[_information_commands] )) ||
+_information_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'information commands' commands "$@"
+}
+(( $+functions[_ffsend__ls_commands] )) ||
+_ffsend__ls_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend ls commands' commands "$@"
+}
+(( $+functions[_ls_commands] )) ||
+_ls_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ls commands' commands "$@"
+}
+(( $+functions[_ffsend__p_commands] )) ||
+_ffsend__p_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend p commands' commands "$@"
+}
+(( $+functions[_p_commands] )) ||
+_p_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'p commands' commands "$@"
+}
+(( $+functions[_ffsend__param_commands] )) ||
+_ffsend__param_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend param commands' commands "$@"
+}
+(( $+functions[_param_commands] )) ||
+_param_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'param commands' commands "$@"
+}
+(( $+functions[_ffsend__parameter_commands] )) ||
+_ffsend__parameter_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend parameter commands' commands "$@"
+}
+(( $+functions[_parameter_commands] )) ||
+_parameter_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'parameter commands' commands "$@"
+}
+(( $+functions[_ffsend__parameters_commands] )) ||
+_ffsend__parameters_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend parameters commands' commands "$@"
+}
+(( $+functions[_ffsend__params_commands] )) ||
+_ffsend__params_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend params commands' commands "$@"
+}
+(( $+functions[_params_commands] )) ||
+_params_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'params commands' commands "$@"
+}
+(( $+functions[_ffsend__pass_commands] )) ||
+_ffsend__pass_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend pass commands' commands "$@"
+}
+(( $+functions[_pass_commands] )) ||
+_pass_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'pass commands' commands "$@"
+}
+(( $+functions[_ffsend__password_commands] )) ||
+_ffsend__password_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend password commands' commands "$@"
+}
+(( $+functions[_ffsend__u_commands] )) ||
+_ffsend__u_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend u commands' commands "$@"
+}
+(( $+functions[_u_commands] )) ||
+_u_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'u commands' commands "$@"
+}
+(( $+functions[_ffsend__up_commands] )) ||
+_ffsend__up_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend up commands' commands "$@"
+}
+(( $+functions[_up_commands] )) ||
+_up_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'up commands' commands "$@"
+}
+(( $+functions[_ffsend__upload_commands] )) ||
+_ffsend__upload_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend upload commands' commands "$@"
+}
+(( $+functions[_ffsend__v_commands] )) ||
+_ffsend__v_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend v commands' commands "$@"
+}
+(( $+functions[_v_commands] )) ||
+_v_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'v commands' commands "$@"
+}
+(( $+functions[_ffsend__ver_commands] )) ||
+_ffsend__ver_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend ver commands' commands "$@"
+}
+(( $+functions[_ver_commands] )) ||
+_ver_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ver commands' commands "$@"
+}
+(( $+functions[_ffsend__version_commands] )) ||
+_ffsend__version_commands() {
+    local commands; commands=(
+        
+    )
+    _describe -t commands 'ffsend version commands' commands "$@"
+}
 
-# vim: ft=zsh sw=2 ts=2 et
+_ffsend "$@"

+ 492 - 0
contrib/completions/_ffsend.ps1

@@ -0,0 +1,492 @@
+
+using namespace System.Management.Automation
+using namespace System.Management.Automation.Language
+
+Register-ArgumentCompleter -Native -CommandName 'ffsend' -ScriptBlock {
+    param($wordToComplete, $commandAst, $cursorPosition)
+
+    $commandElements = $commandAst.CommandElements
+    $command = @(
+        'ffsend'
+        for ($i = 1; $i -lt $commandElements.Count; $i++) {
+            $element = $commandElements[$i]
+            if ($element -isnot [StringConstantExpressionAst] -or
+                $element.StringConstantType -ne [StringConstantType]::BareWord -or
+                $element.Value.StartsWith('-')) {
+                break
+        }
+        $element.Value
+    }) -join ';'
+
+    $completions = @(switch ($command) {
+        'ffsend' {
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('debug', 'debug', [CompletionResultType]::ParameterValue, 'View debug information')
+            [CompletionResult]::new('delete', 'delete', [CompletionResultType]::ParameterValue, 'Delete a shared file')
+            [CompletionResult]::new('download', 'download', [CompletionResultType]::ParameterValue, 'Download files')
+            [CompletionResult]::new('exists', 'exists', [CompletionResultType]::ParameterValue, 'Check whether a remote file exists')
+            [CompletionResult]::new('generate', 'generate', [CompletionResultType]::ParameterValue, 'Generate assets')
+            [CompletionResult]::new('info', 'info', [CompletionResultType]::ParameterValue, 'Fetch info about a shared file')
+            [CompletionResult]::new('parameters', 'parameters', [CompletionResultType]::ParameterValue, 'Change parameters of a shared file')
+            [CompletionResult]::new('password', 'password', [CompletionResultType]::ParameterValue, 'Change the password of a shared file')
+            [CompletionResult]::new('upload', 'upload', [CompletionResultType]::ParameterValue, 'Upload files')
+            [CompletionResult]::new('version', 'version', [CompletionResultType]::ParameterValue, 'Determine the Send server version')
+            [CompletionResult]::new('history', 'history', [CompletionResultType]::ParameterValue, 'View file history')
+            [CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Prints this message or the help of the given subcommand(s)')
+            break
+        }
+        'ffsend;debug' {
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'The remote host to upload to')
+            [CompletionResult]::new('--host', 'host', [CompletionResultType]::ParameterName, 'The remote host to upload to')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;delete' {
+            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('--owner', 'owner', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;download' {
+            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Unlock a password protected file')
+            [CompletionResult]::new('--password', 'password', [CompletionResultType]::ParameterName, 'Unlock a password protected file')
+            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Output file or directory')
+            [CompletionResult]::new('--output', 'output', [CompletionResultType]::ParameterName, 'Output file or directory')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-e', 'e', [CompletionResultType]::ParameterName, 'Extract an archived file')
+            [CompletionResult]::new('--extract', 'extract', [CompletionResultType]::ParameterName, 'Extract an archived file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;exists' {
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;generate' {
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('completions', 'completions', [CompletionResultType]::ParameterValue, 'Shell completions')
+            [CompletionResult]::new('help', 'help', [CompletionResultType]::ParameterValue, 'Prints this message or the help of the given subcommand(s)')
+            break
+        }
+        'ffsend;generate;completions' {
+            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Shell completion files output directory')
+            [CompletionResult]::new('--output', 'output', [CompletionResultType]::ParameterName, 'Shell completion files output directory')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;generate;help' {
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;info' {
+            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('--owner', 'owner', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Unlock a password protected file')
+            [CompletionResult]::new('--password', 'password', [CompletionResultType]::ParameterName, 'Unlock a password protected file')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;parameters' {
+            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('--owner', 'owner', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'The file download limit')
+            [CompletionResult]::new('--download-limit', 'download-limit', [CompletionResultType]::ParameterName, 'The file download limit')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;password' {
+            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Specify a password, do not prompt')
+            [CompletionResult]::new('--password', 'password', [CompletionResultType]::ParameterName, 'Specify a password, do not prompt')
+            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('--owner', 'owner', [CompletionResultType]::ParameterName, 'Specify the file owner token')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-P', 'P', [CompletionResultType]::ParameterName, 'Protect the file with a generated passphrase')
+            [CompletionResult]::new('--gen-passphrase', 'gen-passphrase', [CompletionResultType]::ParameterName, 'Protect the file with a generated passphrase')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;upload' {
+            [CompletionResult]::new('-p', 'p', [CompletionResultType]::ParameterName, 'Protect the file with a password')
+            [CompletionResult]::new('--password', 'password', [CompletionResultType]::ParameterName, 'Protect the file with a password')
+            [CompletionResult]::new('-d', 'd', [CompletionResultType]::ParameterName, 'The file download limit')
+            [CompletionResult]::new('--download-limit', 'download-limit', [CompletionResultType]::ParameterName, 'The file download limit')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'The remote host to upload to')
+            [CompletionResult]::new('--host', 'host', [CompletionResultType]::ParameterName, 'The remote host to upload to')
+            [CompletionResult]::new('-n', 'n', [CompletionResultType]::ParameterName, 'Rename the file being uploaded')
+            [CompletionResult]::new('--name', 'name', [CompletionResultType]::ParameterName, 'Rename the file being uploaded')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-P', 'P', [CompletionResultType]::ParameterName, 'Protect the file with a generated passphrase')
+            [CompletionResult]::new('--gen-passphrase', 'gen-passphrase', [CompletionResultType]::ParameterName, 'Protect the file with a generated passphrase')
+            [CompletionResult]::new('-o', 'o', [CompletionResultType]::ParameterName, 'Open the share link in your browser')
+            [CompletionResult]::new('--open', 'open', [CompletionResultType]::ParameterName, 'Open the share link in your browser')
+            [CompletionResult]::new('-a', 'a', [CompletionResultType]::ParameterName, 'Archive the upload in a single file')
+            [CompletionResult]::new('--archive', 'archive', [CompletionResultType]::ParameterName, 'Archive the upload in a single file')
+            [CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, 'Copy the share link to your clipboard')
+            [CompletionResult]::new('--copy', 'copy', [CompletionResultType]::ParameterName, 'Copy the share link to your clipboard')
+            [CompletionResult]::new('-C', 'C', [CompletionResultType]::ParameterName, 'Copy the ffsend download command to your clipboard')
+            [CompletionResult]::new('--copy-cmd', 'copy-cmd', [CompletionResultType]::ParameterName, 'Copy the ffsend download command to your clipboard')
+            [CompletionResult]::new('-S', 'S', [CompletionResultType]::ParameterName, 'Shorten share URLs with a public service')
+            [CompletionResult]::new('--shorten', 'shorten', [CompletionResultType]::ParameterName, 'Shorten share URLs with a public service')
+            [CompletionResult]::new('-Q', 'Q', [CompletionResultType]::ParameterName, 'Print a QR code for the share URL')
+            [CompletionResult]::new('--qrcode', 'qrcode', [CompletionResultType]::ParameterName, 'Print a QR code for the share URL')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;version' {
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'The remote host to upload to')
+            [CompletionResult]::new('--host', 'host', [CompletionResultType]::ParameterName, 'The remote host to upload to')
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;history' {
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+        'ffsend;help' {
+            [CompletionResult]::new('-t', 't', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('--timeout', 'timeout', [CompletionResultType]::ParameterName, 'Request timeout (0 to disable)')
+            [CompletionResult]::new('-T', 'T', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('--transfer-timeout', 'transfer-timeout', [CompletionResultType]::ParameterName, 'Transfer timeout (0 to disable)')
+            [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('--api', 'api', [CompletionResultType]::ParameterName, 'Server API version to use, ''-'' to lookup')
+            [CompletionResult]::new('-H', 'H', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('--history', 'history', [CompletionResultType]::ParameterName, 'Use the specified history file')
+            [CompletionResult]::new('-h', 'h', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('--help', 'help', [CompletionResultType]::ParameterName, 'Prints help information')
+            [CompletionResult]::new('-V', 'V', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('--version', 'version', [CompletionResultType]::ParameterName, 'Prints version information')
+            [CompletionResult]::new('-f', 'f', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('--force', 'force', [CompletionResultType]::ParameterName, 'Force the action, ignore warnings')
+            [CompletionResult]::new('-I', 'I', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('--no-interact', 'no-interact', [CompletionResultType]::ParameterName, 'Not interactive, do not prompt')
+            [CompletionResult]::new('-y', 'y', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('--yes', 'yes', [CompletionResultType]::ParameterName, 'Assume yes for prompts')
+            [CompletionResult]::new('-q', 'q', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('--quiet', 'quiet', [CompletionResultType]::ParameterName, 'Produce output suitable for logging and automation')
+            [CompletionResult]::new('-v', 'v', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('--verbose', 'verbose', [CompletionResultType]::ParameterName, 'Enable verbose information and logging')
+            [CompletionResult]::new('-i', 'i', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            [CompletionResult]::new('--incognito', 'incognito', [CompletionResultType]::ParameterName, 'Don''t update local history for actions')
+            break
+        }
+    })
+
+    $completions.Where{ $_.CompletionText -like "$wordToComplete*" } |
+        Sort-Object -Property ListItemText
+}

+ 2254 - 0
contrib/completions/ffsend.bash

@@ -0,0 +1,2254 @@
+_ffsend() {
+    local i cur prev opts cmds
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    cmd=""
+    opts=""
+
+    for i in ${COMP_WORDS[@]}
+    do
+        case "${i}" in
+            ffsend)
+                cmd="ffsend"
+                ;;
+            
+            complete)
+                cmd+="__complete"
+                ;;
+            completion)
+                cmd+="__completion"
+                ;;
+            completions)
+                cmd+="__completions"
+                ;;
+            d)
+                cmd+="__d"
+                ;;
+            dbg)
+                cmd+="__dbg"
+                ;;
+            debug)
+                cmd+="__debug"
+                ;;
+            del)
+                cmd+="__del"
+                ;;
+            delete)
+                cmd+="__delete"
+                ;;
+            down)
+                cmd+="__down"
+                ;;
+            download)
+                cmd+="__download"
+                ;;
+            e)
+                cmd+="__e"
+                ;;
+            exist)
+                cmd+="__exist"
+                ;;
+            exists)
+                cmd+="__exists"
+                ;;
+            gen)
+                cmd+="__gen"
+                ;;
+            generate)
+                cmd+="__generate"
+                ;;
+            h)
+                cmd+="__h"
+                ;;
+            help)
+                cmd+="__help"
+                ;;
+            history)
+                cmd+="__history"
+                ;;
+            i)
+                cmd+="__i"
+                ;;
+            info)
+                cmd+="__info"
+                ;;
+            information)
+                cmd+="__information"
+                ;;
+            ls)
+                cmd+="__ls"
+                ;;
+            p)
+                cmd+="__p"
+                ;;
+            param)
+                cmd+="__param"
+                ;;
+            parameter)
+                cmd+="__parameter"
+                ;;
+            parameters)
+                cmd+="__parameters"
+                ;;
+            params)
+                cmd+="__params"
+                ;;
+            pass)
+                cmd+="__pass"
+                ;;
+            password)
+                cmd+="__password"
+                ;;
+            u)
+                cmd+="__u"
+                ;;
+            up)
+                cmd+="__up"
+                ;;
+            upload)
+                cmd+="__upload"
+                ;;
+            v)
+                cmd+="__v"
+                ;;
+            ver)
+                cmd+="__ver"
+                ;;
+            version)
+                cmd+="__version"
+                ;;
+            *)
+                ;;
+        esac
+    done
+
+    case "${cmd}" in
+        ffsend)
+            opts=" -f -I -y -q -v -i -h -V -t -T -A -H  --force --no-interact --yes --quiet --verbose --incognito --help --version --timeout --transfer-timeout --api --history   debug delete download exists generate info parameters password upload version history help  dbg  del  d down  e exist  gen  i information  params param parameter  pass p  u up  ver v  h ls"
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        
+        ffsend__d)
+            opts=" -e -h -V -f -I -y -q -v -i -p -o -t -T -A -H  --extract --help --version --force --no-interact --yes --quiet --verbose --incognito --password --output --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --output)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__dbg)
+            opts=" -V -f -I -y -q -v -i -h -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --host --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__debug)
+            opts=" -V -f -I -y -q -v -i -h -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --host --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__del)
+            opts=" -h -V -f -I -y -q -v -i -o -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__delete)
+            opts=" -h -V -f -I -y -q -v -i -o -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__down)
+            opts=" -e -h -V -f -I -y -q -v -i -p -o -t -T -A -H  --extract --help --version --force --no-interact --yes --quiet --verbose --incognito --password --output --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --output)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__download)
+            opts=" -e -h -V -f -I -y -q -v -i -p -o -t -T -A -H  --extract --help --version --force --no-interact --yes --quiet --verbose --incognito --password --output --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --output)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__e)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__exist)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__exists)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__gen)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history   completions help  completion complete"
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__generate)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history   completions help  completion complete"
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__generate__complete)
+            opts=" -h -V -f -I -y -q -v -i -o -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --output --timeout --transfer-timeout --api --history  <SHELL>... "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --output)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__generate__completion)
+            opts=" -h -V -f -I -y -q -v -i -o -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --output --timeout --transfer-timeout --api --history  <SHELL>... "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --output)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__generate__completions)
+            opts=" -h -V -f -I -y -q -v -i -o -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --output --timeout --transfer-timeout --api --history  <SHELL>... "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --output)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__generate__help)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__h)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__help)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__history)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__i)
+            opts=" -h -V -f -I -y -q -v -i -o -p -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --password --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__info)
+            opts=" -h -V -f -I -y -q -v -i -o -p -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --password --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__information)
+            opts=" -h -V -f -I -y -q -v -i -o -p -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --password --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__ls)
+            opts=" -h -V -f -I -y -q -v -i -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__p)
+            opts=" -P -h -V -f -I -y -q -v -i -p -o -t -T -A -H  --gen-passphrase --help --version --force --no-interact --yes --quiet --verbose --incognito --password --owner --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__param)
+            opts=" -h -V -f -I -y -q -v -i -o -d -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --download-limit --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --download-limit)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -d)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__parameter)
+            opts=" -h -V -f -I -y -q -v -i -o -d -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --download-limit --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --download-limit)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -d)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__parameters)
+            opts=" -h -V -f -I -y -q -v -i -o -d -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --download-limit --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --download-limit)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -d)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__params)
+            opts=" -h -V -f -I -y -q -v -i -o -d -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --owner --download-limit --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --download-limit)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -d)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__pass)
+            opts=" -P -h -V -f -I -y -q -v -i -p -o -t -T -A -H  --gen-passphrase --help --version --force --no-interact --yes --quiet --verbose --incognito --password --owner --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__password)
+            opts=" -P -h -V -f -I -y -q -v -i -p -o -t -T -A -H  --gen-passphrase --help --version --force --no-interact --yes --quiet --verbose --incognito --password --owner --timeout --transfer-timeout --api --history  <URL> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --owner)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -o)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__u)
+            opts=" -P -o -a -c -C -S -Q -V -f -I -y -q -v -i -p -d -h -n -t -T -A -H  --gen-passphrase --open --archive --copy --copy-cmd --shorten --qrcode --help --version --force --no-interact --yes --quiet --verbose --incognito --password --download-limit --host --name --timeout --transfer-timeout --api --history  <FILE> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --download-limit)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -d)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --name)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -n)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__up)
+            opts=" -P -o -a -c -C -S -Q -V -f -I -y -q -v -i -p -d -h -n -t -T -A -H  --gen-passphrase --open --archive --copy --copy-cmd --shorten --qrcode --help --version --force --no-interact --yes --quiet --verbose --incognito --password --download-limit --host --name --timeout --transfer-timeout --api --history  <FILE> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --download-limit)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -d)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --name)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -n)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__upload)
+            opts=" -P -o -a -c -C -S -Q -V -f -I -y -q -v -i -p -d -h -n -t -T -A -H  --gen-passphrase --open --archive --copy --copy-cmd --shorten --qrcode --help --version --force --no-interact --yes --quiet --verbose --incognito --password --download-limit --host --name --timeout --transfer-timeout --api --history  <FILE> "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --password)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -p)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --download-limit)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -d)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --name)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -n)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__v)
+            opts=" -V -f -I -y -q -v -i -h -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --host --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__ver)
+            opts=" -V -f -I -y -q -v -i -h -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --host --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+        ffsend__version)
+            opts=" -V -f -I -y -q -v -i -h -t -T -A -H  --help --version --force --no-interact --yes --quiet --verbose --incognito --host --timeout --transfer-timeout --api --history  "
+            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
+                COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+                return 0
+            fi
+            case "${prev}" in
+                
+                --host)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -h)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -t)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --transfer-timeout)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -T)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --api)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -A)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                --history)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                    -H)
+                    COMPREPLY=($(compgen -f ${cur}))
+                    return 0
+                    ;;
+                *)
+                    COMPREPLY=()
+                    ;;
+            esac
+            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+            return 0
+            ;;
+    esac
+}
+
+complete -F _ffsend -o bashdefault -o default ffsend

+ 470 - 0
contrib/completions/ffsend.elv

@@ -0,0 +1,470 @@
+
+edit:completion:arg-completer[ffsend] = [@words]{
+    fn spaces [n]{
+        repeat $n ' ' | joins ''
+    }
+    fn cand [text desc]{
+        edit:complex-candidate $text &display-suffix=' '(spaces (- 14 (wcswidth $text)))$desc
+    }
+    command = 'ffsend'
+    for word $words[1:-1] {
+        if (has-prefix $word '-') {
+            break
+        }
+        command = $command';'$word
+    }
+    completions = [
+        &'ffsend'= {
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand debug 'View debug information'
+            cand delete 'Delete a shared file'
+            cand download 'Download files'
+            cand exists 'Check whether a remote file exists'
+            cand generate 'Generate assets'
+            cand info 'Fetch info about a shared file'
+            cand parameters 'Change parameters of a shared file'
+            cand password 'Change the password of a shared file'
+            cand upload 'Upload files'
+            cand version 'Determine the Send server version'
+            cand history 'View file history'
+            cand help 'Prints this message or the help of the given subcommand(s)'
+        }
+        &'ffsend;debug'= {
+            cand -h 'The remote host to upload to'
+            cand --host 'The remote host to upload to'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;delete'= {
+            cand -o 'Specify the file owner token'
+            cand --owner 'Specify the file owner token'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;download'= {
+            cand -p 'Unlock a password protected file'
+            cand --password 'Unlock a password protected file'
+            cand -o 'Output file or directory'
+            cand --output 'Output file or directory'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -e 'Extract an archived file'
+            cand --extract 'Extract an archived file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;exists'= {
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;generate'= {
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+            cand completions 'Shell completions'
+            cand help 'Prints this message or the help of the given subcommand(s)'
+        }
+        &'ffsend;generate;completions'= {
+            cand -o 'Shell completion files output directory'
+            cand --output 'Shell completion files output directory'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;generate;help'= {
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;info'= {
+            cand -o 'Specify the file owner token'
+            cand --owner 'Specify the file owner token'
+            cand -p 'Unlock a password protected file'
+            cand --password 'Unlock a password protected file'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;parameters'= {
+            cand -o 'Specify the file owner token'
+            cand --owner 'Specify the file owner token'
+            cand -d 'The file download limit'
+            cand --download-limit 'The file download limit'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;password'= {
+            cand -p 'Specify a password, do not prompt'
+            cand --password 'Specify a password, do not prompt'
+            cand -o 'Specify the file owner token'
+            cand --owner 'Specify the file owner token'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -P 'Protect the file with a generated passphrase'
+            cand --gen-passphrase 'Protect the file with a generated passphrase'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;upload'= {
+            cand -p 'Protect the file with a password'
+            cand --password 'Protect the file with a password'
+            cand -d 'The file download limit'
+            cand --download-limit 'The file download limit'
+            cand -h 'The remote host to upload to'
+            cand --host 'The remote host to upload to'
+            cand -n 'Rename the file being uploaded'
+            cand --name 'Rename the file being uploaded'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -P 'Protect the file with a generated passphrase'
+            cand --gen-passphrase 'Protect the file with a generated passphrase'
+            cand -o 'Open the share link in your browser'
+            cand --open 'Open the share link in your browser'
+            cand -a 'Archive the upload in a single file'
+            cand --archive 'Archive the upload in a single file'
+            cand -c 'Copy the share link to your clipboard'
+            cand --copy 'Copy the share link to your clipboard'
+            cand -C 'Copy the ffsend download command to your clipboard'
+            cand --copy-cmd 'Copy the ffsend download command to your clipboard'
+            cand -S 'Shorten share URLs with a public service'
+            cand --shorten 'Shorten share URLs with a public service'
+            cand -Q 'Print a QR code for the share URL'
+            cand --qrcode 'Print a QR code for the share URL'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;version'= {
+            cand -h 'The remote host to upload to'
+            cand --host 'The remote host to upload to'
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;history'= {
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+        &'ffsend;help'= {
+            cand -t 'Request timeout (0 to disable)'
+            cand --timeout 'Request timeout (0 to disable)'
+            cand -T 'Transfer timeout (0 to disable)'
+            cand --transfer-timeout 'Transfer timeout (0 to disable)'
+            cand -A 'Server API version to use, ''-'' to lookup'
+            cand --api 'Server API version to use, ''-'' to lookup'
+            cand -H 'Use the specified history file'
+            cand --history 'Use the specified history file'
+            cand -h 'Prints help information'
+            cand --help 'Prints help information'
+            cand -V 'Prints version information'
+            cand --version 'Prints version information'
+            cand -f 'Force the action, ignore warnings'
+            cand --force 'Force the action, ignore warnings'
+            cand -I 'Not interactive, do not prompt'
+            cand --no-interact 'Not interactive, do not prompt'
+            cand -y 'Assume yes for prompts'
+            cand --yes 'Assume yes for prompts'
+            cand -q 'Produce output suitable for logging and automation'
+            cand --quiet 'Produce output suitable for logging and automation'
+            cand -v 'Enable verbose information and logging'
+            cand --verbose 'Enable verbose information and logging'
+            cand -i 'Don''t update local history for actions'
+            cand --incognito 'Don''t update local history for actions'
+        }
+    ]
+    $completions[$command]
+}

+ 219 - 0
contrib/completions/ffsend.fish

@@ -0,0 +1,219 @@
+complete -c ffsend -n "__fish_use_subcommand" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_use_subcommand" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_use_subcommand" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_use_subcommand" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_use_subcommand" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_use_subcommand" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_use_subcommand" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_use_subcommand" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_use_subcommand" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_use_subcommand" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_use_subcommand" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_use_subcommand" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "debug" -d 'View debug information'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "delete" -d 'Delete a shared file'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "download" -d 'Download files'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "exists" -d 'Check whether a remote file exists'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "generate" -d 'Generate assets'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "info" -d 'Fetch info about a shared file'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "parameters" -d 'Change parameters of a shared file'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "password" -d 'Change the password of a shared file'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "upload" -d 'Upload files'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "version" -d 'Determine the Send server version'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "history" -d 'View file history'
+complete -c ffsend -n "__fish_use_subcommand" -f -a "help" -d 'Prints this message or the help of the given subcommand(s)'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s h -l host -d 'The remote host to upload to'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from debug" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s o -l owner -d 'Specify the file owner token'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from delete" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s p -l password -d 'Unlock a password protected file'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s o -l output -d 'Output file or directory'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s e -l extract -d 'Extract an archived file'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from download" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from exists" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -f -a "completions" -d 'Shell completions'
+complete -c ffsend -n "__fish_seen_subcommand_from generate" -f -a "help" -d 'Prints this message or the help of the given subcommand(s)'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s o -l output -d 'Shell completion files output directory'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from completions" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s o -l owner -d 'Specify the file owner token'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s p -l password -d 'Unlock a password protected file'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from info" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s o -l owner -d 'Specify the file owner token'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s d -l download-limit -d 'The file download limit'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from parameters" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s p -l password -d 'Specify a password, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s o -l owner -d 'Specify the file owner token'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s P -l gen-passphrase -d 'Protect the file with a generated passphrase'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from password" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s p -l password -d 'Protect the file with a password'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s d -l download-limit -d 'The file download limit'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s h -l host -d 'The remote host to upload to'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s n -l name -d 'Rename the file being uploaded'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s P -l gen-passphrase -d 'Protect the file with a generated passphrase'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s o -l open -d 'Open the share link in your browser'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s a -l archive -d 'Archive the upload in a single file'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s c -l copy -d 'Copy the share link to your clipboard'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s C -l copy-cmd -d 'Copy the ffsend download command to your clipboard'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s S -l shorten -d 'Shorten share URLs with a public service'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s Q -l qrcode -d 'Print a QR code for the share URL'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from upload" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s h -l host -d 'The remote host to upload to'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from version" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from history" -s i -l incognito -d 'Don\'t update local history for actions'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s t -l timeout -d 'Request timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s T -l transfer-timeout -d 'Transfer timeout (0 to disable)'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s A -l api -d 'Server API version to use, \'-\' to lookup'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s H -l history -d 'Use the specified history file'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s h -l help -d 'Prints help information'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s V -l version -d 'Prints version information'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s f -l force -d 'Force the action, ignore warnings'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s I -l no-interact -d 'Not interactive, do not prompt'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s y -l yes -d 'Assume yes for prompts'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s q -l quiet -d 'Produce output suitable for logging and automation'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s v -l verbose -d 'Enable verbose information and logging'
+complete -c ffsend -n "__fish_seen_subcommand_from help" -s i -l incognito -d 'Don\'t update local history for actions'

+ 8 - 0
contrib/completions/gen_completions

@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+# Stop on error
+set -e
+
+echo "Generating all completions using cargo debug binary..."
+cargo run -q -- generate completions all --output $PWD
+echo "Done."

+ 3 - 3
src/action/generate/completions.rs

@@ -27,7 +27,7 @@ impl<'a> Completions<'a> {
         // Obtian shells to generate completions for, build application definition
         let shells = matcher_completions.shells();
         let dir = matcher_completions.output();
-        let verbose = matcher_main.verbose();
+        let quiet = matcher_main.quiet();
         let mut app = crate::cmd::handler::Handler::build();
 
         // If the directory does not exist yet, attempt to create it
@@ -37,14 +37,14 @@ impl<'a> Completions<'a> {
 
         // Generate completions
         for shell in shells {
-            if verbose {
+            if !quiet {
                 print!(
                     "Generating completions for {}...",
                     format!("{}", shell).to_lowercase()
                 );
             }
             app.gen_completions(crate_name!(), shell, &dir);
-            if verbose {
+            if !quiet {
                 println!(" done.");
             }
         }