Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

PromptManager fixes #1078

Closed
wants to merge 1 commit into from

3 participants

Min RK Fernando Perez Thomas Kluyver
Min RK
Owner
  • InteractiveShell.prompt_foo traits show deprecation warning, and map to new PromptManager traits
  • PromptManager properly added to IPython App, so it will show up in config
  • add helpstrings to PromptManager traits.
  • Docs / embed references to Shell.prompt_foo also updated

Should close #1075

Min RK minrk PromptManager fixes
* InteractiveShell.prompt_foo traits show deprecation warning, and map to new PromptManager traits
* PromptManager properly added to IPython App, so it will show up in config
* add helpstrings to PromptManager traits.
* Docs / embed references to Shell.prompt_foo also updated
38572c2
Fernando Perez
Owner

Code looks good, but before we close #1075, as Gokhan says, we're inserting weird space before the prompt with these other templates, I'm not sure why. I tried putting simply

c.PromptManager.in_template = r'>>> '
c.PromptManager.out_template = r''

but I get this output:

    >>> 3
        3

I haven't looked at the prompt display logic in ages, but there's something odd here...

Fernando Perez
Owner

Ah, never mind.. I see the issue with the justification. Thanks. But that makes me think something...

Fernando Perez
Owner

That this means the rewrite logic is a little flawed in @takluyver's rework, and I missed that. The rewrite prompt in the old code would be the one adjusting dynamically its length to that of the others, not the other way around. So users should be able to define prompts of any length they want, and the rewrite prompt will simply be '-------.... ---->' , as long as it needs to be to match the length of the prompt above it. I went to great lengths to make this work in the presence of ansi escapes.

It seems that now the rewrite prompt has a fixed length and the others ares simply justified to match it. That's definitely not the logic we want; it's ugly and it breaks the common case of people changing their prompts and getting that weird left-space.

I'm actually OK with the rewrite prompt not being a template at all, we're simply saying 'the line above got rewritten'. The rewrite prompt instead could be a simple boolean: if True, we rewrite with '---->' as long as it needs to be, if False we don't show any rewrite. There's no need for having a template there.

Sorry that I didn't realize this slipped in when reviewing #507; I was trying to flush so much code to get to the beta that I failed to see these issues. But we have time to fix them before release...

Thomas Kluyver takluyver commented on the diff
docs/source/interactive/shell.txt
@@ -155,8 +155,8 @@ Prompt customization
The sh profile uses the following prompt configurations::
- o.prompt_in1= r'\C_LightBlue[\C_LightCyan\Y2\C_LightBlue]\C_Green|\#>'
- o.prompt_in2= r'\C_Green|\C_LightGreen\D\C_Green>'
+ o.PromptManager.in_template= r'\C_LightBlue[\C_LightCyan\Y2\C_LightBlue]\C_Green|\#>'
Thomas Kluyver Owner

These colour specifications won't work. See my changes to the pysh config in 00cffc4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Thomas Kluyver takluyver referenced this pull request
Merged

Prompts #1083

Thomas Kluyver
Owner

Made PR #1083.

Min RK
Owner

superseded by #1083

Min RK minrk closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Dec 1, 2011
  1. Min RK

    PromptManager fixes

    minrk authored
    * InteractiveShell.prompt_foo traits show deprecation warning, and map to new PromptManager traits
    * PromptManager properly added to IPython App, so it will show up in config
    * add helpstrings to PromptManager traits.
    * Docs / embed references to Shell.prompt_foo also updated
