From b484822cebace61440f1dab24c9dc3c409d5a65c Mon Sep 17 00:00:00 2001 From: Quentin Peter Date: Tue, 13 Aug 2019 12:27:35 +0100 Subject: [PATCH] Add history file to pdb history --- .../plugins/ipythonconsole/widgets/control.py | 20 +++++++++++++++++-- .../ipythonconsole/widgets/debugging.py | 8 +++++--- spyder/widgets/mixins.py | 1 + 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/spyder/plugins/ipythonconsole/widgets/control.py b/spyder/plugins/ipythonconsole/widgets/control.py index f29ec91838b..19275350df5 100644 --- a/spyder/plugins/ipythonconsole/widgets/control.py +++ b/spyder/plugins/ipythonconsole/widgets/control.py @@ -5,19 +5,23 @@ # (see spyder/__init__.py for details) """Control widgets used by ShellWidget""" +import os +import time from qtpy.QtCore import Qt, Signal from qtpy.QtWidgets import QTextEdit +from spyder.config.base import get_conf_path from spyder.utils.qthelpers import restore_keyevent from spyder.widgets.calltip import CallTipWidget from spyder.widgets.mixins import (BaseEditMixin, GetHelpMixin, TracebackLinksMixin, - BrowseHistoryMixin) + BrowseHistoryMixin, + SaveHistoryMixin) class ControlWidget(TracebackLinksMixin, GetHelpMixin, BrowseHistoryMixin, - QTextEdit, BaseEditMixin): + QTextEdit, BaseEditMixin, SaveHistoryMixin): """ Subclass of QTextEdit with features from Spyder's mixins to use as the control widget for IPython widgets @@ -26,6 +30,10 @@ class ControlWidget(TracebackLinksMixin, GetHelpMixin, BrowseHistoryMixin, visibility_changed = Signal(bool) go_to_error = Signal(str) focus_changed = Signal() + SEPARATOR = '{0}## ---({1})---'.format(os.linesep*2, time.ctime()) + INITHISTORY = ['# -*- coding: utf-8 -*-', + '# *** Spyder Python Console History Log ***',] + PDB_HIST_MAX = 400 def __init__(self, parent=None): QTextEdit.__init__(self, parent) @@ -33,6 +41,14 @@ def __init__(self, parent=None): TracebackLinksMixin.__init__(self) GetHelpMixin.__init__(self) BrowseHistoryMixin.__init__(self) + history_filename = get_conf_path('pdb_history.py') + SaveHistoryMixin.__init__( + self, history_filename=history_filename) + with open(history_filename) as f: + self.history = f.readlines() + # Remove old history + with open(history_filename, 'w') as f: + f.writelines(self.history[:self.PDB_HIST_MAX]) self.calltip_widget = CallTipWidget(self, hide_timer_on=False) self.found_results = [] diff --git a/spyder/plugins/ipythonconsole/widgets/debugging.py b/spyder/plugins/ipythonconsole/widgets/debugging.py index de81af753de..b166fa2ca44 100644 --- a/spyder/plugins/ipythonconsole/widgets/debugging.py +++ b/spyder/plugins/ipythonconsole/widgets/debugging.py @@ -117,10 +117,12 @@ def callback(line): # Save history to browse it later if not (len(self._control.history) > 0 and self._control.history[-1] == line): - # do not save pdb commands + # do not save pdb commands unless they have arguments cmd = line.split(" ")[0] - if cmd and "do_" + cmd not in dir(pdb.Pdb): - self._control.history.append(line) + args = line.split(" ")[1:] + is_pdb_cmd = "do_" + cmd in dir(pdb.Pdb) + if cmd and (not is_pdb_cmd or len(args) > 0): + self._control.add_to_history(line) # must match ConsoleWidget.do_execute self._executing = True diff --git a/spyder/widgets/mixins.py b/spyder/widgets/mixins.py index 6fed178cc58..a89d6f6320a 100644 --- a/spyder/widgets/mixins.py +++ b/spyder/widgets/mixins.py @@ -1356,6 +1356,7 @@ def browse_history(self, backward): tocursor = self.get_current_line_to_cursor() text, self.histidx = self.find_in_history(tocursor, self.histidx, backward) + text = text.strip() if text is not None: if self.hist_wholeline: self.clear_line()