diff --git a/client.py b/client.py
index 1ae66d65d84659ca953c19613899084de35b87f8..250a60b0a1c38fdabf076299b94e28b38da79259 100755
--- a/client.py
+++ b/client.py
@@ -27,6 +27,7 @@ import copy
 import glob
 import ConfigParser
 import shlex
+import cmd
 
 # Import de la config
 def get_config_path():
@@ -934,6 +935,42 @@ def parse_roles(options, cast=False):
         ret.add(role)
     return list(ret)
 
+
+class CpasswordClient(cmd.Cmd, object):
+    
+    _cached_list = None
+
+    def __init__(self, options):
+        super(CpasswordClient, self).__init__()
+        self.options = options
+
+    def do_EOF(self, line):
+        return True
+
+    def do_view(self, line):
+        options.fname = line
+        show_file(self.options)
+
+    def _list(self):
+        if self._cached_list is not None:
+            return self._cached_list
+
+        self._cached_list = []
+        my_roles, _ = get_my_roles(self.options)
+        files = all_files(self.options)
+        keys = files.keys()
+        for fname in keys:
+            froles = files[fname]
+            access = set(my_roles).intersection(froles) != set([])
+            if access:
+                self._cached_list.append(fname)
+
+    def complete_view(self, text, line, begidx, endidx):
+        return [s for s in self._list() if s.startswith(text)]
+
+def interactive(options):
+    CpasswordClient(options).cmdloop()
+
 def insult_on_nofilename(options, parser):
     """Insulte (si non quiet) et quitte si aucun nom de fichier n'a été fourni en commandline."""
     if options.fname == None:
@@ -987,6 +1024,9 @@ if __name__ == "__main__":
     action_grp.add_argument('--list-servers', action='store_const', dest='action',
         default=show_file, const=show_servers,
         help="Lister les serveurs")
+    action_grp.add_argument('-i', '--interactive', action='store_const', dest='action',
+        default=show_file, const=interactive,
+        help="Mode interactif")
     action_grp.add_argument('--recrypt-files', action='store_const', dest='action',
         default=show_file, const=recrypt_files,
         help="""Rechiffrer les mots de passe.
@@ -1046,3 +1086,4 @@ if __name__ == "__main__":
     
     # On exécute l'action demandée
     options.action(options)
+