#extends phd_site #implements respond #attr $Title = "pdbrc.py" #attr $Copyright = 2003 #attr $First = "init.py.html" #attr $Prev = "pdbrc.html" #attr $Last = "pdbrc.py.html" #attr $alternates = (("Plain text version", "text/plain", "pdbrc.py.txt"),) #def body_html #raw
# This is startup file for interactive python debugger.
#
# Text version here
#
# Generated by gvim :runtime syntax/2html.vim
#

# This is startup file for interactive python debugger pdb.
# Use it like this in ~/.pdbrc:
# import os
# x = execfile("pdbrc.py")
# See http://wiki.python.org/moin/PdbRcIdea

def init():
    import atexit
    import os
    import sys
    import readline

    # Command line history:
    histfile = os.path.expanduser("~/.pdb_history")

    try:
        readline.read_history_file(histfile)
    except IOError:
        pass


    def savehist(histfile=histfile):
        import os
        import readline

        histfilesize = os.environ.get('HISTFILESIZE') \
            or os.environ.get('HISTSIZE')
        if histfilesize:
            try:
                histfilesize = int(histfilesize)
            except ValueError:
                pass
            else:
                readline.set_history_length(histfilesize)
        readline.write_history_file(histfile)

    atexit.register(savehist)


    def info(type, value, tb):
        # return to debugger after fatal exception (Python cookbook 14.5):
        import pdb
        import sys
        import traceback

        if hasattr(sys, 'ps1') or not sys.stderr.isatty():
            sys.__excepthook__(type, value, tb)
        traceback.print_exception(type, value, tb)
        print
        pdb.pm()

    sys.excepthook = info

init()

# https://github.com/giampaolo/sysconf/blob/master/home/.pdbrc.py
import pdb
import rlcompleter
#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, rlcompleter
#end raw #end def $phd_site.respond(self)