Adding Color to new style ipython (v5) prompt

后端 未结 2 1496
我在风中等你
我在风中等你 2020-12-16 18:49

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

/usr/local/lib/python3.5/site-packages/IPython/core/interactivesh         


        
相关标签:
2条回答
  • 2020-12-16 19:11
    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.

    0 讨论(0)
  • 2020-12-16 19:20

    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
    
    0 讨论(0)
提交回复
热议问题