Show More
@@ -131,6 +131,23 class SeparateStr(Str): | |||
|
131 | 131 | class MultipleInstanceError(Exception): |
|
132 | 132 | pass |
|
133 | 133 | |
|
134 | class ReadlineNoRecord(object): | |
|
135 | """Context manager to execute some code, then reload readline history | |
|
136 | so that interactive input to the code doesn't appear when pressing up.""" | |
|
137 | def __init__(self, shell): | |
|
138 | self.shell = shell | |
|
139 | self._nested_level = 0 | |
|
140 | ||
|
141 | def __enter__(self): | |
|
142 | self._nested_level += 1 | |
|
143 | ||
|
144 | def __exit__(self, type, value, traceback): | |
|
145 | self._nested_level -= 1 | |
|
146 | if self._nested_level == 0: | |
|
147 | self.shell.refill_readline_hist() | |
|
148 | # Returning False will cause exceptions to propagate | |
|
149 | return False | |
|
150 | ||
|
134 | 151 | |
|
135 | 152 | #----------------------------------------------------------------------------- |
|
136 | 153 | # Main IPython class |
@@ -737,6 +754,8 class InteractiveShell(Configurable, Magic): | |||
|
737 | 754 | else: |
|
738 | 755 | # fallback to our internal debugger |
|
739 | 756 | pm = lambda : self.InteractiveTB.debugger(force=True) |
|
757 | ||
|
758 | with self.readline_no_record: | |
|
740 | 759 | pm() |
|
741 | 760 | |
|
742 | 761 | #------------------------------------------------------------------------- |
@@ -1530,17 +1549,21 class InteractiveShell(Configurable, Magic): | |||
|
1530 | 1549 | # otherwise we end up with a monster history after a while: |
|
1531 | 1550 | readline.set_history_length(self.history_length) |
|
1532 | 1551 | |
|
1533 | stdin_encoding = sys.stdin.encoding or "utf-8" | |
|
1552 | self.refill_readline_hist() | |
|
1553 | self.readline_no_record = ReadlineNoRecord(self) | |
|
1534 | 1554 | |
|
1555 | # Configure auto-indent for all platforms | |
|
1556 | self.set_autoindent(self.autoindent) | |
|
1557 | ||
|
1558 | def refill_readline_hist(self): | |
|
1535 | 1559 |
|
|
1560 | self.readline.clear_history() | |
|
1561 | stdin_encoding = sys.stdin.encoding or "utf-8" | |
|
1536 | 1562 |
|
|
1537 | 1563 | include_latest=True): |
|
1538 | 1564 |
|
|
1539 | 1565 |
|
|
1540 |
|
|
|
1541 | ||
|
1542 | # Configure auto-indent for all platforms | |
|
1543 | self.set_autoindent(self.autoindent) | |
|
1566 | self.readline.add_history(line.encode(stdin_encoding)) | |
|
1544 | 1567 | |
|
1545 | 1568 | def set_next_input(self, s): |
|
1546 | 1569 | """ Sets the 'default' input string for the next command line. |
@@ -1600,8 +1600,9 Currently the magic system has the following functions:\n""" | |||
|
1600 | 1600 | # every single object ever created. |
|
1601 | 1601 | sys.modules[main_mod_name] = main_mod |
|
1602 | 1602 | |
|
1603 | stats = None | |
|
1604 | 1603 | try: |
|
1604 | stats = None | |
|
1605 | with self.readline_no_record: | |
|
1605 | 1606 | if opts.has_key('p'): |
|
1606 | 1607 | stats = self.magic_prun('',0,opts,arg_lst,prog_ns) |
|
1607 | 1608 | else: |
General Comments 0
You need to be logged in to leave comments.
Login now