X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=lib%2Fpython%2Fpdbrc.py;h=b4a9afb13ef820dca76b59d371404d5f71ccea74;hb=2980425cd19b2c30a252b91c324c16a753280a5e;hp=0e67e51600fa4938211700f7adac173afc1e3a1a;hpb=f46bd4d41cc7f243bc8a321effee5200aa69e709;p=dotfiles.git diff --git a/lib/python/pdbrc.py b/lib/python/pdbrc.py index 0e67e51..b4a9afb 100644 --- a/lib/python/pdbrc.py +++ b/lib/python/pdbrc.py @@ -1,42 +1,77 @@ -# Command line history: -import os, readline -histfile = os.path.expanduser("~/.pdb-history") - -try: - readline.read_history_file(histfile) -except IOError: - pass - -def savehist(histfile=histfile): - import os, 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) - -import atexit -atexit.register(savehist) - -# return to debugger after fatal exception (Python cookbook 14.5): -import sys -def info(type, value, tb): - if hasattr(sys, 'ps1') or not sys.stderr.isatty(): - sys.__excepthook__(type, value, tb) - import traceback, pdb - traceback.print_exception(type, value, tb) - print - pdb.pm() -sys.excepthook = info +# 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 -import pdb, rlcompleter -pdb.Pdb.complete = rlcompleter.Completer().complete +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 atexit, info, os, pdb, readline, rlcompleter, savehist, sys +del pdb, rlcompleter