2013-01-02 4 views
14

IPython에서 텍스트의 색을 사용자 지정하고 싶지만 어떻게해야할지 모르겠습니다.IPython에서 텍스트 색상을 사용자 정의하려면 어떻게해야합니까?

내가 파이썬에서, 내가 PromptManager.in_template를 사용하여, ANSI 컬러 코드 등

sys.ps1=">>> \001\033[0m\033[34m\002" 

그러나 해당 접근 sys.ps1sys.ps2를 종료하여이 작업을 수행 할 수 있다는 것을 알고, IPython 작동하지 않습니다. 예를 들어

c = get_config() 
c.PromptManager.in_template = 'In [{count}] : {color.Blue}' 

은 프롬프트 후 텍스트 색상에 영향을주지 않습니다.

IPython에서 텍스트의 색상을 변경하는 방법이 있습니까?

답변

7

프롬프트 입력 explicitly setscolors.in_normal에 대한 프롬프트. 입력 색상을 변경하려면이 색상을 변경해야합니다.

사용자 설정 색 구성표는 계속해서 작업 목록에 있습니다 (매우 간단하고 우선 순위가 높지 않아야 함).

당신이 무엇을 보인다 다소 hackish 예는 설정 파일에 입력 및/또는 출력 텍스트의 색상을 변경하려는 : 텍스트의 색상이 프롬프트를 일치하도록

from IPython.utils import coloransi 
from IPython.core import prompts 

termcolors = coloransi.TermColors() # the color table 
# IPython's two color schemes: 
dark = prompts.PColLinux.colors 
light = prompts.PColLightBG.colors 

# colors.in_normal affects input code 
dark.in_normal = termcolors.Green 
light.in_normal = termcolors.Blue 
# colors.normal affects output 
dark.normal = light.normal = termcolors.Red 

이 그것을 설정합니다 물론 원하는 것은 무엇이든 선택할 수 있습니다.

+0

우리가 어떻게 Windows에서이 작업을 수행 할 것입니다 : 그래서 여기

가 사용될 수있는 모든 토큰의 목록을, 어떻게 할입니까? 내가 뭔가를 놓칠 수도 있지만, iPython의 특정 설치에 대한 개체 프롬프트가 없습니다. PColLinux – Stephen

+2

나는 IPython 6.1.0을 사용하고 있으며'prompts.PColLinux' 또는'prompts.PColLinuxBG'도 없습니다. 외견 상,이 서브 시스템은 IPython 5 (또는 그 근처)에 다시 쓰여졌 고 아직 최신 버전에서는 그와 같은 것을 찾을 수 없다. – meowsqueak

+0

@minrk 멍청한 질문에 대해 유감스럽게 생각하지만 config.py를 어디에 저장해야합니까? – JinSnow

0

경고 :이 대답 IPython5.5.0 만 호환 가능하고 IPython6+ 잘 번역하지 않는 것 같습니다.

IPython 5.5.0부터 타겟이 지정된 프로필 폴더의 ipython_config.py 덕분에 모든 스타일 색상을 무시할 수 있습니다. (예 : default 프로파일의 경우 ~/.ipython/profile_default, Linux의 경우 일반적인 설치).

IPython 코드는 채색과 관련하여 상당히 엉망이며 파서, 디버거, 대화 형 셸에 여러 가지 방법이 사용됩니다. 일부는 Pygments을 사용하고 다른 일부는 16 색 팔레트로 제한되는 ANSI 이스케이프 코드를 제공합니다.

해결책은 훌륭하지 않지만 작동합니다. 다른 예쁜 방법이 있다면 제게 의견을 말 해주세요!

또한 내 솔루션에는 기본 팔레트를 확장하여 IPython 색칠의 모든 부분에 256 색 이상을 사용할 수있는 기능이 포함되어 있습니다. 다음 코드에서 256 색으로 확장하는 방법의 예가 있습니다.

## 
## Basic color scheme that will be modified 
## 

colorLabel = 'Linux' 
c.InteractiveShell.colors = colorLabel 


from pygments.token import Token, Keyword, Name, Comment, String, Error, \ 
    Number, Operator, Generic, Whitespace 

c.TerminalInteractiveShell.highlighting_style_overrides = { 

    ## Standard Pygments tokens (are all used by IPython ?) 

    Whitespace:    "#bbbbbb", 
    Comment:     "italiC#008800", 
    Comment.Preproc:   "noitalic", 
    Comment.Special:   "noitalic bold", 

    Keyword:     "bold #AA22FF", 
    Keyword.Pseudo:   "nobold", 
    Keyword.Type:    "bold #00BB00", 

    Operator:     "#666666", 
    Operator.Word:    "bold #AA22FF", 

    Name.Builtin:    "#fff", #""#AA22FF", 
    Name.Function:    "#00A000", 
    Name.Class:    "#0000FF", 
    Name.Namespace:   "bold #0000FF", 
    Name.Exception:   "bold #D2413A", 
    Name.Variable:    "#B8860B", 
    Name.Constant:    "#880000", 
    Name.Label:    "#A0A000", 
    Name.Entity:    "bold #999999", 
    Name.Attribute:   "#BB4444", 
    Name.Tag:     "bold #008000", 
    Name.Decorator:   "#AA22FF", 

    String:     "#BB4444", 
    String.Doc:    "italic", 
    String.Interpol:   "bold #BB6688", 
    String.Escape:    "bold #BB6622", 
    String.Regex:    "#BB6688", 
    String.Symbol:    "#B8860B", 
    String.Other:    "#008000", 
    Number:     "#666666", 

    Generic.Heading:   "bold #000080", 
    Generic.Subheading:  "bold #800080", 
    Generic.Deleted:   "#A00000", 
    Generic.Inserted:   "#00A000", 
    Generic.Error:    "#FF0000", 
    Generic.Emph:    "italic", 
    Generic.Strong:   "bold", 
    Generic.Prompt:   "bold #000080", 
    Generic.Output:   "#888", 
    Generic.Traceback:   "#04D", 

    Error:      "border:#ff0000", 

    ## IPython 

    Token.Number: '#ffffff', 
    Token.Operator: 'noinherit', 
    Token.String: '#8b8', 
    Token.Name.Function: '#2080D0', 
    Token.Name.Class: 'bold #2080D0', 
    Token.Name.Namespace: 'bold #2080D0', 
    Token.Prompt: '#ffffff bold', 
    Token.PromptNum: '#888888 bold', 
    Token.OutPrompt: '#008b8b bold', 
    Token.OutPromptNum: '#006b6b bold', 
} 


