gpt4 book ai didi

python - 如何在 IPython 提示中重用现有的 sys.ps1 格式化程序?

转载 作者:太空狗 更新时间:2023-10-30 00:09:02 25 4
gpt4 key购买 nike

我有一个函数 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 的内部着色方案,但是有没有办法强制它使用 shell 的颜色代码而不转义它们?

虽然 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 $ '

最佳答案

IPython shell 建立在 prompt-toolkit 之上,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 运行它:

enter image description here

关于python - 如何在 IPython 提示中重用现有的 sys.ps1 格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51812883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com