dotfiles/zsh/.oh-my-zsh/plugins/lpass/_lpass
2024-06-19 00:06:56 +02:00

169 lines
6.1 KiB
Bash

#compdef lpass
_lpass() {
local cmd has_color has_sync has_interactive
if (( CURRENT > 2)); then
cmd=${words[2]}
# Set the context for the subcommand.
curcontext="${curcontext%:*:*}:lpass-$cmd"
# Narrow the range of words we are looking at to exclude `lpass'
(( CURRENT-- ))
shift words
# Run the completion for the subcommand
case "${cmd}" in
login)
_arguments : \
'--trust[Cause subsequent logins to not require multifactor authentication.]' \
'--plaintext-key[Save plaintext decryption key to the hard disk]' \
'--force[Do not ask on saving plaintext key]'
has_color=1
;;
logout)
_arguments : '--force[Force confirmation]'
has_color=1
;;
show)
_arguments : \
'(-c --clip)'{-c,--clip}'[Copy output to clipboard]' \
'(-x --expand-multi)'{-x,---expand-multi}'[Show the requested information from all of the matching sites]' \
'(--all --username --password --url --notes --field= --id --name --attach=)'{--all,--username,--password,--url,--notes,--field=,--id,--name,--attach=}'[Output the specific field]' \
'(--basic-regexp,--fixed-string)'{-G,--basic-regexp}'[Find a site by substring or regular expression]' \
'--format=[Format output with printf-style placeholders]'
_lpass_complete_uniqenames
has_color=1
has_sync=1
;;
ls)
_arguments : \
'(-l --long)'{-l,--long}'[Also list the last modification time and username]' \
'-u[List username]' \
'-m[List modification time]' \
'--format=[Format output with printf-style placeholders]'
_lpass_complete_groups
has_color=1
has_sync=1
;;
mv)
_lpass_complete_uniqenames
_lpass_complete_groups
has_color=1
;;
duplicate|rm)
_lpass_complete_uniqenames
has_color=1
has_sync=1
;;
add)
_arguments : '(--username --password --url --notes --field=)'{--username,--password,--url,--notes,--field=}'[Add field]'
_lpass_complete_uniqenames
has_color=1
has_sync=1
has_interactive=1
;;
edit)
_arguments : '(--name --username --password --url --notes --field=)'{--name,--username,--password,--url,--notes,--field=}'[Update field]'
_lpass_complete_uniqenames
has_color=1
has_sync=1
has_interactive=1
;;
generate)
_arguments : \
'(-c --clip)'{-c,--clip}'[Copy output to clipboard]' \
'--username=[USERNAME]' \
'--url=[URL]' \
'--no-symbols[Do not use symbols]'
has_sync=1
;;
status)
_arguments : '(-q --quiet)'{-q,--quiet}'[Supress output to stdout]'
has_color=1
;;
sync)
_arguments : '(-b --background)'{-b,--background}'[Run sync in background]'
has_color=1
;;
export)
_arguments : '--fields=[Field list]'
has_color=1
has_sync=1
;;
import)
if ((CURRENT < 3)); then
_files
fi
;;
esac
if [ -n "$has_sync" ] || [ -n "$has_color" ] || [ -n "$has_interactive" ]; then
local -a generic_options
if [ "$has_sync" -eq 1 ]; then
generic_options+=('--sync=[Synchronize local cache with server: auto | now | no]')
fi
if [ "$has_color" -eq 1 ]; then
generic_options+=('--color=[Color: auto | never | always]')
fi
if [ "$has_interactive" -eq 1 ]; then
generic_options+=("--non-interactive[Use standard input instead of $EDITOR]")
fi
_arguments $generic_options
fi
else
local -a subcommands
subcommands=(
"login:Authenticate with the LastPass server and initialize a local cache"
"logout:Remove the local cache and stored encryption keys"
"passwd:Change your LastPass password"
"show:Display a password or selected field"
"ls:List names in groups in a tree structure"
"mv:Move the specified entry to a new group"
"add:Add a new entry"
"edit:Edit the selected field"
"generate:Create a randomly generated password"
"duplicate:Create a duplicate entry of the one specified"
"rm:Remove the specified entry"
"status:Show current login status"
"sync:Synchronize local cache with server"
"export:Dump all account information including passwords as unencrypted csv to stdout"
"import:Upload accounts from an unencrypted CSV file to the server"
"share:Manipulate shared folders (only enterprise or premium user)"
)
_describe -t commands 'lpass' subcommands
_arguments : \
'(-h --help)'{-h,--help}'[show help]' \
'(-v --version)'{-v,--version}'[show version]'
fi
}
_lpass_complete_uniqenames(){
local -a entries
while read i; do
if [ -n "$i" ]; then
entries+=("$i")
fi
done < <(lpass ls --sync auto --format "%an" --color=never)
compadd -a entries
}
_lpass_complete_groups() {
local -a entries
while read i; do
if [ -n "$i" ]; then
entries+=("$i")
fi
done < <(lpass ls --sync auto --format "%aN" --color=never | grep -E "\/$")
compadd -a entries
}
_lpass
# Local Variables:
# mode: Shell-Script
# sh-indentation: 2
# indent-tabs-mode: nil
# sh-basic-offset: 2
# End:
# vim: ft=zsh sw=2 ts=2 et