<p>ipython&gt; = 7.0.0 рдХреЗ рд╕рд╛рде рдкрд╛рд╡рд░рд▓рд╛рдЗрди-рд╕реНрдерд┐рддрд┐ рдХреНрд░реИрд╢</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЕрдХреНрддреВре░ 2018  ┬╖  41рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: powerline/powerline

IPython рдХреЗ рд▓рд┐рдП рдкреЙрд╡рд░рд▓рд╛рдЗрди рдкреНрд▓рдЧрдЗрди рдЗрд╕реЗ 7.0.0 рдФрд░ 7.0.1 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ; рдпрд╣ IPython рд╕рдВрд╕реНрдХрд░рдг 6.5.0 рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рджреБрд░реНрдШрдЯрдирд╛ рд░рд┐рдкреЛрд░реНрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛ред рдиреАрдЪреЗ рдореЗрд░рд╛ IPython рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

# Enable the Powerline prompt
from powerline.bindings.ipython.since_5 import PowerlinePrompts
c.TerminalInteractiveShell.simple_prompt = False
c.TerminalInteractiveShell.prompts_class = PowerlinePrompts

## Shortcut style to use at the prompt. 'vi' or 'emacs'.
c.TerminalInteractiveShell.editing_mode = 'vi'

## Set the editor used by IPython (default to $EDITOR/vi/notepad).
c.TerminalInteractiveShell.editor = 'vim'

c.TerminalInteractiveShell.highlighting_style = 'monokai'

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЬрдм рддрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП develop рд╢рд╛рдЦрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрд╣ master рд╕реЗ рдХрдо рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдзрдбрд╝рдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

pip install --user 'git+https://github.com/powerline/powerline.git@develop#powerline'

рдлрд┐рд░, рдЕрдкрдиреЗ ipython config рдореЗрдВ, since_5 рд╕реЗ since_7 , рдЗрд╕ рддрд░рд╣ рдмрджрд▓реЗрдВ:

from powerline.bindings.ipython.since_7 import PowerlinePrompts
c.TerminalInteractiveShell.simple_prompt = False
c.TerminalInteractiveShell.prompts_class = PowerlinePrompts

рд╕рднреА 41 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

$ ipython                                                                                                                                                           юВа master| тЬФ
Python 3.6.6 (default, Oct  3 2018, 13:39:52)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.

---------------------------------------------------------------------------
---------------------------------------------------------------------------
TypeErrorPython 3.6.6: /home/local/ANT/dylone/.pyenv/versions/3.6.6/bin/python3.6
                                                   Fri Oct  5 12:15:31 2018
A problem occurred executing Python code.  Here is the sequence of function
calls leading up to the error, with the most recent (innermost) call last.
~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/application/application.py in _run_async2()
    650                     f = From(_run_async())
--> 651                     result = yield f
        result = undefined
        f = <prompt_toolkit.eventloop.future.Future object at 0x7f06ce70c240>
    652                 finally:

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/eventloop/coroutine.py in step_next(f=None)
     85             if f is None:
---> 86                 new_f = coroutine.send(None)
        global new_f = undefined
        global coroutine.send = undefined
     87             else:

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/application/application.py in _run_async()
    593                     self._request_absolute_cursor_position()
--> 594                     self._redraw()
        global self._redraw = undefined
    595

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/application/application.py in _redraw(self=<prompt_toolkit.application.application.Application object>, render_as_done=False)
    442                 else:
--> 443                     self.renderer.render(self, self.layout)
        self.renderer.render = <bound method Renderer.render of <prompt_toolkit.renderer.Renderer object at 0x7f06ce5eb320>>
        self = <prompt_toolkit.application.application.Application object at 0x7f06ce749710>
        self.layout = Layout(<prompt_toolkit.layout.containers.HSplit object at 0x7f06ce736e48>, current_window=Window(content=<BufferControl buffer=<Buffer(name='DEFAULT_BUFFER', text='') at 139667210131160> at 139667210247472>))
    444

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/renderer.py in render(self=<prompt_toolkit.renderer.Renderer object>, app=<prompt_toolkit.application.application.Application object>, layout=Layout(<prompt_toolkit.layout.containers.HSplit ...ext='') at 139667210131160> at 139667210247472>)), is_done=False)
    549         # (But note that we still use _last_screen to calculate the height.)
