diff --git a/IPython/core/inputsplitter.py b/IPython/core/inputsplitter.py index 417b436..cfba71a 100644 --- a/IPython/core/inputsplitter.py +++ b/IPython/core/inputsplitter.py @@ -504,19 +504,22 @@ class IPythonInputSplitter(InputSplitter): # List with lines of raw input accumulated so far. _buffer_raw = None - def __init__(self, input_mode=None): + def __init__(self, input_mode=None, transforms=None): super(IPythonInputSplitter, self).__init__(input_mode) self._buffer_raw = [] self._validate = True - self.transforms = [leading_indent(), - classic_prompt(), - ipy_prompt(), - cellmagic(), - help_end(), - escaped_transformer(), - assign_from_magic(), - assign_from_system(), - ] + if transforms is not None: + self.transforms = transforms + else: + self.transforms = [leading_indent(), + classic_prompt(), + ipy_prompt(), + cellmagic(), + help_end(), + escaped_transformer(), + assign_from_magic(), + assign_from_system(), + ] def reset(self): """Reset the input buffer and associated state.""" diff --git a/IPython/frontend/qt/console/frontend_widget.py b/IPython/frontend/qt/console/frontend_widget.py index b1476c5..2d8e65f 100644 --- a/IPython/frontend/qt/console/frontend_widget.py +++ b/IPython/frontend/qt/console/frontend_widget.py @@ -12,7 +12,8 @@ from IPython.external import qt from IPython.external.qt import QtCore, QtGui # Local imports -from IPython.core.inputsplitter import InputSplitter, transform_classic_prompt +from IPython.core.inputsplitter import InputSplitter, IPythonInputSplitter +from IPython.core.inputtransformer import classic_prompt from IPython.core.oinspect import call_tip from IPython.frontend.qt.base_frontend_mixin import BaseFrontendMixin from IPython.utils.traitlets import Bool, Instance, Unicode @@ -113,7 +114,7 @@ class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin): exit_requested = QtCore.Signal(object) # Protected class variables. - _transform_prompt = staticmethod(transform_classic_prompt) + _prompt_transformer = IPythonInputSplitter(transforms=[classic_prompt()]) _CallTipRequest = namedtuple('_CallTipRequest', ['id', 'pos']) _CompletionRequest = namedtuple('_CompletionRequest', ['id', 'pos']) _ExecutionRequest = namedtuple('_ExecutionRequest', ['id', 'kind']) @@ -186,8 +187,7 @@ class FrontendWidget(HistoryConsoleWidget, BaseFrontendMixin): elif self._control.hasFocus(): text = self._control.textCursor().selection().toPlainText() if text: - lines = map(self._transform_prompt, text.splitlines()) - text = '\n'.join(lines) + text = self._prompt_transformer.transform_cell(text) QtGui.QApplication.clipboard().setText(text) else: self.log.debug("frontend widget : unknown copy target") diff --git a/IPython/frontend/qt/console/ipython_widget.py b/IPython/frontend/qt/console/ipython_widget.py index 06ceef7..cdc83bb 100644 --- a/IPython/frontend/qt/console/ipython_widget.py +++ b/IPython/frontend/qt/console/ipython_widget.py @@ -19,8 +19,8 @@ from textwrap import dedent from IPython.external.qt import QtCore, QtGui # Local imports -from IPython.core.inputsplitter import IPythonInputSplitter, \ - transform_ipy_prompt +from IPython.core.inputsplitter import IPythonInputSplitter +from IPython.core.inputtransformer import ipy_prompt from IPython.utils.traitlets import Bool, Unicode from frontend_widget import FrontendWidget import styles @@ -98,7 +98,7 @@ class IPythonWidget(FrontendWidget): # FrontendWidget protected class variables. _input_splitter_class = IPythonInputSplitter - _transform_prompt = staticmethod(transform_ipy_prompt) + _prompt_transformer = IPythonInputSplitter(transforms=[ipy_prompt()]) # IPythonWidget protected class variables. _PromptBlock = namedtuple('_PromptBlock', ['block', 'length', 'number'])