2016-07-08 8 views
9

Aktualisieren Sie das neue Release ipython5 heute. Begann die interaktive Eingabeaufforderung und erhielt:Hinzufügen von Farbe zum neuen Stil ipython (v5) -Prompt

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

meine alte Konfigurationseinstellungen Yanked heraus zu gestalten und die Aufforderung kolorieren und ging für den neuen Weg, um die Eingabeaufforderung und fand es zu gestalten, sehr cool. Verwendet, um die neue Klasse Stil aus dem example code:

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

Setzen Sie dieses in ein Startup-Skript und es funktioniert super, es sei denn es ist standardmäßig einfärben nicht die Token Linie wird die Token.Prompt hellgrün gemacht.

Es wurde versucht, die alten Farben der Konfigurationsmethode zu verwenden (r '{color.Green}'), aber das funktioniert hier nicht. Alle Zeiger in die richtige Richtung wären großartig.

Danke!

+0

Ich mag die Multiline-Bearbeitung dieses neuen Ipython. Es kann einige Zeit dauern, bis Sie sich an das unterschiedliche Tab-Abschlussverhalten gewöhnt haben. – hpaulj

Antwort

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

experimentierte ich mit verschiedenen Eingabeaufforderungen mit diesem Skript. Es enthält die Standardmethode in_prompt_tokens, die Beispielanpassung und einige Alternativen. Die letzte imitiert meine bash Prompt

73:~/mypy$ 

In aussieht wie das Tupel (Token..., str) die Farbe des Saitensätze nach dem token_type. Token, Token.Prompt, Token.PromptNum sind mögliche Typen. Betrachten Sie Token.<tab> für mehr (wie OutPrompt(Num)).

IPython/terminal/prompts.py 

Ich werde wahrscheinlich nicht von diesen verwenden, weil ich die Standard-passende In /Out Paare mögen. Außerdem kann ich --term-title verwenden, um das Verzeichnis im Titel der Registerkarte anzuzeigen.

+0

Mein VIM Autocomplete hat nichts für Token getan. also ging ich weiter. Vom ipython Terminal selbst ausprobiert und davon funktioniert es. Dies half, vielen Dank. –

+1

Fügen Sie die Zeile 'c.InteractiveShell.prompts_class = MyPrompt' zu '~/.ipython/profile_default/ipython_config.py' nach dem obigen hinzu (weil 'get_ipython()' dort 'None' zurückgibt). Danke an https://newton.cx/~peter/2015/11/extensible-prompte-in-jupyter-console/ – denis

0

Einfaches Beispiel zeigt, wie die Eingabeaufforderung in rot zu färben:

from IPython.terminal.prompts import Token 

ipy_config = get_config() 

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

Fortgeschrittenere Beispiel, das die schnelle Farbe ändert sich entsprechend Umgebungsvariable (nützlich, wenn Sie eine Menge mit Staging/Live-Systeme spielen):

# 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 
Verwandte Themen