Добавление цвета в новый стиль ipython (v5)
Обновите новую версию 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'
Я потерял свои старые настройки конфигурации, чтобы настроить и раскрасить приглашение и пошел искать новый способ настроить подсказку и нашел ее очень здорово. Используется новый стиль класса из пример кода:
class MyPrompt(Prompts):
def in_prompt_tokens(self, cli=None):
return [(Token, os.getcwd()),
(Token.Prompt, ' >>>')]
Поместите это в startup script, и он отлично работает, за исключением того, что по умолчанию он не окрашивает линию Token, Token.Prompt сделан светло-зеленым.
Попытка использовать старые методы метода конфигурации (r '{color.Green}'), но это не работает. Любые указатели в правильном направлении были бы большими.
Спасибо!
Ответы
Ответ 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)
"""
Я экспериментировал с различными подсказками с помощью этого script. Он включает в себя метод по умолчанию in_prompt_tokens
, пример настройки и несколько альтернатив. Последний имитирует приглашение bash
73:~/mypy$
Похоже, что кортеж (Token..., str)
устанавливает цвет строки в соответствии с token_type
. Token
, Token.Prompt
, Token.PromptNum
- возможные типы. Посмотрите Token.<tab>
для более (например, OutPrompt(Num)
).
IPython/terminal/prompts.py
Я, вероятно, не буду использовать ни одного из них, потому что мне нравятся пары In /Out
по умолчанию. Кроме того, я могу использовать --term-title
для отображения каталога в заголовке вкладки.
Ответ 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