summaryrefslogtreecommitdiff
path: root/completions/secret-tool
diff options
context:
space:
mode:
Diffstat (limited to 'completions/secret-tool')
-rw-r--r--completions/secret-tool50
1 files changed, 50 insertions, 0 deletions
diff --git a/completions/secret-tool b/completions/secret-tool
new file mode 100644
index 00000000..5462fc06
--- /dev/null
+++ b/completions/secret-tool
@@ -0,0 +1,50 @@
+# bash completion for secret-tool(1) -*- shell-script -*-
+
+_secret_tool()
+{
+ local cur prev words cword split
+ _init_completion -s || return
+
+ $split && return
+
+ local -i i
+ local mode word
+ for i in ${!words[*]}; do
+ if [[ $i -gt 0 && ${words[i]} != -* ]]; then
+ ((i != cword)) && mode=${words[i]}
+ break
+ fi
+ done
+ if [[ ! -v mode ]]; then
+ local -a modes
+ modes=($("$1" nonexistent-mode 2>&1 |
+ while read -r first second third rest; do
+ if [[ $first == "${1##*/}" ]]; then
+ printf "%s\n" "$second"
+ elif [[ $first == usage: && $second == "${1##*/}" ]]; then
+ printf "%s\n" "$third"
+ fi
+ done))
+ COMPREPLY=($(compgen -W '${modes[@]}' -- "$cur"))
+ return
+ fi
+
+ case $mode in
+ store)
+ if [[ ${words[*]} != *\ --label[\ =]* ]]; then
+ COMPREPLY=($(compgen -W "--label=" -- "$cur"))
+ [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
+ fi
+ ;;
+ search)
+ local -A opts=([--all]="" [--unlock]="")
+ for word in "${words[@]:2}"; do
+ [[ $word ]] && unset opts["$word"]
+ done
+ COMPREPLY=($(compgen -W '${opts[@]}' -- "$cur"))
+ ;;
+ esac
+} &&
+ complete -F _secret_tool secret-tool
+
+# ex: filetype=sh