from IPython.core import excolors, ultratb, debugger 
from IPython.core.excolors import exception_colors as exception_colors_orig 

## 
## Add new color labels here before attributing them 
## 


from IPython.utils import coloransi 

coloransi.color_templates = (
    # Dark colors 

    ("Black"  , "0;30"), 
    ("Red"   , "0;31"), 
    ("Green"  , "0;32"), 
    ("Brown"  , "0;33"), 
    ("Blue"  , "0;34"), 
    ("Purple"  , "0;35"), 
    ("Cyan"  , "0;36"), 
    ("LightGray" , "0;37"), 

    # Light colors 
    ("DarkGray" , "1;30"), 
    ("LightRed" , "1;31"), 
    ("LightGreen" , "1;32"), 
    ("Yellow"  , "1;33"), 
    ("LightBlue" , "1;34"), 
    ("LightPurple" , "1;35"), 
    ("LightCyan" , "1;36"), 
    ("White"  , "1;37"), 

    ## 256-colors 

    ("Green108", "38;5;108"), 
) 

coloransi.make_color_table(coloransi.TermColors) 
coloransi.make_color_table(coloransi.InputTermColors) 

for name, value in coloransi.color_templates: 
    setattr(coloransi.NoColors, name, '') 


C = coloransi.TermColors 
IC = coloransi.InputTermColors 


def exception_colors(): 

    ex_colors = exception_colors_orig() 

    ex_colors.add_scheme(coloransi.ColorScheme(
     colorLabel, 

     # The color to be used for the top line 
     topline=C.LightRed, 

     # The colors to be used in the traceback 
     filename=C.Green, 
     lineno=C.DarkGray, 
     name=C.Purple, 
     vName=C.Cyan, 
     val=C.White, 
     em=C.LightCyan, 

     # Emphasized colors for the last frame of the traceback 
     normalEm=C.LightCyan, 
     filenameEm=C.Green, 
     linenoEm=C.Normal, 
     nameEm=C.LightPurple, 
     valEm=C.LightGreen, 

     # Colors for printing the exception 
     excName=C.Red, 
     line=C.Yellow, 
     caret=C.White, 
     Normal=C.Normal 
    )) 
    return ex_colors 

excolors.exception_colors = exception_colors 
ultratb.exception_colors = exception_colors 
debugger.exception_colors = exception_colors 


## 
## Parser color (source code colors) 
## 

from IPython.utils import PyColorize 
import token 
import tokenize 

PyColorize.ANSICodeColors[colorLabel] = coloransi.ColorScheme(
    colorLabel, { 
     'header'   : C.LightRed, 
     token.NUMBER  : C.LightCyan, 
     token.OP   : C.Normal, 
     token.STRING  : C.Green108, 
     tokenize.COMMENT : C.LightGray, 
     token.NAME  : C.Normal, 
     token.ERRORTOKEN : C.Red, 

     PyColorize._KEYWORD   : C.White, 
     PyColorize._TEXT   : C.Yellow, 

     ## Keep IC here, you can use other colors 

     'in_prompt'  : IC.Green, 
     'in_number'  : IC.LightGreen, 
     'in_prompt2'  : IC.Green, 
     'in_normal'  : IC.Normal, # color off (usu. Colors.Normal) 

     'out_prompt'  : C.Red, 
     'out_number'  : C.LightRed, 

     'normal'   : C.Normal # color off (usu. Colors.Normal) 
}) 
+0

방금 ​​ipxthon 6.2.1 (파이썬 3.6.2)을 사용하여 rxvt-unicode-256color 내에서 솔루션을 시도했지만 부분적으로 작동하는 것 같습니다 .- 기본 "Linux"체계에서 다른 색상을 얻었지만 이상하지 않습니다. 예를 들어, 프롬프트는 매우 엷은 초록색이며 연한 파란색 - 회색 숫자 부분을 가지고 있지만 '가져 오기'와 같은 키워드는 굵은 자홍색이고 'def'는 굵은 파란색입니다. 당신이 뭘 해야하는지에 대한 스크린 샷이 있습니까? – meowsqueak

+0

@ meowsqueak 시험에 감사드립니다. 색이 실제로 바뀌지 만 예상했던 색을 얻지 못하는 것은 실제로 이상합니다. 여기서 잘 만들어진 일련의 색을 공유하지는 않았지만 선택한 색을 약간 변경 한 Linux 체계 만이 항목에서''import'' 키워드는 밝은 흰색이어야합니다. 글쎄, 지금은 IPython 6+에서 무슨 일이 일어나는지 확인할 시간이 없지만 IPython 5.5에서는 작동하지만 IPython 6+에서는 작동하지 않는다는 경고를 명확하게 추가했습니다. – vaab

관련 문제