Index: src/AEConstants/Profile.py
===================================================================
--- src/AEConstants/Profile.py	(revision 892)
+++ src/AEConstants/Profile.py	(working copy)
@@ -79,6 +79,7 @@
            'RawEventMonitor',
            'TaskMonitor', 
            'IOMonitor',
+           'IPythonPerk',
            'SearchPerk',
            'GKeybindingPerk',
            'GCalcPerk',
Index: src/Perks/lsr/DeveloperPerk.py
===================================================================
--- src/Perks/lsr/DeveloperPerk.py	(revision 892)
+++ src/Perks/lsr/DeveloperPerk.py	(working copy)
@@ -59,6 +59,9 @@
                            pair+[kbd.AEK_K])
       self.registerCommand(kbd, 'developer toggle monitors', False, 
                            pair+[kbd.AEK_L])
+      # ipython console perk
+      self.registerCommand(kbd, 'show ipython chooser', False, 
+                           pair+[kbd.AEK_BACK_SLASH])
       
   def getName(self):
     return _('Developer tools')
Index: src/Perks/lsr/Makefile.am
===================================================================
--- src/Perks/lsr/Makefile.am	(revision 892)
+++ src/Perks/lsr/Makefile.am	(working copy)
@@ -8,5 +8,6 @@
 	DeveloperPerk.py \
 	LanguagePerk.py \
 	ReviewPerk.py \
-        SearchPerk.py
+        SearchPerk.py \
+	IPythonPerk.py
 lsrdir = $(pkgpythondir)/Perks/lsr
Index: src/Perks/lsr/DefaultDialogPerk.py
===================================================================
--- src/Perks/lsr/DefaultDialogPerk.py	(revision 892)
+++ src/Perks/lsr/DefaultDialogPerk.py	(working copy)
@@ -369,3 +369,4 @@
       i = loaded.index(perk)
       # insert it into the perk stack
       self.insertPerk(i, perk)
+      
Index: src/Choosers/Makefile.am
===================================================================
--- src/Choosers/Makefile.am	(revision 892)
+++ src/Choosers/Makefile.am	(working copy)
@@ -6,5 +6,8 @@
 	perk_chooser.glade \
 	lsr_settings.glade \
 	uie_widget.glade \
-	search_chooser.glade
+	search_chooser.glade \
+        ipython_view.py \
+        IPythonChooser.py \
+        ipython_chooser.glade
 lsrdir = $(pkgpythondir)/Choosers
Index: src/AELog.py
===================================================================
--- src/AELog.py	(revision 892)
+++ src/AELog.py	(working copy)
@@ -84,6 +84,7 @@
     '''
     self.log = logging.getLogger('print')
     self.chunks = []
+    self.flush = None
     
   def write(self, data):
     '''
Index: src/Task/Tools/System.py
===================================================================
--- src/Task/Tools/System.py	(revision 892)
+++ src/Task/Tools/System.py	(working copy)
@@ -861,7 +861,7 @@
     except ValueError, ex:
       # singleton already exists, reactivate
       ex.args[0].activate(**kwargs)
-      return None
+      return chooser
     else:
       # call init to let the chooser initialize itself
       chooser.init(**kwargs)
