我有一个函数f
,它为python生成PS1提示符,设置如下:
sys.ps1 = f
按照the documentation中的说明进行操作,最后得到以下内容:
from IPython.terminal.prompts import Prompts, Token
from IPython import get_ipython
class MyPrompt(Prompts):
def in_prompt_tokens(self, cli=None):
return [(Token, f())]
ipython = get_ipython()
ipython.prompts = MyPrompt(ipython)
但是,这不起作用,因为f
返回带有颜色代码的字符串,python
直接打印到终端,导致彩色提示,而ipython
打印则转义,导致产生一串转义码。
我知道我可以重新配置f
以使用ipython的内部着色方案,但是有没有办法强迫它使用外壳的颜色代码而不逃避它们呢?
虽然f
是一个考虑到其环境信息的函数,但是这里的一个实现在一种情况下显示了它的输出(它在后台使用了colorama,所以这只是unix系统上的输出)。
def f():
return '\x01\x1b[1m\x1b[33m\x02kavi\x01\x1b[0m\x02 \x01\x1b[38;5;214m\x02/home\x01\x1b[38;5;82m\x02/kavi\x01\x1b[38;5;28m\x02\x01\x1b[0m\x02 \x01\x1b[38;5;38m\x02master\x01\x1b[0m\x02 $ '
答案 0 :(得分:3)
IPython Shell构建于提示工具包上,its style可以被TerminalInteractiveShell._style
覆盖:
from prompt_toolkit.styles import style_from_dict
from IPython.terminal.prompts import Prompts, Token
from IPython import get_ipython
style = style_from_dict({
Token.User: '#f8ea6c',
Token.Path_1: '#f08d24',
Token.Path_2: '#67f72f',
Token.Git_branch: '#1cafce',
Token.Pound: '#000',
})
class MyPrompt(Prompts):
def in_prompt_tokens(self, cli=None):
return [
(Token.User, 'kavi '),
(Token.Path_1, '/home'),
(Token.Path_2, '/kavi'),
(Token.Git_branch, ' master '),
(Token.Dollar, '$ '),
]
ipython = get_ipython()
ipython.prompts = MyPrompt(ipython)
ipython._style = style
使用ipython -i colored_ipy_prompt.py
运行它: