2013-01-02 17 views
14

私はIPythonのテキストの色をカスタマイズしたいのですが、それを行う方法がわかりません。IPythonでテキストの色をカスタマイズするにはどうすればよいですか?

は、私はPythonで、私は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

入力の色はcolors.in_normalになります。入力色を変更する場合は、この色を変更する必要があります。

残念ながら、カスタマイズされたカラースキームは依然としてToDoリストにあります(優先度はあまり高くない)。

あなたが設定ファイルに入力および/または出力テキストの色を変更する、したいように見えるものの多少ハック例:

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のおかげで、スタイリングカラーをオーバーライドすることができます。 (すなわち、Linuxの標準インストールでdefaultのプロファイルの場合は~/.ipython/profile_default)。

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

rxvt-unicode-256color内でIPython 6.2.1(python 3.6.2)を使ってあなたのソリューションを試しましたが、部分的に動作するようです。デフォルトの "Linux"スキームとは色が異なりますが、たとえば、プロンプトは非常に薄い青色の灰色の数値部分を持つ非常に薄い緑ですが、 'import'のようなキーワードは太字のマジェンタで、' def'は太い青色です。あなたはそれが見えるべきもののためのスクリーンショットを持っていますか? – meowsqueak

+0

@ meowsqueakテストのために感謝します。それは実際に色を変えるが、期待された色を得ることは実際には奇妙である。私はここでは細工された色のセットを共有しませんでしたが、選択された色をいくつか変更したLinuxスキームのみを使用しました。このセットでは '' import''キーワードは明るい白です。 IPython 6以降で何が起きているのかを確認する時間がありません。IPython 5.5では動作するが、おそらくIPython 6以降ではないことを明示するための警告を追加しました。 – vaab

関連する問題