diff --git a/_cranspasswords b/_cranspasswords new file mode 100644 index 0000000..6bc9045 --- /dev/null +++ b/_cranspasswords @@ -0,0 +1,104 @@ +#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 "$@"