2016-07-08 12 views
9

Aggiornamento alla nuova versione di ipython5 oggi. Avviato il prompt interattivo e ricevuto:Aggiunta di colore al nuovo prompt di stile ipython (v5)

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

tirato fuori le mie vecchie impostazioni di configurazione per personalizzare e colorare la richiesta e siamo andati alla ricerca di un nuovo modo di personalizzare il prompt e l'ho trovato, molto cool. Utilizzato il nuovo stile di classe dalla example code:

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

mettere questo in uno script di avvio e funziona benissimo, tranne che per default non colorare la linea Token, il Token.Prompt è fatta di colore verde chiaro.

Tentativo di utilizzare i vecchi colori del metodo di configurazione, (r '{color.Green}') ma non funziona qui. Qualsiasi suggerimento nella direzione corretta sarebbe fantastico.

Grazie!

+0

Mi piace l'editing multilinea di questo nuovo Ipython. Potrebbe essere necessario del tempo per abituarsi al diverso comportamento di completamento della tabulazione. – hpaulj

risposta

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

Ho sperimentato vari prompt con questo script. Include il metodo predefinito in_prompt_tokens, la personalizzazione di esempio e un paio di alternative. L'ultima imita la mia bash pronta

73:~/mypy$ 

Nel sembra la tupla (Token..., str) imposta il colore della stringa in base al token_type. Token, Token.Prompt, Token.PromptNum sono possibili tipi. Guarda su Token.<tab> per ulteriori informazioni (ad esempio OutPrompt(Num)).

IPython/terminal/prompts.py 

io probabilmente non userà uno di questi perché mi piace il default corrispondenti In /Out coppie. Inoltre posso usare --term-title per mostrare la directory nel titolo della scheda.

+0

Il completamento automatico del VIM non ha funzionato per il token. quindi sono passato. Provato dal terminale ipython stesso e da quello funziona. Questo ha aiutato, grazie mille. –

+1

Aggiungi la riga 'c.InteractiveShell.prompts_class = MyPrompt' a '~/.ipython/profile_default/ipython_config.py' dopo il precedente (poiché' get_ipython() 'restituisce' None'). Grazie a https://newton.cx/~peter/2015/11/extensible-prompts-in-jupyter-console/ – denis

0

Semplice esempio che mostra come colorare il prompt in rosso:

from IPython.terminal.prompts import Token 

ipy_config = get_config() 

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

Altro esempio avanzato che cambia colore pronta in base alla variabile d'ambiente (utile se si gioca molto con messa in scena/sistemi live):

# 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 
Problemi correlati