Show More
@@ -5,6 +5,7 b' Authors:' | |||
|
5 | 5 | |
|
6 | 6 | * Fernando Perez |
|
7 | 7 | * Brian Granger |
|
8 | * Thomas Kluyver | |
|
8 | 9 | """ |
|
9 | 10 | |
|
10 | 11 | #----------------------------------------------------------------------------- |
@@ -81,7 +82,7 b' PColLightBG.colors.update(' | |||
|
81 | 82 | |
|
82 | 83 | class LazyEvaluate(object): |
|
83 | 84 | """This is used for formatting strings with values that need to be updated |
|
84 |
at that time, such as the current time or |
|
|
85 | at that time, such as the current time or working directory.""" | |
|
85 | 86 | def __init__(self, func, *args, **kwargs): |
|
86 | 87 | self.func = func |
|
87 | 88 | self.args = args |
@@ -193,26 +194,6 b' prompt_abbreviations = {' | |||
|
193 | 194 | # More utilities |
|
194 | 195 | #----------------------------------------------------------------------------- |
|
195 | 196 | |
|
196 | def str_safe(arg): | |
|
197 | """Convert to a string, without ever raising an exception. | |
|
198 | ||
|
199 | If str(arg) fails, <ERROR: ... > is returned, where ... is the exception | |
|
200 | error message.""" | |
|
201 | ||
|
202 | try: | |
|
203 | out = str(arg) | |
|
204 | except UnicodeError: | |
|
205 | try: | |
|
206 | out = arg.encode('utf_8','replace') | |
|
207 | except Exception,msg: | |
|
208 | # let's keep this little duplication here, so that the most common | |
|
209 | # case doesn't suffer from a double try wrapping. | |
|
210 | out = '<ERROR: %s>' % msg | |
|
211 | except Exception,msg: | |
|
212 | out = '<ERROR: %s>' % msg | |
|
213 | #raise # dbg | |
|
214 | return out | |
|
215 | ||
|
216 | 197 | def cwd_filt(self, depth): |
|
217 | 198 | """Return the last depth elements of the current working directory. |
|
218 | 199 | |
@@ -254,20 +235,23 b' lazily_evaluate = {\'time\': LazyEvaluate(time.strftime, "%H:%M:%S"),' | |||
|
254 | 235 | |
|
255 | 236 | |
|
256 | 237 | class PromptManager(Configurable): |
|
238 | """This is the primary interface for producing IPython's prompts.""" | |
|
257 | 239 | shell = Instance('IPython.core.interactiveshell.InteractiveShellABC') |
|
258 | 240 | |
|
259 | 241 | color_scheme_table = Instance(coloransi.ColorSchemeTable) |
|
260 | color_scheme = Unicode('Linux') | |
|
242 | color_scheme = Unicode('Linux', config=True) | |
|
261 | 243 | def _color_scheme_changed(self, name, new_value): |
|
262 | 244 | self.color_scheme_table.set_active_scheme(new_value) |
|
263 | 245 | for pname in ['in', 'in2', 'out', 'rewrite']: |
|
264 | 246 | # We need to recalculate the number of invisible characters |
|
265 | 247 | self.update_prompt(pname) |
|
266 | 248 | |
|
267 | # These fields can be referenced in prompt templates, and are evaluated | |
|
268 | # when the prompt is generated - for things like timestamps. They are only | |
|
269 | # evaluated if a prompt uses them. | |
|
270 | lazy_evaluate_fields = Dict() | |
|
249 | lazy_evaluate_fields = Dict(help=""" | |
|
250 | This maps field names used in the prompt templates to functions which | |
|
251 | will be called when the prompt is rendered. This allows us to include | |
|
252 | things like the current time in the prompts. Functions are only called | |
|
253 | if they are used in the prompt. | |
|
254 | """) | |
|
271 | 255 | def _lazy_evaluate_fields_default(self): return lazily_evaluate.copy() |
|
272 | 256 | |
|
273 | 257 | in_template = Unicode('In [\\#]: ', config=True) |
@@ -275,8 +259,10 b' class PromptManager(Configurable):' | |||
|
275 | 259 | out_template = Unicode('Out[\\#]: ', config=True) |
|
276 | 260 | rewrite_template = Unicode("------> ", config=True) |
|
277 | 261 | |
|
278 | # Justify prompts by default? | |
|
279 | justify = Bool(True) | |
|
262 | justify = Bool(True, config=True, help=""" | |
|
263 | If True (default), each prompt will be right-aligned with the | |
|
264 | preceding one. | |
|
265 | """) | |
|
280 | 266 | |
|
281 | 267 | # We actually store the expanded templates here: |
|
282 | 268 | templates = Dict() |
@@ -306,6 +292,14 b' class PromptManager(Configurable):' | |||
|
306 | 292 | 'in2_template', 'out_template', 'rewrite_template']) |
|
307 | 293 | |
|
308 | 294 | def update_prompt(self, name, new_template=None): |
|
295 | """This is called when a prompt template is updated. It processes | |
|
296 | abbreviations used in the prompt template (like \#) and calculates how | |
|
297 | many invisible characters (ANSI colour escapes) the resulting prompt | |
|
298 | contains. | |
|
299 | ||
|
300 | It is also called for each prompt on changing the colour scheme. In both | |
|
301 | cases, traitlets should take care of calling this automatically. | |
|
302 | """ | |
|
309 | 303 | if new_template is not None: |
|
310 | 304 | self.templates[name] = multiple_replace(prompt_abbreviations, new_template) |
|
311 | 305 | invis_chars = len(self.render(name, color=True, just=False)) - \ |
@@ -344,6 +338,12 b' class PromptManager(Configurable):' | |||
|
344 | 338 | colors = color_lists['normal'] |
|
345 | 339 | colors.number, colors.prompt, colors.normal = \ |
|
346 | 340 | scheme.out_number, scheme.out_prompt, scheme.normal |
|
341 | elif name=='rewrite': | |
|
342 | colors = color_lists['normal'] | |
|
343 | # We need a non-input version of these escapes | |
|
344 | colors.number = scheme.in_number.replace("\001","").replace("\002","") | |
|
345 | colors.prompt = scheme.in_prompt.replace("\001","").replace("\002","") | |
|
346 | colors.normal = scheme.normal | |
|
347 | 347 | else: |
|
348 | 348 | colors = color_lists['inp'] |
|
349 | 349 | colors.number, colors.prompt, colors.normal = \ |
General Comments 0
You need to be logged in to leave comments.
Login now