Adding Color to new style ipython (v5) prompt

拈花ヽ惹草 提交于 2019-12-18 04:08:26

问题


Update to the newly release ipython5 today. Started up the interactive prompt and received:

/usr/local/lib/python3.5/site-packages/IPython/core/interactiveshell.py:440: UserWarning: As of IPython 5.0 `PromptManager` config will have no effect and has been replaced by TerminalInteractiveShell.prompts_class
warn('As of IPython 5.0 `PromptManager` config will have no effect'

Yanked out my old config settings to customize and colorize the prompt and went looking for the new way to customize the prompt and found it, very cool. Used the new class style from the example code:

class MyPrompt(Prompts):
    def in_prompt_tokens(self, cli=None):
        return [(Token, os.getcwd()),
                (Token.Prompt, ' >>>')]

Put this into a startup script and it works great, except it by default doesn't colorize the Token line, the Token.Prompt is made light green.

Attempted to use the old config method colors, (r'{color.Green}') but that doesn't work here. Any pointers in the correct direction would be great.

Thanks!


回答1:


from IPython.terminal.prompts import Prompts, Token
import os

class MyPrompt(Prompts):

    def in_prompt_tokens(self, cli=None):   # default
        return [
            (Token.Prompt, 'In ['),
            (Token.PromptNum, str(self.shell.execution_count)),
            (Token.Prompt, ']: '),
        ]

    def in_prompt_tokens(self, cli=None):  # sample
        return [(Token, os.getcwd()),
                 (Token.Prompt, ' >>>')]

    def in_prompt_tokens(self, cli=None):   # custom
        path = os.path.basename(os.getcwd())
        return [
            (Token.Prompt, '<'),
            (Token.PromptNum, '~/'+path),
            (Token.Prompt, '>'),
            (Token.Prompt, '['),
            (Token.PromptNum, str(self.shell.execution_count)),
            (Token.Prompt, ']: '),
        ]

    def in_prompt_tokens(self, cli=None):   # custom
        path = os.path.basename(os.getcwd())
        return [
            (Token.PromptNum, str(self.shell.execution_count)),
            (Token.Prompt, ':'),
            (Token.PromptNum, '~/'+path),
            (Token.Prompt, '$ '),
        ]

"""
use:
import myprompt as MP
ip=get_ipython()
ip.prompts=MP.MyPrompt(ip)
"""

I experimented with various prompts with this script. It includes the default in_prompt_tokens method, the example customization and a couple of alternatives. The last imitates my bash prompt

73:~/mypy$ 

In looks like the tuple (Token..., str) sets the color of the string according to the token_type. Token, Token.Prompt, Token.PromptNum are possible types. Look at Token.<tab> for more (such as OutPrompt(Num)).

IPython/terminal/prompts.py

I probably won't use any of these because I like the default matching In /Out pairs. Besides I can use --term-title to show the directory in the tab title.




回答2:


Simple example showing how to color the prompt in red:

from IPython.terminal.prompts import Token

ipy_config = get_config()

ipy_config.TerminalInteractiveShell.highlighting_style_overrides = {
    Token.Prompt: '#ff0000',
}

More advanced example that changes prompt color according to environment variable (useful if you play alot with staging/live systems):

# Example showing how to change color of prompt and prompt string in specific environments.
# put into ~/.ipython/profile_${YOURPROFILE}/ipython_config.py and start ipython with:
# PROFILE_LIVE ipython --profile ${YOURPROFILE}
import os

from IPython.terminal.prompts import Prompts, Token

ipy_config = get_config()


class MyPrompt(Prompts):
    environment = None

    def in_prompt_tokens(self, cli=None):
        return [
            (Token.Prompt, '{} ['.format(MyPrompt.environment)),
            (Token.PromptNum, str(self.shell.execution_count)),
            (Token.Prompt, ']: ')
        ]


if 'PROFILE_LIVE' in os.environ:
    ipy_config.TerminalInteractiveShell.highlighting_style_overrides = {
        Token.Prompt: '#ff0000',
    }
    MyPrompt.environment = 'LIVE'
    ipy_config.TerminalInteractiveShell.prompts_class = MyPrompt


来源:https://stackoverflow.com/questions/38275585/adding-color-to-new-style-ipython-v5-prompt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!