From 86f3a06e9d0c9c5cf95cce591066af13a147c5aa Mon Sep 17 00:00:00 2001
From: Vincent Le Gallic <legallic@crans.org>
Date: Sat, 27 Jul 2013 18:37:26 +0200
Subject: [PATCH] =?UTF-8?q?On=20d=C3=A9shardcode=20"cranspasswords"=20de?=
 =?UTF-8?q?=20la=20bash=5Fcompletion.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Attention : on perd la backward compatibility sur la bash_completion.
 * En effet, non seulement le fichier a été renommé
 * mais en plus, il ne load plus la fonction de complétion, c'est à la charg
   de l'utilisateur, comme ça il peut choisir le nom de sa fonction,
   et pas forcément "cranspasswords"
---
 README                                        |  8 ++-
 ...sswords_bash_completion => bash_completion | 52 ++++++++++---------
 2 files changed, 34 insertions(+), 26 deletions(-)
 rename cranspasswords_bash_completion => bash_completion (69%)

diff --git a/README b/README
index 83c6f5e..e9e1111 100644
--- a/README
+++ b/README
@@ -3,11 +3,15 @@ Ce dépôt git contient à la fois le programme client (à utiliser sur votre
 ordinateur) et le serveur.
 
 == Installation et configuration du client ==
- * Copier le dépôt git sur votre ordinateur :
+ * Copier le dépôt git sur votre machine :
     $ git clone git://git.crans.org/git/cranspasswords.git 
  * Copier clientconfig.example.py en clientconfig.py et adapter
    à vos besoins
  * Installer le package python-gnupg
  * Si ce n'est déjà fait, indiquer votre clé publique sur gest_crans
  * ???
- 
+
+== Complétion ==
+ * Pour avoir la bash-complétion, dans votre .bashrc :
+  * Sourcez le fichier bash_completion présent dans le dépôt
+  * exécutez "complete -F _cranspasswords_completion <nom de votre commande>"
diff --git a/cranspasswords_bash_completion b/bash_completion
similarity index 69%
rename from cranspasswords_bash_completion
rename to bash_completion
index d0712ac..90c0b7a 100644
--- a/cranspasswords_bash_completion
+++ b/bash_completion
@@ -1,19 +1,21 @@
 # Fonction de notre auto completion
 
-_cranspasswords(){
+_cranspasswords_completion(){
   # declaration des variables locales
-  local argc first last prev cur cur_first_char opts_short opts role_dir pass_dir server server_list role_list pass_list timeout
-
-  role_dir="/tmp/cranspasswords-$USER-role/"
-  pass_dir="/tmp/cranspasswords-$USER-passwords/"
+  local argc first last prev cur cur_first_char opts_short opts role_dir pass_dir server server_list role_list pass_list timeout cmd_name
+  
+  # La commande ne s'appelle pas forcément cranspasswords
+  cmd_name=$1
+  role_dir="/tmp/$cmd_name-$USER-role/"
+  pass_dir="/tmp/$cmd_name-$USER-passwords/"
   # Combien de temps on garde les réponses du serveur en cache (en minutes)
   timeout=5
-
+  
   #COMPREPLY désigne la réponse à renvoyer pour la complétion actuelle
   COMPREPLY=()
   # argc : vaut le nombre d'argument actuel sur la ligne de commande
   argc=${COMP_CWORD};
-
+  
   # cur  : désigne la chaine de caractère actuelle pour le dernier mot de la ligne de commande
   first="${COMP_WORDS[1]}"
   last="${COMP_WORDS[$(($argc - 1 ))]}"
@@ -22,25 +24,25 @@ _cranspasswords(){
   cur_first_char=${cur:0:1}
   opts_short="-h -v -c -f -l"
   opts="--help --server --verbose --clipboard --noclipboard --force --edit --view --remove --list --check-keys --update-keys --list-roles --recrypt-roles --roles --list-servers"
-
-
+  
+  
   mkdir -p -m 700  "$role_dir"
   mkdir -p -m 700 "$pass_dir"
   
   find "$role_dir" -type f -mmin +$timeout -exec rm -f {} \;
   find "$pass_dir" -type f -mmin +$timeout -exec rm -f {} \;
-
+  
   # On détermine si on utilsie un serveur alternatif
   if [[ "${COMP_WORDS[*]}" = *" --server "* ]]; then
     if [[ "$prev" = "--server" ]]; then
-      _cranspasswords_server=$last;
+      _memorize_server=$last;
     fi
   else
-    _cranspasswords_server="default";
+    _memorize_server="default";
   fi
-
-server=$_cranspasswords_server
-
+  
+  server=$_memorize_server
+  
   # les options possibles pour notre auto-complétion
   if [[ $cur_first_char = "-" ]]; then
     COMPREPLY=( $(compgen -W "$opts" -- $cur ) )
@@ -48,39 +50,41 @@ server=$_cranspasswords_server
   fi
   
   if [[ "$last" = "--server" ]]; then
-    server_list="`cranspasswords --list-servers | grep -- "*" | awk '{print $2}'`"
+    server_list="`$cmd_name --list-servers | grep -- "*" | awk '{print $2}'`"
     COMPREPLY=( $(compgen -W "$server_list" -- $cur ) )
     return 0
   fi
   
   if [[ "$last" = "--roles" ]]; then 
     if  [ ! -f "${role_dir}$server" ]; then
-      echo "`cranspasswords --server $server --list-roles | grep -- "*" | awk '{print $2}'`" > "${role_dir}$server"
+      echo "`$cmd_name --server $server --list-roles | grep -- "*" | awk '{print $2}'`" > "${role_dir}$server"
     fi
     role_list="`cat "${role_dir}$server"`"
     COMPREPLY=( $(compgen -W "$role_list" -- $cur ) )
     return 0
   fi
   
- if [[ "$last" = "--edit" ]]; then
+  if [[ "$last" = "--edit" ]]; then
     if  [ ! -f "${pass_dir}${server}-w" ]; then
-      echo "`cranspasswords --server $server -l | grep "+" | awk '{print $2}'`" > "${pass_dir}${server}-w"
+      echo "`$cmd_name --server $server -l | grep "+" | awk '{print $2}'`" > "${pass_dir}${server}-w"
     fi
     pass_list="`cat "${pass_dir}${server}-w"`"
     COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) )
     return 0
   fi
-
+  
   if true; then
     if  [ ! -f "${pass_dir}$server" ]; then
-      echo "`cranspasswords --server $server -l | grep "\( +\| -\)" | awk '{print $2}'`" > "${pass_dir}$server"
+      echo "`$cmd_name --server $server -l | grep "\( +\| -\)" | awk '{print $2}'`" > "${pass_dir}$server"
     fi
     pass_list="`cat "${pass_dir}$server"`"
     COMPREPLY=( $(compgen -W "$pass_list" -- $cur ) )
     return 0
   fi
-
 }
 
-# On active l'auto-completion
-complete -F _cranspasswords cranspasswords
+# On n'active pas l'auto-completion parce qu'on ne connait pas le nom
+# de la commande.
+# Pensez à exécuter
+# complete -F _cranspasswords_completion <nom de votre commande>
+# pour avoir la complétion
-- 
GitLab