From 8d9c796d60b9876fb6a6fc9be6cc4f45c361e968 Mon Sep 17 00:00:00 2001 From: Marty Sluijtman Date: Sun, 21 Aug 2022 23:27:36 +0200 Subject: [PATCH] Proper zsh completion --- zsh.completion | 353 ++----------------------------------------------- 1 file changed, 14 insertions(+), 339 deletions(-) diff --git a/zsh.completion b/zsh.completion index 79909ee..4d4aa44 100644 --- a/zsh.completion +++ b/zsh.completion @@ -1,341 +1,16 @@ #compdef sheet-parser -_sheet-parser () { - local cmd - if (( CURRENT > 2)); then - cmd=${words[2]} - curcontext="${curcontext%:*:*}:gopass-$cmd" - (( CURRENT-- )) - shift words - case "${cmd}" in - age) - local -a subcommands - subcommands=( - "identities:List identities" - ) - _describe -t commands "gopass age" subcommands - - - - ;; - alias) - local -a subcommands - subcommands=( - "add:Add a new alias" - "remove:Remove an alias from a domain" - "delete:Delete an entire domain" - ) - _describe -t commands "gopass alias" subcommands - - - - ;; - audit) - _arguments : "--expiry[Age in days before a password is considered expired. Setting this will only check expiration.]" - - - ;; - cat) - - - - ;; - clone) - _arguments : "--path[Path to clone the repo to]" "--crypto[Select crypto backend \[age gpgcli plain\]]" "--storage[Select storage backend \[fossilfs gitfs\]]" "--check-keys[Check for valid decryption keys. Generate new keys if none are found.]" - - - ;; - completion) - local -a subcommands - subcommands=( - "bash:Source for auto completion in bash" - "zsh:Source for auto completion in zsh" - "fish:Source for auto completion in fish" - "openbsdksh:Source for auto completion in OpenBSD's ksh" - ) - _describe -t commands "gopass completion" subcommands - - - - ;; - config) - - - - ;; - convert) - _arguments : "--store[Specify which store to convert]" "--move[Replace store?]" "--crypto[Which crypto backend? \[age gpgcli plain\]]" "--storage[Which storage backend? \[fossilfs fs gitfs\]]" - - - ;; - copy|cp) - _arguments : "--force[Force to copy the secret and overwrite existing one]" - - _gopass_complete_passwords - ;; - create|new) - _arguments : "--store[Which store to use]" "--force[Force path selection]" - - - ;; - delete|remove|rm) - _arguments : "--recursive[Recursive delete files and folders]" "--force[Force to delete the secret]" - - _gopass_complete_passwords - ;; - edit|set) - _arguments : "--editor[Use this editor binary]" "--create[Create a new secret if none found]" - - _gopass_complete_passwords - ;; - env) - _arguments : "--keep-case[Do not capitalize the environment variable and instead retain the original capitalization]" - - - ;; - find|search) - _arguments : "--clip[Copy the password into the clipboard]" "--unsafe[In the case of an exact match, display the password even if safecontent is enabled]" - - - ;; - fsck) - _arguments : "--decrypt[Decrypt and reencryt during fsck. -WARNING: This will update the secret content to the latest format. This might be incompatible with other implementations. Use with caution!]" - - - ;; - fscopy) - - - - ;; - fsmove) - - - - ;; - generate) - _arguments : "--clip[Copy the generated password to the clipboard]" "--print[Print the generated password to the terminal]" "--force[Force to overwrite existing password]" "--edit[Open secret for editing after generating a password]" "--symbols[Use symbols in the password]" "--generator[Choose a password generator, use one of: cryptic, memorable, xkcd or external. Default: cryptic]" "--strict[Require strict character class rules]" "--sep[Word separator for generated passwords. If no separator is specified, the words are combined without spaces/separator and the first character of words is capitalised.]" "--lang[Language to generate password from, currently only en (english, default) is supported]" - _gopass_complete_folders - _gopass_complete_passwords - ;; - git) - _arguments : "--store[Store to operate on]" - - - ;; - grep) - _arguments : "--regexp[Interpret pattern as RE2 regular expression]" - - - ;; - history|hist) - _arguments : "--password[Include passwords in output]" - - - ;; - init) - _arguments : "--path[Set the sub-store path to operate on]" "--store[Set the name of the sub-store]" "--crypto[Select crypto backend \[age gpgcli plain\]]" "--storage[Select storage backend \[fossilfs fs gitfs\]]" - - - ;; - insert) - _arguments : "--echo[Display secret while typing]" "--multiline[Insert using $EDITOR]" "--force[Overwrite any existing secret and do not prompt to confirm recipients]" "--append[Append data read from STDIN to existing data]" - _gopass_complete_folders - _gopass_complete_passwords - ;; - link|ln|symlink) - - - - ;; - list|ls) - _arguments : "--limit[Display no more than this many levels of the tree]" "--flat[Print a flat list]" "--folders[Print a flat list of folders]" "--strip-prefix[Strip this prefix from filtered entries]" - _gopass_complete_folders - - ;; - merge) - _arguments : "--delete[Remove merged entries]" "--force[Skip editor, merge entries unattended]" - - - ;; - mounts) - local -a subcommands - subcommands=( - "add:Mount a password store" - "remove:Umount an mounted password store" - ) - _describe -t commands "gopass mounts" subcommands - - - - ;; - move|mv) - _arguments : "--force[Force to move the secret and overwrite existing one]" - - _gopass_complete_passwords - ;; - otp|totp|hotp) - _arguments : "--clip[Copy the time-based token into the clipboard]" "--qr[Write QR code to FILE]" "--password[Only display the token]" - - - ;; - process) - - - - ;; - pwgen) - _arguments : "--no-numerals[Do not include numerals in the generated passwords.]" "--no-capitalize[Do not include capital letter in the generated passwords.]" "--ambiguous[Do not include characters that could be easily confused with each other, like '1' and 'l' or '0' and 'O']" "--symbols[Include at least one symbol in the password.]" "--one-per-line[Print one password per line]" "--xkcd[Use multiple random english words combined to a password. By default, space is used as separator and all words are lowercase]" "--sep[Word separator for generated xkcd style password. If no separator is specified, the words are combined without spaces/separator and the first character of words is capitalised. This flag implies -xkcd]" "--lang[Language to generate password from, currently only en (english, default) is supported]" - - - ;; - rcs) - local -a subcommands - subcommands=( - "init:Init RCS repo" - "status:RCS status" - ) - _describe -t commands "gopass rcs" subcommands - - - - ;; - recipients) - local -a subcommands - subcommands=( - "add:Add any number of Recipients to any store" - "remove:Remove any number of Recipients from any store" - ) - _describe -t commands "gopass recipients" subcommands - - - - ;; - setup) - _arguments : "--remote[URL to a git remote, will attempt to join this team]" "--alias[Local mount point for the given remote]" "--create[Create a new team (default: false, i.e. join an existing team)]" "--name[Firstname and Lastname for unattended GPG key generation]" "--email[EMail for unattended GPG key generation]" "--crypto[Select crypto backend \[age gpgcli plain\]]" "--storage[Select storage backend \[fossilfs fs gitfs\]]" - - - ;; - show) - _arguments : "--yes[Always answer yes to yes/no questions]" "--clip[Copy the password value into the clipboard]" "--alsoclip[Copy the password and show everything]" "--qr[Print the password as a QR Code]" "--unsafe[Display unsafe content (e.g. the password) even if safecontent is enabled]" "--password[Display only the password. Takes precedence over all other flags.]" "--revision[Show a past revision. Does NOT support RCS specific shortcuts. Use exact revision or - to select the Nth oldest revision of this entry.]" "--noparsing[Do not parse the output.]" "--chars[Print specific characters from the secret]" - - _gopass_complete_passwords - ;; - sum|sha|sha256) - - - - ;; - sync) - _arguments : "--store[Select the store to sync]" - - - ;; - templates) - local -a subcommands - subcommands=( - "show:Show a secret template." - "edit:Edit secret templates." - "remove:Remove secret templates." - ) - _describe -t commands "gopass templates" subcommands - - - - ;; - unclip) - _arguments : "--timeout[Time to wait]" "--force[Clear clipboard even if checksum mismatches]" - - - ;; - update) - - - - ;; - version) - - - - ;; - help|h) - - - - ;; - *) - _gopass_complete_passwords - ;; - esac - else - local -a subcommands - subcommands=( - "age:age commands" - "alias:Manage domain aliases" - "audit:Decrypt all secrets and scan for weak or leaked passwords" - "cat:Decode and print content of a binary secret to stdout, or encode and insert from stdin" - "clone:Clone a password store from a git repository" - "completion:Bash and ZSH completion" - "config:Display and edit the configuration file" - "convert:Convert a store to different backends" - "copy:Copy secrets from one location to another" - "create:Easy creation of new secrets" - "delete:Remove one or many secrets from the store" - "edit:Edit new or existing secrets" - "env:Run a subprocess with a pre-populated environment" - "find:Search for secrets" - "fsck:Check store integrity" - "fscopy:Copy files from or to the password store" - "fsmove:Move files from or to the password store" - "generate:Generate a new password" - "git:Run a git command inside a password store: gopass git [--store=] " - "grep:Search for secrets files containing search-string when decrypted." - "history:Show password history" - "init:Initialize new password store." - "insert:Insert a new secret" - "link:Create a symlink" - "list:List existing secrets" - "merge:Merge multiple secrets into one" - "mounts:Edit mounted stores" - "move:Move secrets from one location to another" - "otp:Generate time- or hmac-based tokens" - "process:Process a template file" - "pwgen:Generate passwords" - "rcs:Run a RCS command inside a password store" - "recipients:Edit recipient permissions" - "setup:Initialize a new password store" - "show:Display the content of a secret" - "sum:Compute the SHA256 checksum" - "sync:Sync all local stores with their remotes" - "templates:Edit templates" - "unclip:Internal command to clear clipboard" - "update:Check for updates" - "version:Display version" - "help:Shows a list of commands or help for one command" - ) - _describe -t command 'gopass' subcommands - _arguments : "--yes[Always answer yes to yes/no questions]" "--clip[Copy the password value into the clipboard]" "--alsoclip[Copy the password and show everything]" "--qr[Print the password as a QR Code]" "--unsafe[Display unsafe content (e.g. the password) even if safecontent is enabled]" "--password[Display only the password. Takes precedence over all other flags.]" "--revision[Show a past revision. Does NOT support RCS specific shortcuts. Use exact revision or - to select the Nth oldest revision of this entry.]" "--noparsing[Do not parse the output.]" "--chars[Print specific characters from the secret]" "--help[show help]" "--version[print the version]" - _gopass_complete_passwords - fi -} - -_gopass_complete_keys () { - local IFS=$'\n' - _values 'gpg keys' $(gpg2 --list-secret-keys --with-colons 2> /dev/null | cut -d : -f 10 | sort -u | sed '/^$/d') -} - -_gopass_complete_passwords () { - local IFS=$'\n' - _arguments : \ - "--clip[Copy the first line of the secret into the clipboard]" - _values 'passwords' $(gopass ls --flat) -} - -_gopass_complete_folders () { - local -a folders - folders=("${(@f)$(gopass ls --folders --flat)}") - _describe -t folders "folders" folders -qS / -} - -_gopass +arguments=( + '(--file)-f=[Path to charactersheet]:character sheet:_files -g "*.(json)(-.)"' + '(-f)--file=[Path to charactersheet]:character sheet:_files -g "*.(json)(-.)"' + '(--save --stat --verbose)-v[To be used in conjuction with list parameters]' + '(--save --stat -v)--verbose[To be used in conjuction with list parameters]' + '--stat-list[List stats found in file]' + '--skill-list[List skills found in file]' + '(--advantage --disadvantage)--advantage[Roll with advantage]' + '(--advantage --disadvantage)--disadvantage[Roll with disadvantage]' + '(--skill --save --stat --skill-list --stat-list -v --verbose)--stat[Roll a stat check]:stat to roll:(strength dexterity constitution intelligence wisdom charisma)' + '(--skill --save --stat --skill-list --stat-list -v --verbose)--save[Roll a saving throw]:stat to roll:(strength dexterity constitution intelligence wisdom charisma)' + '(--skill --save --stat --skill-list --stat-list -v --verbose)--skill[Roll a skill check]:stat to roll:(athletics acrobatics sleight_of_hand stealth arcana history investigation nature religion animal_handling insight medicine perception survival deception intimidation performance persuasion)' +) +_arguments : $arguments