将颜色添加到新样式ipython(v5)提示符

时间:2016-07-08 21:22:59

标签: python python-3.x ipython

立即更新到新发布的ipython5。启动交互式提示并收到:

/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'

拉出我的旧配置设置来自定义和着色提示,然后寻找新的方式来自定义提示并找到它,非常酷。使用了example code

中的新类样式
class MyPrompt(Prompts):
    def in_prompt_tokens(self, cli=None):
        return [(Token, os.getcwd()),
                (Token.Prompt, ' >>>')]

将它放入一个启动脚本中并且效果很好,但默认情况下它不会使令牌行着色,Token.Prompt会变为浅绿色。

尝试使用旧的配置方法颜色(r' {color.Green}'),但这不起作用。任何正确方向的指针都会很棒。

谢谢!

2 个答案:

答案 0 :(得分:5)

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)
"""

我用这个脚本试验了各种提示。它包括默认的in_prompt_tokens方法,示例自定义和一些备选方案。最后一个模仿我的bash提示

73:~/mypy$ 

看起来元组(Token..., str)根据token_type设置字符串的颜色。 TokenToken.PromptToken.PromptNum是可能的类型。请查看Token.<tab>了解更多内容(例如OutPrompt(Num))。

IPython/terminal/prompts.py

我可能不会使用其中任何一个,因为我喜欢默认的匹配In /Out对。此外,我可以使用--term-title在标签标题中显示目录。

答案 1 :(得分:2)

显示如何用红色为提示着色的简单示例:

from IPython.terminal.prompts import Token

ipy_config = get_config()

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

根据环境变量更改提示颜色的更高级示例(如果您使用登台/实时系统进行大量操作,则非常有用):

# 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