_cranspasswords 3.63 KB
Newer Older
1 2 3 4 5 6 7 8 9
#compdef cranspasswords

_cranspasswords(){
    local cmd
    if (( CURRENT > 2 )); then
        END=$(( CURRENT - 1 ))
        cmd=$words[$END]
        case $cmd in
            --server)
10
                _cranspasswords_servers
11 12
            ;;
            --view | --edit)
13
                _cranspasswords_files
14 15
            ;;
            --roles)
16
                _cranspasswords_roles
17 18
            ;;
            *)
19
                _cranspasswords_args
20 21 22
            ;;
        esac
    else
23 24 25 26 27
        if [[ $words[2] == '-' ]]; then
            _cranspasswords_args
        else
           _cranspasswords_files
        fi;
28 29 30
    fi
}

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
_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
48
            _wanted files expl "file names on ${server}" compadd $i;
49 50 51 52
        done;
    else
        liste_fichiers=($(cat /tmp/$fname))
        for i in $liste_fichiers; do
53
            _wanted files expl "file names on ${server}" compadd $i;
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
        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
75
            _wanted roles expl "role names on ${server}" compadd $i;
76 77 78 79
        done;
    else
        liste_fichiers=($(cat /tmp/$fname))
        for i in $liste_fichiers; do
80
            _wanted roles expl "role names on ${server}" compadd $i;
81 82 83 84 85 86 87 88 89 90 91
        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;
}

92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
_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 "$@"