_cranspasswords 3.68 KB
Newer Older
1
#compdef cranspasswords
2
# Fichier de zsh complétion pour cranspasswords
3 4 5 6 7 8 9 10

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

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

93 94 95 96 97 98 99 100 101 102 103 104 105
_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 \
106
            "--recrypt-files[Met à jour les rôles (rechiffre les fichiers)]" \
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
        - 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 "$@"