#compdef keyringer
+# Completion for git subcommand
+_keyringer_git_complete() {
+ if [ -e "/etc/bash_completion.d/git" ]; then
+ (
+ source /etc/bash_completion.d/git
+ cd $path
+ COMP_WORDS=(git $*)
+ COMP_CWORD=$((${#COMP_WORDS[*]} - 1))
+
+ if [ "$COMP_CWORD" == "0" ]; then
+ COMP_CWORD=1
+ fi
+
+ _git
+
+ LAST=${COMP_WORDS[COMP_CWORD]}
+ REPLY=${COMPREPLY[@]}
+
+ if [ "$REPLY" == "$LAST" ]; then
+ return
+ fi
+
+ echo ${COMPREPLY[@]}
+ )
+ fi
+}
+
_keyringer() {
local curcontext="$curcontext" state line
typeset -A opt_args
local config="$HOME/.keyringer"
local keyrings="`ls $config | sed -e 's/config//'`"
- _arguments \
- '1: :->keyring'\
- '2: :->action'\
- '*: :->options'
+ _arguments \
+ '1: :->keyring' \
+ '2: :->action' \
+ '3: :->options' \
+ '4: :->misc' \
+ '*: :->final'
case $state in
keyring)
action)
compadd "$@" `keyringer $words[2] commands`
;;
+ options)
+ case $words[3] in
+ options|preferences)
+ compadd "$@" ls edit add
+ ;;
+ recipients)
+ compadd "$@" ls edit
+ ;;
+ ls|encrypt|encrypt-batch|decrypt|edit|append|append-batch|del|recrypt)
+ # TODO: do not rely on bash
+ compadd "$@" $(bash -c "set -f && keyringer $words[2] ls -p -d $words[4]*" 2> /dev/null)
+ ;;
+ genpair)
+ compadd "$@" gpg ssh ssl ssl-self
+ ;;
+ git)
+ compadd "$@" $(_keyringer_git_complete $words[4])
+ ;;
+ *)
+ ;;
+ esac
+ ;;
+ misc)
+ case "$words[3]" in
+ recipients)
+ compadd "$@" $(cd $path/config/recipients && ls -p $words[5]* 2> /dev/null)
+ ;;
+ genpair)
+ # TODO: do not rely on bash
+ compadd "$@" $(bash -c "set -f && keyringer $instance ls -p -d $words[5]*" 2> /dev/null)
+ ;;
+ git)
+ # TODO
+ compadd "$@" $(_keyringer_git_complete $words[4] $words[5])
+ ;;
+ *)
+ ;;
+ esac
+ ;;
*)
- # TODO
- true
+ if [ $words[3] == "$git" ]; then
+ # TODO
+ true
+ fi
;;
esac
}