Show More
@@ -232,7 +232,14 b' lazily_evaluate = {\'time\': LazyEvaluate(time.strftime, "%H:%M:%S"),' | |||
|
232 | 232 | [LazyEvaluate(cwd_filt, x) for x in range(1,6)], |
|
233 | 233 | 'cwd_y': [LazyEvaluate(cwd_filt2, x) for x in range(6)] |
|
234 | 234 | } |
|
235 | ||
|
235 | ||
|
236 | def _lenlastline(s): | |
|
237 | """Get the length of the last line. More intelligent than | |
|
238 | len(s.splitlines()[-1]). | |
|
239 | """ | |
|
240 | if not s or s.endswith(('\n', '\r')): | |
|
241 | return 0 | |
|
242 | return len(s.splitlines()[-1]) | |
|
236 | 243 | |
|
237 | 244 | class PromptManager(Configurable): |
|
238 | 245 | """This is the primary interface for producing IPython's prompts.""" |
@@ -305,8 +312,10 b' class PromptManager(Configurable):' | |||
|
305 | 312 | """ |
|
306 | 313 | if new_template is not None: |
|
307 | 314 | self.templates[name] = multiple_replace(prompt_abbreviations, new_template) |
|
308 | invis_chars = len(self._render(name, color=True)) - \ | |
|
309 | len(self._render(name, color=False)) | |
|
315 | # We count invisible characters (colour escapes) on the last line of the | |
|
316 | # prompt, to calculate the width for lining up subsequent prompts. | |
|
317 | invis_chars = _lenlastline(self._render(name, color=True)) - \ | |
|
318 | _lenlastline(self._render(name, color=False)) | |
|
310 | 319 | self.invisible_chars[name] = invis_chars |
|
311 | 320 | |
|
312 | 321 | def _update_prompt_trait(self, traitname, new_template): |
@@ -388,9 +397,10 b' class PromptManager(Configurable):' | |||
|
388 | 397 | |
|
389 | 398 | # Handle justification of prompt |
|
390 | 399 | invis_chars = self.invisible_chars[name] if color else 0 |
|
391 | self.txtwidth = len(res) - invis_chars | |
|
400 | self.txtwidth = _lenlastline(res) - invis_chars | |
|
392 | 401 | just = self.justify if (just is None) else just |
|
393 | if just: | |
|
402 | # If the prompt spans more than one line, don't try to justify it: | |
|
403 | if just and ('\n' not in res) and ('\r' not in res): | |
|
394 | 404 | res = res.rjust(self.width + invis_chars) |
|
395 | self.width = len(res) - invis_chars | |
|
405 | self.width = _lenlastline(res) - invis_chars | |
|
396 | 406 | return res |
General Comments 0
You need to be logged in to leave comments.
Login now