This page is out of date. Refresh to see the latest.
35 IPython/core/interactiveshell.py
View
@@ -315,10 +315,37 @@ def _exiter_default(self):
help="Save multi-line entries as one entry in readline history"
)
- prompt_in1 = Unicode('In [\\#]: ', config=True)
- prompt_in2 = Unicode(' .\\D.: ', config=True)
- prompt_out = Unicode('Out[\\#]: ', config=True)
- prompts_pad_left = CBool(True, config=True)
+ # deprecated prompt traits:
+
+ prompt_in1 = Unicode('In [\\#]: ', config=True,
+ help="Deprecated, use PromptManager.in_template")
+ prompt_in2 = Unicode(' .\\D.: ', config=True,
+ help="Deprecated, use PromptManager.in2_template")
+ prompt_out = Unicode('Out[\\#]: ', config=True,
+ help="Deprecated, use PromptManager.out_template")
+ prompts_pad_left = CBool(True, config=True,
+ help="Deprecated, use PromptManager.justify")
+
+ def _prompt_trait_changed(self, name, old, new):
+ table = {
+ 'prompt_in1' : 'in_template',
+ 'prompt_in2' : 'in2_template',
+ 'prompt_out' : 'out_template',
+ 'prompts_pad_left' : 'justify',
+ }
+ warn("InteractiveShell.{name} is deprecated, use PromptManager.{newname}\n".format(
+ name=name, newname=table[name])
+ )
+ # protect against weird cases where self.config may not exist:
+ if self.config is not None:
+ # propagate to corresponding PromptManager trait
+ setattr(self.config.PromptManager, table[name], new)
+
+ _prompt_in1_changed = _prompt_trait_changed
+ _prompt_in2_changed = _prompt_trait_changed
+ _prompt_out_changed = _prompt_trait_changed
+ _prompt_pad_left_changed = _prompt_trait_changed
+
quiet = CBool(False, config=True)
history_length = Integer(10000, config=True)
12 IPython/core/prompts.py
View
@@ -254,10 +254,14 @@ def _color_scheme_changed(self, name, new_value):
""")
def _lazy_evaluate_fields_default(self): return lazily_evaluate.copy()
- in_template = Unicode('In [\\#]: ', config=True)
- in2_template = Unicode(' .\\D.: ', config=True)
- out_template = Unicode('Out[\\#]: ', config=True)
- rewrite_template = Unicode("------> ", config=True)
+ in_template = Unicode('In [\\#]: ', config=True,
+ help="Input prompt. '\\#' will be transformed to the prompt number")
+ in2_template = Unicode(' .\\D.: ', config=True,
+ help="Continuation prompt.")
+ out_template = Unicode('Out[\\#]: ', config=True,
+ help="Output prompt. '\\#' will be transformed to the prompt number")
+ rewrite_template = Unicode("------> ", config=True,
+ help="Rewrite prompt. When inputs are transformed, the rewritten input will follow this.")
justify = Bool(True, config=True, help="""
If True (default), each prompt will be right-aligned with the
8 IPython/frontend/terminal/ipapp.py
View
@@ -38,6 +38,7 @@
from IPython.core.completer import IPCompleter
from IPython.core.crashhandler import CrashHandler
from IPython.core.formatters import PlainTextFormatter
+from IPython.core.prompts import PromptManager
from IPython.core.application import (
ProfileDir, BaseIPythonApplication, base_flags, base_aliases
)
@@ -133,9 +134,9 @@ def make_report(self,traceback):
classic_config = Config()
classic_config.InteractiveShell.cache_size = 0
classic_config.PlainTextFormatter.pprint = False
-classic_config.InteractiveShell.prompt_in1 = '>>> '
-classic_config.InteractiveShell.prompt_in2 = '... '
-classic_config.InteractiveShell.prompt_out = ''
+classic_config.PromptManager.in_template = '>>> '
+classic_config.PromptManager.in2_template = '... '
+classic_config.PromptManager.out_template = ''
classic_config.InteractiveShell.separate_in = ''
classic_config.InteractiveShell.separate_out = ''
classic_config.InteractiveShell.separate_out2 = ''
@@ -197,6 +198,7 @@ def _classes_default(self):
InteractiveShellApp, # ShellApp comes before TerminalApp, because
self.__class__, # it will also affect subclasses (e.g. QtConsole)
TerminalInteractiveShell,
+ PromptManager,
ProfileDir,
PlainTextFormatter,
IPCompleter,
6 IPython/testing/tools.py
View
@@ -202,9 +202,9 @@ def ipexec(fname, options=None):
# For these subprocess calls, eliminate all prompt printing so we only see
# output from script execution
- prompt_opts = [ '--InteractiveShell.prompt_in1=""',
- '--InteractiveShell.prompt_in2=""',
- '--InteractiveShell.prompt_out=""'
+ prompt_opts = [ '--PromptManager.in_template=""',
+ '--PromptManager.in2_template=""',
+ '--PromptManager.out_template=""'
]
cmdargs = ' '.join(default_argv() + prompt_opts + options)
18 docs/examples/core/example-embed.py
View
@@ -23,10 +23,10 @@
except NameError:
nested = 0
cfg = Config()
- shell_config = cfg.InteractiveShellEmbed
- shell_config.prompt_in1 = 'In <\\#>: '
- shell_config.prompt_in2 = ' .\\D.: '
- shell_config.prompt_out = 'Out<\\#>: '
+ prompt_config = cfg.PromptManager
+ prompt_config.in_template = 'In <\\#>: '
+ prompt_config.in2_template = ' .\\D.: '
+ prompt_config.out_template = 'Out<\\#>: '
else:
print "Running nested copies of IPython."
print "The prompts for the nested copy have been modified"
@@ -46,12 +46,12 @@
# Make a second instance, you can have as many as you want.
cfg2 = cfg.copy()
-shell_config = cfg2.InteractiveShellEmbed
-shell_config.prompt_in1 = 'In2<\\#>: '
+prompt_config = cfg2.PromptManager
+prompt_config.in_template = 'In2<\\#>: '
if not nested:
- shell_config.prompt_in1 = 'In2<\\#>: '
- shell_config.prompt_in2 = ' .\\D.: '
- shell_config.prompt_out = 'Out<\\#>: '
+ prompt_config.in_template = 'In2<\\#>: '
+ prompt_config.in2_template = ' .\\D.: '
+ prompt_config.out_template = 'Out<\\#>: '
ipshell2 = InteractiveShellEmbed(config=cfg,
banner1 = 'Second IPython instance.')
8 docs/source/interactive/reference.txt
View
@@ -227,7 +227,7 @@ All options with a [no] prepended can be specified in negated form
circular file inclusions, IPython will stop if it reaches 15
recursive inclusions.
- ``InteractiveShell.prompt_in1=<string>``
+ ``PromptManager.in_template=<string>``
Specify the string used for input prompts. Note that if you are using
numbered prompts, the number is represented with a '\#' in the
@@ -236,7 +236,7 @@ All options with a [no] prepended can be specified in negated form
discusses in detail all the available escapes to customize your
prompts.
- ``InteractiveShell.prompt_in2=<string>``
+ ``PromptManager.in2_template=<string>``
Similar to the previous option, but used for the continuation
prompts. The special sequence '\D' is similar to '\#', but
with all digits replaced dots (so you can have your
@@ -244,9 +244,9 @@ All options with a [no] prepended can be specified in negated form
' .\D.:' (note three spaces at the start for alignment with
'In [\#]').
- ``InteractiveShell.prompt_out=<string>``
+ ``PromptManager.out_template=<string>``
String used for output prompts, also uses numbers like
- prompt_in1. Default: 'Out[\#]:'
+ in_template. Default: 'Out[\#]:'
``--quick``
start in bare bones mode (no config file loaded).
4 docs/source/interactive/shell.txt
View
@@ -155,8 +155,8 @@ Prompt customization
The sh profile uses the following prompt configurations::
- o.prompt_in1= r'\C_LightBlue[\C_LightCyan\Y2\C_LightBlue]\C_Green|\#>'
- o.prompt_in2= r'\C_Green|\C_LightGreen\D\C_Green>'
+ o.PromptManager.in_template= r'\C_LightBlue[\C_LightCyan\Y2\C_LightBlue]\C_Green|\#>'
Thomas Kluyver Owner

These colour specifications won't work. See my changes to the pysh config in 00cffc4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
+ o.PromptManager.in2_template= r'\C_Green|\C_LightGreen\D\C_Green>'
You can change the prompt configuration to your liking by editing
ipython_config.py.
Something went wrong with that request. Please try again.