Skip to content
Snippets Groups Projects
_cranspasswords 3.85 KiB
Newer Older
#compdef cranspasswords

_cranspasswords(){
    local cmd
    if (( CURRENT > 2 )); then
        END=$(( CURRENT - 1 ))
        cmd=$words[$END]
        case $cmd in
            --server)
                liste_serveurs=($(cranspasswords --list-servers 2> /dev/null | tail -n +2 | awk '{print $2}' | tr '\n' ' '))
                for i in $liste_serveurs; do
                    _wanted server expl "server names" compadd $i;
                done;
            ;;
            --view | --edit)
                pos=$words[(i)--server]
                posa=$(( pos + 1))

                if (( posa < $#words )); then
                    fname="cpw_$words[$posa]_files"
                    server=$words[$posa]
                else
                    fname="cpw_default_files"
                    server="default"
                fi;

                result=$(find /tmp -mmin -1 -name $fname 2> /dev/null | wc -l)
                if (( result < 1 )); then
                    liste_fichiers=($(cranspasswords --server $server --list 2>/dev/null | tail -n +2 | head -n -1 | awk '{print $2}' | tr '\n' ' '))
                    echo $liste_fichiers > /tmp/$fname
                    for i in $liste_fichiers; do
                        _wanted files expl "file names" compadd $i;
                    done;
                else
                    liste_fichiers=($(cat /tmp/$fname))
                    for i in $liste_fichiers; do
                        _wanted files expl "file names" compadd $i;
                    done;
                fi;
            ;;
            --roles)
                pos=$words[(i)--server]
                posa=$(( pos + 1))

                if (( posa < $#words )); then
                    fname="cpw_$words[$posa]_roles"
                    server=$words[$posa]
                else
                    fname="cpw_default_roles"
                    server="default"
                fi;

                result=$(find /tmp -mmin -1 -name $fname 2> /dev/null | wc -l)
                if (( result < 1 )); then
                    liste_fichiers=($(cranspasswords --server $server --list-roles 2>/dev/null | tail -n +2 | awk '{print $2}' | tr '\n' ' '))
                    echo $liste_fichiers > /tmp/$fname
                    for i in $liste_fichiers; do
                        _wanted roles expl "role names" compadd $i;
                    done;
                else
                    liste_fichiers=($(cat /tmp/$fname))
                    for i in $liste_fichiers; do
                        _wanted roles expl "role names" compadd $i;
                    done;
                fi;
            ;;
            *)
                _cranspasswords_args $@
            ;;
        esac
    else
        _cranspasswords_args $@
    fi
}

_cranspasswords_args(){
    _arguments -s : \
        "(-h --help)"{-h,--help}"[Obtenir de l'aide]" \
        "(-v --verbose)"{-v,--verbose}"[Mode verbeux]"\
        "(-f --force)"{-f,--force}"[Force]" \
        "--server[Le serveur auquel se connecter]:server:" \
        - list1 \
            "--list-roles[Lister les rôles des gens]" \
        - list2 \
            "--list-servers[Lister les serveurs]" \
        - list3 \
            "(-l --list)"{-l,--list}"[Lister les fichiers présents sur le serveur]" \
        - recrypt \
            "--recrypt-role[Met à jour les rôles (rechiffre les fichiers)]" \
        - edit \
            "--edit[Créer ou modifier un fichier]:fichier:" \
            "--roles[Liste les rôles]:roles:" \
        - update \
            "--check-keys[Vérifier les clefs]" \
            "--update-keys[Mettre à jour les clefs]" \
        - remove \
            "--remove[Pour supprimer un fichier]" \
        - view \
            "--view[Pour lire un fichier]:fichier:" \
            "(-c --clipboard)"{-c,--clipboard}"[Utilisation du presse-papier]" \
            "--noclipboard[Ne pas utiliser le presse-papier]"
}

_cranspasswords "$@"