##// END OF EJS Templates
-m IPython.terminal.debugger...
mbyt -
Show More
@@ -1,77 +1,82 b''
1 from IPython.core.debugger import Pdb
1 from IPython.core.debugger import Pdb
2
2
3 from IPython.core.completer import IPCompleter
3 from IPython.core.completer import IPCompleter
4 from .ptutils import IPythonPTCompleter
4 from .ptutils import IPythonPTCompleter
5
5
6 from prompt_toolkit.token import Token
6 from prompt_toolkit.token import Token
7 from prompt_toolkit.shortcuts import create_prompt_application
7 from prompt_toolkit.shortcuts import create_prompt_application
8 from prompt_toolkit.interface import CommandLineInterface
8 from prompt_toolkit.interface import CommandLineInterface
9 from prompt_toolkit.enums import EditingMode
9 from prompt_toolkit.enums import EditingMode
10
10
11 class TerminalPdb(Pdb):
11 class TerminalPdb(Pdb):
12 def __init__(self, *args, **kwargs):
12 def __init__(self, *args, **kwargs):
13 Pdb.__init__(self, *args, **kwargs)
13 Pdb.__init__(self, *args, **kwargs)
14 self._ptcomp = None
14 self._ptcomp = None
15 self.pt_init()
15 self.pt_init()
16
16
17 def pt_init(self):
17 def pt_init(self):
18 def get_prompt_tokens(cli):
18 def get_prompt_tokens(cli):
19 return [(Token.Prompt, self.prompt)]
19 return [(Token.Prompt, self.prompt)]
20
20
21 if self._ptcomp is None:
21 if self._ptcomp is None:
22 compl = IPCompleter(shell=self.shell,
22 compl = IPCompleter(shell=self.shell,
23 namespace={},
23 namespace={},
24 global_namespace={},
24 global_namespace={},
25 use_readline=False,
25 use_readline=False,
26 parent=self.shell,
26 parent=self.shell,
27 )
27 )
28 self._ptcomp = IPythonPTCompleter(compl)
28 self._ptcomp = IPythonPTCompleter(compl)
29
29
30 self._pt_app = create_prompt_application(
30 self._pt_app = create_prompt_application(
31 editing_mode=getattr(EditingMode, self.shell.editing_mode.upper()),
31 editing_mode=getattr(EditingMode, self.shell.editing_mode.upper()),
32 history=self.shell.debugger_history,
32 history=self.shell.debugger_history,
33 completer= self._ptcomp,
33 completer= self._ptcomp,
34 enable_history_search=True,
34 enable_history_search=True,
35 mouse_support=self.shell.mouse_support,
35 mouse_support=self.shell.mouse_support,
36 get_prompt_tokens=get_prompt_tokens
36 get_prompt_tokens=get_prompt_tokens
37 )
37 )
38 self.pt_cli = CommandLineInterface(self._pt_app, eventloop=self.shell._eventloop)
38 self.pt_cli = CommandLineInterface(self._pt_app, eventloop=self.shell._eventloop)
39
39
40 def cmdloop(self, intro=None):
40 def cmdloop(self, intro=None):
41 """Repeatedly issue a prompt, accept input, parse an initial prefix
41 """Repeatedly issue a prompt, accept input, parse an initial prefix
42 off the received input, and dispatch to action methods, passing them
42 off the received input, and dispatch to action methods, passing them
43 the remainder of the line as argument.
43 the remainder of the line as argument.
44
44
45 override the same methods from cmd.Cmd to provide prompt toolkit replacement.
45 override the same methods from cmd.Cmd to provide prompt toolkit replacement.
46 """
46 """
47 if not self.use_rawinput:
47 if not self.use_rawinput:
48 raise ValueError('Sorry ipdb does not support use_rawinput=False')
48 raise ValueError('Sorry ipdb does not support use_rawinput=False')
49
49
50 self.preloop()
50 self.preloop()
51
51
52 try:
52 try:
53 if intro is not None:
53 if intro is not None:
54 self.intro = intro
54 self.intro = intro
55 if self.intro:
55 if self.intro:
56 self.stdout.write(str(self.intro)+"\n")
56 self.stdout.write(str(self.intro)+"\n")
57 stop = None
57 stop = None
58 while not stop:
58 while not stop:
59 if self.cmdqueue:
59 if self.cmdqueue:
60 line = self.cmdqueue.pop(0)
60 line = self.cmdqueue.pop(0)
61 else:
61 else:
62 self._ptcomp.ipy_completer.namespace = self.curframe_locals
62 self._ptcomp.ipy_completer.namespace = self.curframe_locals
63 self._ptcomp.ipy_completer.global_namespace = self.curframe.f_globals
63 self._ptcomp.ipy_completer.global_namespace = self.curframe.f_globals
64 try:
64 try:
65 line = self.pt_cli.run(reset_current_buffer=True).text
65 line = self.pt_cli.run(reset_current_buffer=True).text
66 except EOFError:
66 except EOFError:
67 line = 'EOF'
67 line = 'EOF'
68 line = self.precmd(line)
68 line = self.precmd(line)
69 stop = self.onecmd(line)
69 stop = self.onecmd(line)
70 stop = self.postcmd(stop, line)
70 stop = self.postcmd(stop, line)
71 self.postloop()
71 self.postloop()
72 except Exception:
72 except Exception:
73 raise
73 raise
74
74
75 def set_trace():
75 def set_trace():
76 TerminalPdb().set_trace()
76 TerminalPdb().set_trace()
77
77
78
79 if __name__ == '__main__':
80 import pdb
81 pdb.Pdb = TerminalPdb
82 pdb.main()
General Comments 0
You need to be logged in to leave comments. Login now