# If pdbrc.py is missing, you get an error message (which doesn't hurt).
import os
+import sys
+
x = execfile(os.path.expanduser("~/lib/python/pdbrc.py"))
+
+# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/498182
+# replace the Pdb class's complete method with ours
+sys._getframe(1).f_globals['Pdb'].complete = complete
+# set use_rawinput to 1 as tab completion relies on rawinput being used
+sys._getframe(1).f_locals['self'].use_rawinput = 1
init()
-# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/498182
# https://github.com/giampaolo/sysconf/blob/master/home/.pdbrc.py
import pdb
import rlcompleter
-pdb.Pdb.complete = rlcompleter.Completer(locals()).complete
+#pdb.Pdb.complete = rlcompleter.Completer(locals()).complete
+
+# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/498182
+def complete(self, text, state, rlcompleter=rlcompleter):
+ """return the next possible completion for text, using the current frame's
+ local namespace
+
+ This is called successively with state == 0, 1, 2, ... until it
+ returns None. The completion should begin with 'text'.
+ """
+ # keep a completer class, and make sure that it uses the current local scope
+ if not hasattr(self, 'completer'):
+ self.completer = rlcompleter.Completer(self.curframe.f_locals)
+ else:
+ self.completer.namespace = self.curframe.f_locals
+ return self.completer.complete(text, state)
# Cleanup any variables that could otherwise clutter up the namespace.
-del pdb, readline, rlcompleter
+del pdb, rlcompleter