Skip to content
Snippets Groups Projects
_cranspasswords 3.68 KiB
Newer Older
# Fichier de zsh complétion pour cranspasswords

_cranspasswords(){
    local cmd
    if (( CURRENT > 2 )); then
        END=$(( CURRENT - 1 ))
        cmd=$words[$END]
        case $cmd in
            --server)
            _cranspasswords_args
        else
           _cranspasswords_files
        fi;
_cranspasswords_files(){
    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 on ${server}" compadd $i;
        done;
    else
        liste_fichiers=($(cat /tmp/$fname))
        for i in $liste_fichiers; do
            _wanted files expl "file names on ${server}" compadd $i;
        done;
    fi;
}

_cranspasswords_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 on ${server}" compadd $i;
        done;
    else
        liste_fichiers=($(cat /tmp/$fname))
        for i in $liste_fichiers; do
            _wanted roles expl "role names on ${server}" compadd $i;
        done;
    fi;
}

_cranspasswords_servers(){
    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;
}

_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-files[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 "$@"