--> 550         if (self.style.invalidation_hash() != self._last_style_hash or
        self.style.invalidation_hash = <bound method _MergedStyle.invalidation_hash of <prompt_toolkit.styles.style._MergedStyle object at 0x7f06ce5eb208>>
        self._last_style_hash = None
        app.style_transformation.invalidation_hash = <bound method _MergedStyleTransformation.invalidation_hash of <prompt_toolkit.styles.style_transformation._MergedStyleTransformation object at 0x7f06ce7490b8>>
        self._last_transformation_hash = None
        app.color_depth = 'DEPTH_8_BIT'
        self._last_color_depth = None
    551                 app.style_transformation.invalidation_hash() != self._last_transformation_hash or

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/styles/style.py in invalidation_hash(self=<prompt_toolkit.styles.style._MergedStyle object>)
    371     def invalidation_hash(self):
--> 372         return tuple(s.invalidation_hash() for s in self.styles)
        global tuple = undefined
        global s.invalidation_hash = undefined
        global s = undefined
        self.styles = [<prompt_toolkit.styles.style._MergedStyle object at 0x7f06ce6538d0>, <prompt_toolkit.styles.base.DynamicStyle object at 0x7f06ce63ea90>, <prompt_toolkit.styles.base.DynamicStyle object at 0x7f06ce5eb2b0>]

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/styles/style.py in <genexpr>(.0=<list_iterator object>)
    371     def invalidation_hash(self):
--> 372         return tuple(s.invalidation_hash() for s in self.styles)
        global tuple = undefined
        s.invalidation_hash = <bound method DynamicStyle.invalidation_hash of <prompt_toolkit.styles.base.DynamicStyle object at 0x7f06ce5eb2b0>>
        s = <prompt_toolkit.styles.base.DynamicStyle object at 0x7f06ce5eb2b0>
        global self.styles = undefined

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/styles/base.py in invalidation_hash(self=<prompt_toolkit.styles.base.DynamicStyle object>)
    139     def invalidation_hash(self):
--> 140         return (self.get_style() or self._dummy).invalidation_hash()
        self.get_style = <function Application._create_merged_style.<locals>.<lambda> at 0x7f06ce63b730>
        self._dummy.invalidation_hash = <bound method DummyStyle.invalidation_hash of <prompt_toolkit.styles.base.DummyStyle object at 0x7f06ce5eb278>>
    141

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/styles/base.py in invalidation_hash(self=<prompt_toolkit.styles.base.DynamicStyle object>)
    139     def invalidation_hash(self):
--> 140         return (self.get_style() or self._dummy).invalidation_hash()
        self.get_style = <function PromptSession._create_application.<locals>.<lambda> at 0x7f06ce660598>
        self._dummy.invalidation_hash = <bound method DummyStyle.invalidation_hash of <prompt_toolkit.styles.base.DummyStyle object at 0x7f06ce748e80>>
    141

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/styles/base.py in invalidation_hash(self=<prompt_toolkit.styles.base.DynamicStyle object>)
    139     def invalidation_hash(self):
--> 140         return (self.get_style() or self._dummy).invalidation_hash()
        self.get_style = <function TerminalInteractiveShell.init_prompt_toolkit_cli.<locals>.<lambda> at 0x7f06ce832bf8>
        self._dummy.invalidation_hash = <bound method DummyStyle.invalidation_hash of <prompt_toolkit.styles.base.DummyStyle object at 0x7f06ce821630>>
    141

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/powerline/renderers/ipython/since_5.py in invalidation_hash(self=<powerline.renderers.ipython.since_5.PowerlinePromptStyle object>)
     78         def invalidation_hash(self):
---> 79                 return super(PowerlinePromptStyle, self).invalidation_hash() + 1
        global super = undefined
        global PowerlinePromptStyle = <class 'powerline.renderers.ipython.since_5.PowerlinePromptStyle'>
        self.invalidation_hash = <bound method PowerlinePromptStyle.invalidation_hash of <powerline.renderers.ipython.since_5.PowerlinePromptStyle object at 0x7f06ce5f8cf8>>
     80

TypeError: can only concatenate tuple (not "int") to tuple

During handling of the above exception, another exception occurred:

---------------------------------------------------------------------------
AssertionErrorPython 3.6.6: /home/local/ANT/dylone/.pyenv/versions/3.6.6/bin/python3.6
                                                   Fri Oct  5 12:15:31 2018
A problem occurred executing Python code.  Here is the sequence of function
calls leading up to the error, with the most recent (innermost) call last.
~/.pyenv/versions/3.6.6/bin/ipython in <module>
      1 #!/home/local/ANT/dylone/.pyenv/versions/3.6.6/bin/python3.6
      2
      3 # -*- coding: utf-8 -*-
      4 import re
      5 import sys
      6
      7 from IPython import start_ipython
      8
      9 if __name__ == '__main__':
     10     sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
---> 11     sys.exit(start_ipython())
        global sys.exit = <built-in function exit>
        global start_ipython = <function start_ipython at 0x7f06cf554378>

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/IPython/__init__.py in start_ipython(argv=None, **kwargs={})
    110     This is a public API method, and will survive implementation changes.
    111
    112     Parameters
    113     ----------
    114
    115     argv : list or None, optional
    116         If unspecified or None, IPython will parse command-line options from sys.argv.
    117         To prevent any command-line parsing, pass an empty list: `argv=[]`.
    118     user_ns : dict, optional
    119         specify this dictionary to initialize the IPython user namespace with particular values.
    120     kwargs : various, optional
    121         Any other kwargs will be passed to the Application constructor,
    122         such as `config`.
    123     """
    124     from IPython.terminal.ipapp import launch_new_instance
--> 125     return launch_new_instance(argv=argv, **kwargs)
        launch_new_instance = <bound method Application.launch_instance of <class 'IPython.terminal.ipapp.TerminalIPythonApp'>>
        argv = None
        kwargs = {}
    126
    127 def start_kernel(argv=None, **kwargs):
    128     """Launch a normal IPython kernel instance (as opposed to embedded)
    129
    130     `IPython.embed_kernel()` puts a shell in a particular calling scope,
    131     such as a function or method for debugging purposes,
    132     which is often not desirable.
    133
    134     `start_kernel()` does full, regular IPython initialization,
    135     including loading startup files, configuration, etc.
    136     much of which is skipped by `embed()`.
    137
    138     Parameters
    139     ----------
    140

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/traitlets/config/application.py in launch_instance(cls=<class 'IPython.terminal.ipapp.TerminalIPythonApp'>, argv=None, **kwargs={})
    643             lines.append(cls.class_config_section())
    644         return '\n'.join(lines)
    645
    646     def exit(self, exit_status=0):
    647         self.log.debug("Exiting application: %s" % self.name)
    648         sys.exit(exit_status)
    649
    650     <strong i="5">@classmethod</strong>
    651     def launch_instance(cls, argv=None, **kwargs):
    652         """Launch a global instance of this Application
    653
    654         If a global instance already exists, this reinitializes and starts it
    655         """
    656         app = cls.instance(**kwargs)
    657         app.initialize(argv)
--> 658         app.start()
        app.start = <bound method TerminalIPythonApp.start of <IPython.terminal.ipapp.TerminalIPythonApp object at 0x7f06d6aae080>>
    659
    660 #-----------------------------------------------------------------------------
    661 # utility functions, for convenience
    662 #-----------------------------------------------------------------------------
    663
    664 def boolean_flag(name, configurable, set_help='', unset_help=''):
    665     """Helper for building basic --trait, --no-trait flags.
    666
    667     Parameters
    668     ----------
    669
    670     name : str
    671         The name of the flag.
    672     configurable : str
    673         The 'Class.trait' string of the trait to be set/unset with the flag

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/IPython/terminal/ipapp.py in start(self=<IPython.terminal.ipapp.TerminalIPythonApp object>)
    341         if self.log_level <= logging.INFO: print()
    342
    343     def _pylab_changed(self, name, old, new):
    344         """Replace --pylab='inline' with --pylab='auto'"""
    345         if new == 'inline':
    346             warnings.warn("'inline' not available as pylab backend, "
    347                       "using 'auto' instead.")
    348             self.pylab = 'auto'
    349
    350     def start(self):
    351         if self.subapp is not None:
    352             return self.subapp.start()
    353         # perform any prexec steps:
    354         if self.interact:
    355             self.log.debug("Starting IPython's mainloop...")
--> 356             self.shell.mainloop()
        self.shell.mainloop = <bound method TerminalInteractiveShell.mainloop of <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0x7f06d25a8a20>>
    357         else:
    358             self.log.debug("IPython not interactive...")
    359             if not self.shell.last_execution_succeeded:
    360                 sys.exit(1)
    361
    362 def load_default_config(ipython_dir=None):
    363     """Load the default config file from the default ipython_dir.
    364
    365     This is useful for embedded shells.
    366     """
    367     if ipython_dir is None:
    368         ipython_dir = get_ipython_dir()
    369
    370     profile_dir = os.path.join(ipython_dir, 'profile_default')
    371     app = TerminalIPythonApp()

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/IPython/terminal/interactiveshell.py in mainloop(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>, display_banner=<object object>)
    457                 if (not self.confirm_exit) \
    458                         or self.ask_yes_no('Do you really want to exit ([y]/n)?','y','n'):
    459                     self.ask_exit()
    460
    461             else:
    462                 if code:
    463                     self.run_cell(code, store_history=True)
    464
    465     def mainloop(self, display_banner=DISPLAY_BANNER_DEPRECATED):
    466         # An extra layer of protection in case someone mashing Ctrl-C breaks
    467         # out of our internal code.
    468         if display_banner is not DISPLAY_BANNER_DEPRECATED:
    469             warn('mainloop `display_banner` argument is deprecated since IPython 5.0. Call `show_banner()` if needed.', DeprecationWarning, stacklevel=2)
    470         while True:
    471             try:
--> 472                 self.interact()
        self.interact = <bound method TerminalInteractiveShell.interact of <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0x7f06d25a8a20>>
    473                 break
    474             except KeyboardInterrupt as e:
    475                 print("\n%s escaped interact()\n" % type(e).__name__)
    476             finally:
    477                 # An interrupt during the eventloop will mess up the
    478                 # internal state of the prompt_toolkit library.
    479                 # Stopping the eventloop fixes this, see
    480                 # https://github.com/ipython/ipython/pull/9867
    481                 if hasattr(self, '_eventloop'):
    482                     self._eventloop.stop()
    483
    484     _inputhook = None
    485     def inputhook(self, context):
    486         if self._inputhook is not None:
    487             self._inputhook(context)

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/IPython/terminal/interactiveshell.py in interact(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>, display_banner=<object object>)
    440     def ask_exit(self):
    441         self.keep_running = False
    442
    443     rl_next_input = None
    444
    445     def interact(self, display_banner=DISPLAY_BANNER_DEPRECATED):
    446
    447         if display_banner is not DISPLAY_BANNER_DEPRECATED:
    448             warn('interact `display_banner` argument is deprecated since IPython 5.0. Call `show_banner()` if needed.', DeprecationWarning, stacklevel=2)
    449
    450         self.keep_running = True
    451         while self.keep_running:
    452             print(self.separate_in, end='')
    453
    454             try:
--> 455                 code = self.prompt_for_code()
        code = undefined
        self.prompt_for_code = <bound method TerminalInteractiveShell.prompt_for_code of <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0x7f06d25a8a20>>
    456             except EOFError:
    457                 if (not self.confirm_exit) \
    458                         or self.ask_yes_no('Do you really want to exit ([y]/n)?','y','n'):
    459                     self.ask_exit()
    460
    461             else:
    462                 if code:
    463                     self.run_cell(code, store_history=True)
    464
    465     def mainloop(self, display_banner=DISPLAY_BANNER_DEPRECATED):
    466         # An extra layer of protection in case someone mashing Ctrl-C breaks
    467         # out of our internal code.
    468         if display_banner is not DISPLAY_BANNER_DEPRECATED:
    469             warn('mainloop `display_banner` argument is deprecated since IPython 5.0. Call `show_banner()` if needed.', DeprecationWarning, stacklevel=2)
    470         while True:

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/IPython/terminal/interactiveshell.py in prompt_for_code(self=<IPython.terminal.interactiveshell.TerminalInteractiveShell object>)
    369                             Condition(lambda: self.highlight_matching_brackets))],
    370                 'inputhook': self.inputhook,
    371                 }
    372
    373     def prompt_for_code(self):
    374         if self.rl_next_input:
    375             default = self.rl_next_input
    376             self.rl_next_input = None
    377         else:
    378             default = ''
    379
    380         with patch_stdout(raw=True):
    381             text = self.pt_app.prompt(
    382                 default=default,
    383 #                pre_run=self.pre_prompt,# reset_current_buffer=True,
--> 384                 **self._extra_prompt_options())
        self._extra_prompt_options = <bound method TerminalInteractiveShell._extra_prompt_options of <IPython.terminal.interactiveshell.TerminalInteractiveShell object at 0x7f06d25a8a20>>
    385         return text
    386
    387     def enable_win_unicode_console(self):
    388         if sys.version_info >= (3, 6):
    389             # Since PEP 528, Python uses the unicode APIs for the Windows
    390             # console by default, so WUC shouldn't be needed.
    391             return
    392
    393         import win_unicode_console
    394         win_unicode_console.enable()
    395
    396     def init_io(self):
    397         if sys.platform not in {'win32', 'cli'}:
    398             return
    399

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/shortcuts/prompt.py in prompt(self=<prompt_toolkit.shortcuts.prompt.PromptSession object>, message=<function TerminalInteractiveShell._extra_prompt_options.<locals>.get_message>, default='', editing_mode=None, refresh_interval=None, vi_mode=None, lexer=<IPython.terminal.ptutils.IPythonPTLexer object>, completer=None, complete_in_thread=False, is_password=None, key_bindings=None, bottom_toolbar=None, style=None, color_depth=None, include_default_pygments_style=None, style_transformation=None, swap_light_and_dark_colors=None, rprompt=None, multiline=True, prompt_continuation=<function TerminalInteractiveShell._extra_prompt_options.<locals>.<lambda>>, wrap_lines=None, enable_history_search=None, search_ignore_case=None, complete_while_typing=None, validate_while_typing=None, complete_style='MULTI_COLUMN', auto_suggest=None, validator=None, clipboard=None, mouse_support=None, input_processors=[ConditionalProcessor(processor=<prompt_toolkit.l...pt_options.<locals>.<lambda> at 0x7f06ce63bea0>))], reserve_space_for_menu=6, enable_system_prompt=None, enable_suspend=None, enable_open_in_editor=None, tempfile_suffix=None, inputhook=<bound method TerminalInteractiveShell.inputhook...nteractiveshell.TerminalInteractiveShell object>>, async_=False, accept_default=False, pre_run=None)
    716
    717         def run_sync():
    718             with self._auto_refresh_context():
    719                 self.default_buffer.reset(Document(self.default))
    720                 return self.app.run(inputhook=self.inputhook, pre_run=pre_run2)
    721
    722         def run_async():
    723             with self._auto_refresh_context():
    724                 self.default_buffer.reset(Document(self.default))
    725                 result = yield From(self.app.run_async(pre_run=pre_run2))
    726                 raise Return(result)
    727
    728         if async_:
    729             return ensure_future(run_async())
    730         else:
--> 731             return run_sync()
        run_sync = <function PromptSession.prompt.<locals>.run_sync at 0x7f06ce832c80>
    732
    733     <strong i="6">@property</strong>
    734     def editing_mode(self):
    735         return self.app.editing_mode
    736
    737     @editing_mode.setter
    738     def editing_mode(self, value):
    739         self.app.editing_mode = value
    740
    741     def _get_default_buffer_control_height(self):
    742         # If there is an autocompletion menu to be shown, make sure that our
    743         # layout has at least a minimal height in order to display it.
    744         if (self.completer is not None and
    745                 self.complete_style != CompleteStyle.READLINE_LIKE):
    746             space = self.reserve_space_for_menu

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/shortcuts/prompt.py in run_sync()
    705         def pre_run2():
    706             if pre_run:
    707                 pre_run()
    708
    709             if accept_default:
    710                 # Validate and handle input. We use `call_from_executor` in
    711                 # order to run it "soon" (during the next iteration of the
    712                 # event loop), instead of right now. Otherwise, it won't
    713                 # display the default value.
    714                 get_event_loop().call_from_executor(
    715                     self.default_buffer.validate_and_handle)
    716
    717         def run_sync():
    718             with self._auto_refresh_context():
    719                 self.default_buffer.reset(Document(self.default))
--> 720                 return self.app.run(inputhook=self.inputhook, pre_run=pre_run2)
        global self.app.run = undefined
        global inputhook = undefined
        global self.inputhook = undefined
        global pre_run = undefined
        global pre_run2 = undefined
    721
    722         def run_async():
    723             with self._auto_refresh_context():
    724                 self.default_buffer.reset(Document(self.default))
    725                 result = yield From(self.app.run_async(pre_run=pre_run2))
    726                 raise Return(result)
    727
    728         if async_:
    729             return ensure_future(run_async())
    730         else:
    731             return run_sync()
    732
    733     <strong i="7">@property</strong>
    734     def editing_mode(self):
    735         return self.app.editing_mode

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/application/application.py in run(self=<prompt_toolkit.application.application.Application object>, pre_run=<function PromptSession.prompt.<locals>.pre_run2>, set_exception_handler=True, inputhook=<bound method TerminalInteractiveShell.inputhook...nteractiveshell.TerminalInteractiveShell object>>)
    683             def print_exception():
    684                 # Print output. Similar to 'loop.default_exception_handler',
    685                 # but don't use logger. (This works better on Python 2.)
    686                 print('\nUnhandled exception in event loop:')
    687                 print(formatted_tb)
    688                 print('Exception %s' % (context.get('exception'), ))
    689
    690                 yield From(_do_wait_for_enter('Press ENTER to continue...'))
    691             run_coroutine_in_terminal(print_exception)
    692
    693         if set_exception_handler:
    694             # Run with patched exception handler.
    695             previous_exc_handler = loop.get_exception_handler()
    696             loop.set_exception_handler(handle_exception)
    697             try:
--> 698                 return run()
        run = <function Application.run.<locals>.run at 0x7f06ce5f9158>
    699             finally:
    700                 loop.set_exception_handler(previous_exc_handler)
    701         else:
    702             run()
    703
    704     def cpr_not_supported_callback(self):
    705         """
    706         Called when we don't receive the cursor position response in time.
    707         """
    708         if not self.input.responds_to_cpr:
    709             return  # We know about this already.
    710
    711         def in_terminal():
    712             self.output.write(
    713                 "WARNING: your terminal doesn't support cursor position requests (CPR).\r\n")

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/application/application.py in run()
    657
    658     def run(self, pre_run=None, set_exception_handler=True, inputhook=None):
    659         """
    660         A blocking 'run' call that waits until the UI is finished.
    661
    662         :param set_exception_handler: When set, in case of an exception, go out
    663             of the alternate screen and hide the application, display the
    664             exception, and wait for the user to press ENTER.
    665         :param inputhook: None or a callable that takes an `InputHookContext`.
    666         """
    667         loop = get_event_loop()
    668
    669         def run():
    670             f = self.run_async(pre_run=pre_run)
    671             run_until_complete(f, inputhook=inputhook)
--> 672             return f.result()
        f.result = <bound method Future.result of <prompt_toolkit.eventloop.future.Future object at 0x7f06ce718978>>
    673
    674         def handle_exception(context):
    675             " Print the exception, using run_in_terminal. "
    676             # For Python 2: we have to get traceback at this point, because
    677             # we're still in the 'except:' block of the event loop where the
    678             # traceback is still available. Moving this code in the
    679             # 'print_exception' coroutine will loose the exception.
    680             tb = get_traceback_from_context(context)
    681             formatted_tb = ''.join(format_tb(tb))
    682
    683             def print_exception():
    684                 # Print output. Similar to 'loop.default_exception_handler',
    685                 # but don't use logger. (This works better on Python 2.)
    686                 print('\nUnhandled exception in event loop:')
    687                 print(formatted_tb)

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/eventloop/future.py in result(self=<prompt_toolkit.eventloop.future.Future object>)
    134             # Activate the original task context (and application) again.
    135             with context(self._ctx_id):
    136                 # They should be called in order.
    137                 for cb in done_callbacks:
    138                     cb(self)
    139
    140         self.loop.call_from_executor(call_them_all)
    141
    142     def result(self):
    143         " Return the result this future represents. "
    144         if not self._done:
    145             raise InvalidStateError
    146
    147         self._retrieved_result = True
    148         if self._exception:
--> 149             raise self._exception
        self._exception = AssertionError()
    150         else:
    151             return self._result
    152
    153     def exception(self):
    154         " Return the exception that was set on this future. "
    155         if not self._done:
    156             raise InvalidStateError
    157
    158         self._retrieved_result = True
    159         return self._exception
    160
    161     def done(self):
    162         """
    163         Return True if the future is done. Done means either that a result /
    164         exception are available, or that the future was cancelled.

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/eventloop/coroutine.py in step_next(f=<prompt_toolkit.eventloop.future.Future object>)
     75     # (If `step_next` had a direct reference to `result_f` and there is a
     76     # future that references `step_next`, then sometimes it won't be cleaned up
     77     # immediately. - I'm not sure how exactly, but in that case it requires the
     78     # garbage collector, because refcounting isn't sufficient.)
     79     ref = _FutureRef(result_f)
     80
     81     # Loop through the generator.
     82     def step_next(f=None):
     83         " Execute next step of the coroutine."
     84         try:
     85             if f is None:
     86                 new_f = coroutine.send(None)
     87             else:
     88                 exc = f.exception()
     89                 if exc:
---> 90                     new_f = coroutine.throw(exc)
        global new_f = undefined
        global coroutine.throw = undefined
        exc = TypeError('can only concatenate tuple (not "int") to tuple',)
     91                 else:
     92                     new_f = coroutine.send(f.result())
     93         except StopIteration as e:
     94             # Stop coroutine. Make sure that a result has been set in the future,
     95             # this will call the callbacks. (Also, don't take any result from
     96             # StopIteration, it has already been set using `raise Return()`.
     97             if not ref.future.done():
     98                 ref.future.set_result(None)
     99                 ref.forget()
    100         except Return as e:
    101             ref.future.set_result(e.value)
    102             ref.forget()
    103         except BaseException as e:
    104             ref.future.set_exception(e)
    105             ref.forget()

~/.pyenv/versions/3.6.6/lib/python3.6/site-packages/prompt_toolkit/application/application.py in _run_async2()
    638                             if previous_run_in_terminal_f:
    639                                 yield From(previous_run_in_terminal_f)
    640
    641                             # Store unprocessed input as typeahead for next time.
    642                             store_typeahead(self.input, self.key_processor.empty_queue())
    643
    644                 raise Return(result)
    645
    646         def _run_async2():
    647             self._is_running = True
    648             with set_app(self):
    649                 try:
    650                     f = From(_run_async())
    651                     result = yield f
    652                 finally:
--> 653                     assert not self._is_running
        global self._is_running = undefined
    654                 raise Return(result)
    655
    656         return ensure_future(_run_async2())
    657
    658     def run(self, pre_run=None, set_exception_handler=True, inputhook=None):
    659         """
    660         A blocking 'run' call that waits until the UI is finished.
    661
    662         :param set_exception_handler: When set, in case of an exception, go out
    663             of the alternate screen and hide the application, display the
    664             exception, and wait for the user to press ENTER.
    665         :param inputhook: None or a callable that takes an `InputHookContext`.
    666         """
    667         loop = get_event_loop()
    668

AssertionError:

**********************************************************************

Oops, ipython crashed. We do our best to make it stable, but...

A crash report was automatically generated with the following information:
  - A verbatim copy of the crash traceback.
  - A copy of your input history during this session.
  - Data on your current ipython configuration.

It was left in the file named:
        '/home/local/ANT/dylone/.ipython/Crash_report_ipython.txt'
If you can email this file to the developers, the information in it will help
them in understanding and correcting the problem.

You can mail it to: The IPython Development Team at [email protected]
with the subject 'ipython Crash Report'.

If you want to do it now, the following command will work (under Unix):
mail -s 'ipython Crash Report' [email protected] < /home/local/ANT/dylone/.ipython/Crash_report_ipython.txt

In your email, please also include information about:
- The operating system under which the crash happened: Linux, macOS, Windows,
  other, and which exact version (for example: Ubuntu 16.04.3, macOS 10.13.2,
  Windows 10 Pro), and whether it is 32-bit or 64-bit;
- How ipython was installed: using pip or conda, from GitHub, as part of
  a Docker container, or other, providing more detail if possible;
- How to reproduce the crash: what exact sequence of instructions can one
  input to get the same crash? Ideally, find a minimal yet complete sequence
  of instructions that yields the crash.

To ensure accurate tracking of this issue, please file a report about it at:
https://github.com/ipython/ipython/issues

Hit <Enter> to quit (your terminal may close):
[1]    16729 exit 1     ipython

рдбреЙрдХреНрд╕ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рднреА:

from powerline.bindings.ipython.since_5 import PowerlinePrompts
c = get_config()
c.TerminalInteractiveShell.simple_prompt = False
c.TerminalInteractiveShell.prompts_class = PowerlinePrompts

рдЕрдкрд╡рд╛рдж:

Traceback (most recent call last):
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/application/application.py", line 635, in _run_async2
    result = yield f
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/eventloop/coroutine.py", line 86, in step_next
    new_f = coroutine.send(None)
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/application/application.py", line 587, in _run_async
    self._redraw()
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/application/application.py", line 436, in _redraw
    self.renderer.render(self, self.layout)
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/renderer.py", line 535, in render
    if (self.style.invalidation_hash() != self._last_style_hash or
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/styles/style.py", line 371, in invalidation_hash
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/styles/style.py", line 371, in <genexpr>
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/styles/base.py", line 140, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/styles/base.py", line 140, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/local/Cellar/ipython/7.0.1/libexec/vendor/lib/python3.7/site-packages/prompt_toolkit/styles/base.py", line 140, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/local/lib/python3.7/site-packages/powerline/renderers/ipython/since_5.py", line 79, in invalidation_hash
    return super(PowerlinePromptStyle, self).invalidation_hash() + 1
TypeError: can only concatenate tuple (not "int") to tuple

рдЗрд╕рд▓рд┐рдП
ipython>=7.0.0 prompt_toolkit>=2.0.0,<2.1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
ipython<7.0.0 prompt_toolkit>=1.0.15,<2.0.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

рдкреНрд░реЙрдореНрдкреНрдЯ_рдЯреВрд▓рдХрд┐рдЯ <2.0.0 invalidation_hash рд╣рдореЗрд╢рд╛ str рдпрд╛ int рдорд┐рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдпрд╣ tuple рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

diff --git a/powerline/renderers/ipython/since_5.py b/powerline/renderers/ipython/since_5.py
index 8a26da72..6719fd09 100644
--- a/powerline/renderers/ipython/since_5.py
+++ b/powerline/renderers/ipython/since_5.py
@@ -76,7 +76,7 @@ class PowerlinePromptStyle(DynamicStyle):
                return PowerlineStyleDict(fallback)

        def invalidation_hash(self):
-           return super(PowerlinePromptStyle, self).invalidation_hash() + 1
+         return (h + 1 for h in tuple(super(PowerlinePromptStyle, self).invalidation_hash()))


 class IPythonPygmentsRenderer(IPythonRenderer):

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдкреАрдЖрд░ рдЯреЛрдХрд░рд╛ рд▓рд╛рдпрдХ рд╣реИред рдпрд╣ рд╕рд╛рдл рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде since_7.py рдкреНрд░рдХрд╛рд░ рдХреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛?

рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдореБрдЭреЗ Powerline рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред

рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдлрд┐рдХреНрд╕ рдкреЙрд╡рд░рд▓рд╛рдЗрди рдХреЛ рдХреНрд░реИрд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЗ рд░реВрдк рдореЗрдВ, рд╢реАрдШреНрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдмрджрд╕реВрд░рдд рд╣реИ, рдЬрд╣рд╛рдВ рд░рдВрдЧ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, "рдФрд░" рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

& рд╡рд░реНрдг рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рд╕реНрдкреЗрд╕ ( \xa0 ) рд▓рдЧрддреЗ рд╣реИрдВ; рдереАрдо рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реЗрдмрд▓ рдХрд░рдиреЗ рдХреА рдЬрдЧрд╣ рдЙрдиреНрд╣реЗрдВ рдиреЙрд░реНрдорд▓ рд╕реНрдкреЗрд╕ рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд░рдВрдЧ рдЕрднреА рднреА рдмрджрд▓рддреЗ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдЕрдЧреНрд░рднреВрдорд┐ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ #00005f ред

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ iPython (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 7.4) рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд╡рд░рд▓рд╛рдЗрди рдЯреВрдЯ рдЧрдИ рд╣реИред
@Zebradil рджреНрд╡рд╛рд░рд╛ рд╕реБрдЭрд╛рдП рдЧрдП рдлрд┐рдХреНрд╕ iPython рдХреЛ рдХрдо рд╕реЗ рдХрдо рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж!) рд▓реЗрдХрд┐рди -
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд░рдВрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдФрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рд╕рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЕрдкрдиреЗ IPython 7.3.0 рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВред IPython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд░реЛрдХрдирд╛ рд╣реЛрдЧрд╛ред

рдЖрдк рдЗрд╕реЗ рдХрдм рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ ~~~

рдмреЗрдЭрд┐рдЭрдХ рдЖрдЧреЗ рдмрдврд╝реЗрдВред @Zebradil рдкреИрдЪ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
рдХреНрдпреЛрдВ iPython рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЛ & s рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдк рдЗрд╕ рдмрдЧ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рдмрд╣реБрдд рдорджрдж рдХрд░реЗрдВрдЧреЗред

рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ "рд░рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдФрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдХреЗрдд рд╕рдЬрд╛рддрд╛ рд╣реИред" рд╣рдорд╢рдХреНрд▓? рдореИрдВ рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдиреАрдЪреЗ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

2019-04-03-083801_739x255_scrot

рд╡рд╣рд╛рдВ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ &ред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╡рд╣рд╛рдВ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ &ред

рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ "&" рдХреЛ "_" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ - рджрд┐рд▓рдЪрд╕реНрдк,
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдХреБрдмрдВрдЯреБ 18.04 рдХреЗ рддрд╣рдд рд╕рдВрдХреЗрдд рджрд┐рдЦрддрд╛ рд╣реИ:

iPython7-powerline

& рд╡рд░реНрдг рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рд╕реНрдкреЗрд╕ ( \xa0 ) рд▓рдЧрддреЗ рд╣реИрдВ; рдереАрдо рдХреЙрдиреНрдлрд┐рдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдбрд┐рд╕реЗрдмрд▓ рдХрд░рдиреЗ рдХреА рдЬрдЧрд╣ рдЙрдиреНрд╣реЗрдВ рдиреЙрд░реНрдорд▓ рд╕реНрдкреЗрд╕ рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд░рдВрдЧ рдЕрднреА рднреА рдмрджрд▓рддреЗ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╕рдм рдХреБрдЫ рдкрд╛рд░рджрд░реНрд╢реА рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдЕрдЧреНрд░рднреВрдорд┐ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ #00005f ред

Screenshot_2019-04-03_21-04-52

рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ & рд╕рдВрдмрдВрдз рдореЗрдВ рдореБрджреНрджрд╛ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реИ, рдЬреЛ рд░рдВрдЧреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред

рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ "&" рдХреЛ "_" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ - рджрд┐рд▓рдЪрд╕реНрдк,
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ
рдкреНрд░реЙрдореНрдкреНрдЯ-рдЯреВрд▓рдХрд┐рдЯ: рдореИрдВрдиреЗ 2.0.7 рд╕реЗ 2.0.9 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛
рдФрд░ рд╕рднреА "рдФрд░" рдЕрднреА "_" рд╣реИрдВред

рдпрд╣ 2.0.8 рдореЗрдВ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдереА / рд╣реИ:

  • 'рдФрд░' рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдиреЙрди рдмреНрд░реЗрдХрд┐рдВрдЧ рд╕реНрдкреЗрд╕ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░реЗрдВред

@acgtyrant рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ 2.0.9 рд╕реНрдерд╛рдкрд┐рдд рд╣реИ?

рд░рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Token.Generic.Prompt рдмрд╛рдж рдХреБрдЫ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: https://github.com/powerline/powerline/blob/5d82d544f3366a214732aeb8f78dd50ced38ceef/powerline/renderers/ipython/since_5.py#L1121

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯреЛрдХрди рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░реЗрдВрдбрд░рд░реНрд╕ / рдЖрдИрдкреАрдереЙрди / рдЪреВрдВрдХрд┐_5 рдереНрд░реАрдбреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╕реНрдЯрдо DynamicStyle рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рди рддреЛ get_attrs_for_token рдФрд░ рди рд╣реА get_token_to_attributes_dict рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; https://github.com/prompt-toolkit/python-prompt-toolkit/commit/c32f3783a76e6b72d53acda0b6c4a15ef13bed3b3 рджреЗрдЦрдХрд░ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЙрдореНрдкреНрдЯ_рдЯреВрд▓рдХрд┐рдЯ рдЕрдм get_attrs_for_token рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди get_attrs_for_style_str рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд░рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ (рдмрд╣реБрдд рд╣реИрдбреА) рд╕рдорд╛рдзрд╛рди рд╣реИ: hl рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╣рд╛рдЗрд▓рд╛рдЗрдЯреНрд╕ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ, рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЙрдореНрдкреНрдЯ_рдЯреВрд▓рдХрд┐рдЯ-рд╢реИрд▓реА рдкреНрд░рд╛рд░реВрдк рдЬреЛрдбрд╝реЗ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрди рдирдП рдЬреЛрдбрд╝реЗ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╢реИрд▓реА рдХреЗ рдирд┐рдпрдореЛрдВ рд╕реЗ рдЬреЛрдбрд╝ рджреЗрдВред

    <strong i="7">@property</strong>
    def style_rules(self):

class PowerlinePromptStyle(DynamicStyle): ред

Screenshot_2019-04-04_18-41-31
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдореБрдЭреЗ рдЕрднреА рднреА рдХреЛрдб рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

@ PH111P - рдорд╣рд╛рди рдХрд╛рдо, рдЦрд░рдЧреЛрд╢ рдЫреЗрдж рдореЗрдВ рдЧреЛрддрд╛

рддреЛ рджреЛрдиреЛрдВ рдирдИ рд╕рдорд╕реНрдпрд╛рдПрдВ (рд▓рд╛рдкрддрд╛ рд░рдВрдЧ рдФрд░ "&" / "_") рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИрдВ
рд╕рдВрд╕реНрдХрд░рдг 2 рдореЗрдВ рдкреНрд░реЙрдореНрдкреНрдЯ-рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдиреНрдирдпрди?

рддреЛ рджреЛрдиреЛрдВ рдирдИ рд╕рдорд╕реНрдпрд╛рдПрдВ (рд▓рд╛рдкрддрд╛ рд░рдВрдЧ рдФрд░ "&" / "_") рдХреЗ рдХрд╛рд░рдг рд╣реЛрддреА рд╣реИрдВ
рд╕рдВрд╕реНрдХрд░рдг 2 рдореЗрдВ рдкреНрд░реЙрдореНрдкреНрдЯ-рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдиреНрдирдпрди?

рд╣рд╛рдБ рдореИрдВ рдпрд╣реА рд╕реЛрдЪрддрд╛ рд╣реВрдБред

рд╢рд╛рдпрдж рдЧрд╛рдЗрдб "рдкреНрд░реЙрдореНрдкреНрдЯ_рдЯреНрдпреВрдЯрдХрд┐рдЯ 2.0 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб" рдХрд┐рд╕реА рднреА рдорджрдж рдХрд╛ рд╣реИ
рдЪреВрдБрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:

https://python-prompt-toolkit.readthedocs.io/en/master/pages/upmission.html#pyolution -styles-and-token

рд░рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ https://github.com/PH111P/powerline/blob/develop/powerline/renderers/ipython/since_7.py
Nbsp рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреЙрдиреНрдлрд┐рдЧ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ ( "use_non_breaking_spaces": false рд╕реЗрдЯ рдХрд░рдХреЗ) рдЕрдХреНрд╖рдо рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред

@GHPS рдореИрдВрдиреЗ

рд░рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдорд╣рд╛рди - рдЖрдкрдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред iPython рдФрд░ Powerline рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ!
рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдЗрд╕реЗ рдЫрд╛рдВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж ...

рдХреНрдпрд╛ рдЖрдкрдХреЛ VI рдореЛрдб рд╕рдВрдХреЗрддрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ
рднреА? рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ ...

рдореИрдВ рд░рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рдг рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ IPython рдореЗрдВ рдЕрднреА рднреА _ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред

2019-04-05-220405_165x64_scrot

рдореИрдВ рд░рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рдг рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ IPython рдореЗрдВ рдЕрднреА рднреА _ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред

2019-04-05-220405_165x64_scrot

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдзреНрд╡рдЬ рдХреЗрд╡рд▓ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд┐рд╖рдп рд╕реНрддрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рд╕реНрд░реЛрдд рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП); рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ nbsp рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ipython рд░реЗрдВрдбрд░рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ class IPythonPygmentsRenderer(IPythonRenderer): рд▓рд┐рдП рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
(рдЗрд╕ рдмрд╛рд░ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдлрд┐рд░ рд╕реЗ рдЦреЗрдж рд╣реИ рдХрд┐ рджреВрд╕рд░реА рдЪреАрдЬрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИ; рдпрд╣ рднреА рджреЗрдЦреЗрдВ https://github.com/PH111P/powerline/blob/develop/powerline/renderers/ipython/since/7.py)

    def __init__(self, **kwargs):
        super(IPythonPygmentsRenderer, self).__init__(**kwargs)
        self.character_translations[ord(' ')] = ' '

рдХреНрдпрд╛ рдЖрдкрдХреЛ VI рдореЛрдб рд╕рдВрдХреЗрддрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ
рднреА? рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧрд╛рдпрдм рд╣реИ ...

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЙрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЦрдВрдб рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдкреВрд░реНрдг-рдЦрдВрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ (рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдмреЗрд╢рд░реНрдореА рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ ipython рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЪреБрд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/ipython/ipython-blob/4f901de17aff2132365fc3741fc5b8b9b8b9) /IPython/terminal/prompts.py#L16):

<strong i="9">@requires_segment_info</strong>
def vi_mode(pl, segment_info):
    ipython = segment_info['ipython']._shell
    if (getattr(ipython.pt_app, 'editing_mode', None) == 'VI'
            and ipython.prompt_includes_vi_mode):
        return str(ipython.pt_app.app.vi_state.input_mode)[3:6]
    else:
        return None

Screenshot_2019-04-06_07-31-01

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ: /ред рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ipython рдореЗрдВ vi рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
EDIT 2 : рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдлрд┐рдХреНрд╕реНрдб: https://github.com/PH111P/powerline/blob/448e73b41d61ab6617e86c1f7cfee3db19138700/powerline/bindings/ipython/since_7.py#L6969

@ PH111P - рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп!

рдлрд┐рд▓рд┐рдк рдХреЗ (рдЙрд░реНрдл @ PH111P ) рдорд╣рд╛рди рдХрд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдПрдХ рд╕рд╡рд╛рд▓ рдЦрдбрд╝рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ --simple-prompt рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

#!since_5.py

$ ipython
Python 2.7.15+ (default, Nov 27 2018, 23:36:35) 
Type "copyright", "credits" or "license" for more information.

IPython 5.8.0.dev -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

┬аIn┬а[1]┬атЦ╢┬а                                                                                                                                                                                                         
Do you really want to exit ([y]/n)? y
#!since_7.py

$┬аipython3
Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.6.0.dev -- An enhanced Interactive Python. Type '?' for help.

 In [1] тЦ╢                                                                                                                                                                                                          
Do you really want to exit ([y]/n)? y



md5-9ccbec5ae4eaf34d991b332b2f93161f



``` bash
#!since_7.py

$ ipython3 --simple-prompt
Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.6.0.dev -- An enhanced Interactive Python. Type '?' for help.

 In [1] тЦ╢

рдкреАрдЖрд░ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рд╛рдкреНрдп рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?

рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ ( --simple-prompt рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк @teracamo рдХрд╛ рдХреНрдпрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, PR рдХрд╛ рдЕрднреА рддрдХ рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ # 2012 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ; рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреАрдЖрд░ рдореЗрдВ рдЕрднреА рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдХрдореА рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)

рдУрд╣, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рднреА рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкреАрдЖрд░ рдХреЛ рдорд░реНрдЬ рдХрд░ рджреА рдЬрд╛рдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг ipython = 7.0 рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рдЕрднреА рддрдХ рдкреАрдЖрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ --simple-prompt рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЗрд╕реЗ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдХрд░реВрдВрдЧрд╛ред

@alabamagan рдХреИрд╕рд╛ рд╣реИ https://github.com/powerline/powerline/pull/2048 ?

рдЬрдм рддрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП develop рд╢рд╛рдЦрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрд╣ master рд╕реЗ рдХрдо рд╕реНрдерд┐рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдзрдбрд╝рдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

pip install --user 'git+https://github.com/powerline/powerline.git@develop#powerline'

рдлрд┐рд░, рдЕрдкрдиреЗ ipython config рдореЗрдВ, since_5 рд╕реЗ since_7 , рдЗрд╕ рддрд░рд╣ рдмрджрд▓реЗрдВ:

from powerline.bindings.ipython.since_7 import PowerlinePrompts
c.TerminalInteractiveShell.simple_prompt = False
c.TerminalInteractiveShell.prompts_class = PowerlinePrompts

рдЬрдм рддрдХ рд╡реЗ рд░рд┐рд╣рд╛ рди рд╣реЛрдВ, рддрдм рддрдХ рдХреИрд╕реЗ?

рд╢рд╛рдпрдж рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдЕрдВрддрд┐рдо рд░рд┐рд▓реАрдЬ 2 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реИред

рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред 2.8-1 рдореЗрдВ рдкрд╛рд╡рд░рд▓рд╛рдЗрди рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореБрдЭреЗ рдЗрд╕ рдмрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпреЛрдВред



 19:05:12 юВ░ ~ юВ░
$ ipython                                                                                           юВ▓ otakutyrant юВ▓ PC
Python 3.8.2 (default, Apr  8 2020, 14:31:25)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help.

Traceback (most recent call last):
  File "/usr/bin/ipython", line 5, in <module>
    start_ipython()
  File "/usr/lib/python3.8/site-packages/IPython/__init__.py", line 126, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
  File "/usr/lib/python3.8/site-packages/traitlets/config/application.py", line 664, in launch_instance
    app.start()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/ipapp.py", line 356, in start
    self.shell.mainloop()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 559, in mainloop
    self.interact()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 542, in interact
    code = self.prompt_for_code()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 468, in prompt_for_code
    text = self.pt_app.prompt(
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/shortcuts/prompt.py", line 994, in prompt
    return self.app.run(set_exception_handler=set_exception_handler)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 811, in run
    return loop.run_until_complete(
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 778, in run_async
    return await _run_async2()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 760, in _run_async2
    result = await _run_async()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 686, in _run_async
    self._redraw()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 523, in _redraw
    self.context.run(run_in_context)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 509, in run_in_context
    self.renderer.render(self, self.layout)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/renderer.py", line 581, in render
    self.style.invalidation_hash() != self._last_style_hash
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/style.py", line 398, in invalidation_hash
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/style.py", line 398, in <genexpr>
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/powerline/renderers/ipython/since_5.py", line 79, in invalidation_hash
    return super(PowerlinePromptStyle, self).invalidation_hash() + 1
TypeError: can only concatenate tuple (not "int") to tuple

If you suspect this is an IPython 7.14.0 bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at [email protected]

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    %config Application.verbose_crash=True


 19:05:15 юВ░ тЬШ юВ░ ~ юВ░
$ pacman -Qi powerline                                                                              юВ▓ otakutyrant юВ▓ PC
Name            : powerline
Version         : 2.8-1
Description     : Statusline plugin for vim, and provides statuslines and prompts for several other applications,
                  including zsh, bash, tmux, IPython, Awesome, i3 and Qtile
Architecture    : x86_64
URL             : https://github.com/powerline/powerline
Licenses        : MIT
Groups          : None
Provides        : None
Depends On      : python-powerline
Optional Deps   : None
Required By     : None
Optional For    : None
Conflicts With  : powerline2  python-powerline<=2.3-1
Replaces        : python-powerline<=2.3-1
Installed Size  : 28.39 KiB
Packager        : Jiachen YANG <[email protected]>
Build Date      : Mon 18 May 2020 01:55:40 PM CST
Install Date    : Tue 19 May 2020 06:55:56 PM CST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature


 19:09:25 юВ░ ~ юВ░
$                                                                                                   юВ▓ otakutyrant юВ▓ PC

/usr/lib/python3.8/site-packages/powerline/renderers/ipython/since_7.py рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред

рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред 2.8-1 рдореЗрдВ рдкрд╛рд╡рд░рд▓рд╛рдЗрди рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореБрдЭреЗ рдЗрд╕ рдмрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпреЛрдВред



 19:05:12 юВ░ ~ юВ░
$ ipython                                                                                           юВ▓ otakutyrant юВ▓ PC
Python 3.8.2 (default, Apr  8 2020, 14:31:25)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help.

Traceback (most recent call last):
  File "/usr/bin/ipython", line 5, in <module>
    start_ipython()
  File "/usr/lib/python3.8/site-packages/IPython/__init__.py", line 126, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
  File "/usr/lib/python3.8/site-packages/traitlets/config/application.py", line 664, in launch_instance
    app.start()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/ipapp.py", line 356, in start
    self.shell.mainloop()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 559, in mainloop
    self.interact()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 542, in interact
    code = self.prompt_for_code()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 468, in prompt_for_code
    text = self.pt_app.prompt(
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/shortcuts/prompt.py", line 994, in prompt
    return self.app.run(set_exception_handler=set_exception_handler)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 811, in run
    return loop.run_until_complete(
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 778, in run_async
    return await _run_async2()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 760, in _run_async2
    result = await _run_async()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 686, in _run_async
    self._redraw()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 523, in _redraw
    self.context.run(run_in_context)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 509, in run_in_context
    self.renderer.render(self, self.layout)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/renderer.py", line 581, in render
    self.style.invalidation_hash() != self._last_style_hash
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/style.py", line 398, in invalidation_hash
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/style.py", line 398, in <genexpr>
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/powerline/renderers/ipython/since_5.py", line 79, in invalidation_hash
    return super(PowerlinePromptStyle, self).invalidation_hash() + 1
TypeError: can only concatenate tuple (not "int") to tuple

If you suspect this is an IPython 7.14.0 bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at [email protected]

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    %config Application.verbose_crash=True


 19:05:15 юВ░ тЬШ юВ░ ~ юВ░
$ pacman -Qi powerline                                                                              юВ▓ otakutyrant юВ▓ PC
Name            : powerline
Version         : 2.8-1
Description     : Statusline plugin for vim, and provides statuslines and prompts for several other applications,
                  including zsh, bash, tmux, IPython, Awesome, i3 and Qtile
Architecture    : x86_64
URL             : https://github.com/powerline/powerline
Licenses        : MIT
Groups          : None
Provides        : None
Depends On      : python-powerline
Optional Deps   : None
Required By     : None
Optional For    : None
Conflicts With  : powerline2  python-powerline<=2.3-1
Replaces        : python-powerline<=2.3-1
Installed Size  : 28.39 KiB
Packager        : Jiachen YANG <[email protected]>
Build Date      : Mon 18 May 2020 01:55:40 PM CST
Install Date    : Tue 19 May 2020 06:55:56 PM CST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature


 19:09:25 юВ░ ~ юВ░
$                                                                                                   юВ▓ otakutyrant юВ▓ PC

/usr/lib/python3.8/site-packages/powerline/renderers/ipython/since_7.py рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред

рдЖрдкрдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП

from powerline.bindings.ipython.since_7 import PowerlinePrompts
c.TerminalInteractiveShell.prompts_class = PowerlinePrompts

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред https://github.com/powerline/powerline/blob/develop/docs/source/usage/other.rst
рдбреЙрдХреНрдЯрд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рдпрд╣ рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдПрдХ рдирдИ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред 2.8-1 рдореЗрдВ рдкрд╛рд╡рд░рд▓рд╛рдЗрди рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдореБрдЭреЗ рдЗрд╕ рдмрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпреЛрдВред



 19:05:12 юВ░ ~ юВ░
$ ipython                                                                                           юВ▓ otakutyrant юВ▓ PC
Python 3.8.2 (default, Apr  8 2020, 14:31:25)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.14.0 -- An enhanced Interactive Python. Type '?' for help.

Traceback (most recent call last):
  File "/usr/bin/ipython", line 5, in <module>
    start_ipython()
  File "/usr/lib/python3.8/site-packages/IPython/__init__.py", line 126, in start_ipython
    return launch_new_instance(argv=argv, **kwargs)
  File "/usr/lib/python3.8/site-packages/traitlets/config/application.py", line 664, in launch_instance
    app.start()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/ipapp.py", line 356, in start
    self.shell.mainloop()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 559, in mainloop
    self.interact()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 542, in interact
    code = self.prompt_for_code()
  File "/usr/lib/python3.8/site-packages/IPython/terminal/interactiveshell.py", line 468, in prompt_for_code
    text = self.pt_app.prompt(
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/shortcuts/prompt.py", line 994, in prompt
    return self.app.run(set_exception_handler=set_exception_handler)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 811, in run
    return loop.run_until_complete(
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 778, in run_async
    return await _run_async2()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 760, in _run_async2
    result = await _run_async()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 686, in _run_async
    self._redraw()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 523, in _redraw
    self.context.run(run_in_context)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/application/application.py", line 509, in run_in_context
    self.renderer.render(self, self.layout)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/renderer.py", line 581, in render
    self.style.invalidation_hash() != self._last_style_hash
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/style.py", line 398, in invalidation_hash
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/style.py", line 398, in <genexpr>
    return tuple(s.invalidation_hash() for s in self.styles)
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/prompt_toolkit/styles/base.py", line 177, in invalidation_hash
    return (self.get_style() or self._dummy).invalidation_hash()
  File "/usr/lib/python3.8/site-packages/powerline/renderers/ipython/since_5.py", line 79, in invalidation_hash
    return super(PowerlinePromptStyle, self).invalidation_hash() + 1
TypeError: can only concatenate tuple (not "int") to tuple

If you suspect this is an IPython 7.14.0 bug, please report it at:
    https://github.com/ipython/ipython/issues
or send an email to the mailing list at [email protected]

You can print a more detailed traceback right now with "%tb", or use "%debug"
to interactively debug it.

Extra-detailed tracebacks for bug-reporting purposes can be enabled via:
    %config Application.verbose_crash=True


 19:05:15 юВ░ тЬШ юВ░ ~ юВ░
$ pacman -Qi powerline                                                                              юВ▓ otakutyrant юВ▓ PC
Name            : powerline
Version         : 2.8-1
Description     : Statusline plugin for vim, and provides statuslines and prompts for several other applications,
                  including zsh, bash, tmux, IPython, Awesome, i3 and Qtile
Architecture    : x86_64
URL             : https://github.com/powerline/powerline
Licenses        : MIT
Groups          : None
Provides        : None
Depends On      : python-powerline
Optional Deps   : None
Required By     : None
Optional For    : None
Conflicts With  : powerline2  python-powerline<=2.3-1
Replaces        : python-powerline<=2.3-1
Installed Size  : 28.39 KiB
Packager        : Jiachen YANG <[email protected]>
Build Date      : Mon 18 May 2020 01:55:40 PM CST
Install Date    : Tue 19 May 2020 06:55:56 PM CST
Install Reason  : Explicitly installed
Install Script  : No
Validated By    : Signature


 19:09:25 юВ░ ~ юВ░
$                                                                                                   юВ▓ otakutyrant юВ▓ PC

/usr/lib/python3.8/site-packages/powerline/renderers/ipython/since_7.py рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред

рдЖрдкрдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП

from powerline.bindings.ipython.since_7 import PowerlinePrompts
c.TerminalInteractiveShell.prompts_class = PowerlinePrompts

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ред https://github.com/powerline/powerline/blob/develop/docs/source/usage/other.rst
рдбреЙрдХреНрдЯрд░ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдбреЙрдХреНрд╕ рдХрд╛рдлреА рдкреБрд░рд╛рдиреЗ рд╣реИрдВ (рдЕрдВрддрд┐рдо рдирд┐рд░реНрдорд╛рдг ~ 1.5 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдХреЙрдиреНрдлрд┐рдЧ, рд╕реЙрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдВрдЪрдиреЗ / рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

@ PH111P рдХреГрдкрдпрд╛ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдХреЛ PyPI рдкрд░ рднреА рдзрдХреЗрд▓реЗрдВред рдпрд╣ рдЕрднреА рднреА рдХреЗрд╡рд▓ рд╕рдВрд╕реНрдХрд░рдг 2.7 рд╣реИ ...

рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред
рдЗрд╕ рдмреАрдЪ, рдЖрдк pip install git+https://github.com/powerline/powerline.git@develop рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

avermaet picture avermaet  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sachevl picture sachevl  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kataev picture kataev  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

paul-tcell picture paul-tcell  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