Index: /pykota/trunk/bin/edpykota
===================================================================
--- /pykota/trunk/bin/edpykota (revision 2210)
+++ /pykota/trunk/bin/edpykota (revision 2216)
@@ -549,4 +549,6 @@
         else :
             retcode = editor.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/pykotme
===================================================================
--- /pykota/trunk/bin/pykotme (revision 2210)
+++ /pykota/trunk/bin/pykotme (revision 2216)
@@ -147,4 +147,6 @@
         else :
             retcode = sender.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/pkhint
===================================================================
--- /pykota/trunk/bin/pkhint (revision 2210)
+++ /pykota/trunk/bin/pkhint (revision 2216)
@@ -251,4 +251,6 @@
                 args = [ "*" ]
             retcode = manager.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/repykota
===================================================================
--- /pykota/trunk/bin/repykota (revision 2210)
+++ /pykota/trunk/bin/repykota (revision 2216)
@@ -158,4 +158,6 @@
         else :
             retcode = reportTool.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/warnpykota
===================================================================
--- /pykota/trunk/bin/warnpykota (revision 2210)
+++ /pykota/trunk/bin/warnpykota (revision 2216)
@@ -173,4 +173,6 @@
         else :
             retcode = sender.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/pkbanner
===================================================================
--- /pykota/trunk/bin/pkbanner (revision 2210)
+++ /pykota/trunk/bin/pkbanner (revision 2216)
@@ -325,4 +325,6 @@
         else :
             retcode = banner.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/autopykota
===================================================================
--- /pykota/trunk/bin/autopykota (revision 2210)
+++ /pykota/trunk/bin/autopykota (revision 2216)
@@ -126,4 +126,6 @@
         else :
             retcode = automat.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/pkprinters
===================================================================
--- /pykota/trunk/bin/pkprinters (revision 2210)
+++ /pykota/trunk/bin/pkprinters (revision 2216)
@@ -237,4 +237,6 @@
         else :
             retcode = manager.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/pykosd
===================================================================
--- /pykota/trunk/bin/pykosd (revision 2210)
+++ /pykota/trunk/bin/pykosd (revision 2216)
@@ -189,4 +189,6 @@
     except KeyboardInterrupt :
         retcode = 0
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/pkmail
===================================================================
--- /pykota/trunk/bin/pkmail (revision 2210)
+++ /pykota/trunk/bin/pkmail (revision 2216)
@@ -173,4 +173,6 @@
         else :
             retcode = mailparser.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/bin/dumpykota
===================================================================
--- /pykota/trunk/bin/dumpykota (revision 2210)
+++ /pykota/trunk/bin/dumpykota (revision 2216)
@@ -158,4 +158,6 @@
         else :
             retcode = dumper.main(args, options)
+    except KeyboardInterrupt :        
+        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
     except SystemExit :        
         pass
Index: /pykota/trunk/NEWS
===================================================================
--- /pykota/trunk/NEWS (revision 2214)
+++ /pykota/trunk/NEWS (revision 2216)
@@ -24,4 +24,6 @@
     - 1.22alpha8 :
     
+        - Ctrl+C now makes PyKota commands exit without a traceback.
+        
         - Fixed an i18n problem with Python 2.1
         
Index: /pykota/trunk/TODO
===================================================================
--- /pykota/trunk/TODO (revision 2215)
+++ /pykota/trunk/TODO (revision 2216)
@@ -22,7 +22,4 @@
 TODO, in no particular order :
 
-        - Make Ctrl+C interrupts exit silently instead of exit
-          with a traceback.
-          
         - Pass-through mode for printers : history correctly filled (including
           job size) but no impact on user's page counter or account
