2013-01-02 57 views
14

मैं आईपीथन में टेक्स्ट का रंग कस्टमाइज़ करना चाहता हूं, लेकिन मुझे यह सुनिश्चित नहीं है कि इसे कैसे किया जाए।मैं आईपीथन में टेक्स्ट रंग कैसे अनुकूलित करूं?

मैं जानता हूँ कि अजगर में, मैं sys.ps1 और sys.ps2 न खत्म होने वाली इस तरह के रूप

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

एक एएनएसआई रंग कोड लेकिन इसी दृष्टिकोण के साथ, PromptManager.in_template उपयोग करके ऐसा कर सकते हैं कि, IPython के लिए काम नहीं करता। उदाहरण के लिए

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

संकेत के बाद पाठ के रंग पर कोई प्रभाव नहीं पड़ता है।

क्या आईपीथन में टेक्स्ट का रंग बदलने का कोई तरीका है?

उत्तर

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 में ऐसा होगा? मुझे कुछ याद आ रहा है, लेकिन आईपीथॉन की मेरी विशेष स्थापना के लिए कोई ऑब्जेक्ट प्रॉम्प्ट नहीं है। PColLinux – Stephen

+2

मैं आईपीथॉन 6.1.0 का उपयोग कर रहा हूं और इसमें कोई भी संकेत नहीं है। PColLinux' या 'prompts.PColLinuxBG'। दिखने के बाद, इस उपप्रणाली को IPython 5 (या उसके पास) में फिर से लिखा गया था और मुझे अभी तक नवीनतम संस्करणों में समतुल्य कुछ भी नहीं मिला है। – meowsqueak

+0

@minrk बेवकूफ सवाल के लिए खेद है, लेकिन हम उस config.py को कहां से सहेजना चाहिए? – JinSnow

0

चेतावनी: यह उत्तर IPython5.5.0 के साथ ही संगत है और यह IPython6+ साथ अच्छी तरह से अनुवाद करने के लिए प्रतीत नहीं होता। (त्वरित परीक्षण के लिए thx @meowsqueak!)

IPython 5.5.0 के रूप में, आप लक्षित प्रोफाइल फ़ोल्डर में ipython_config.py पर किसी भी स्टाइल रंग का धन्यवाद ओवरराइड कर सकते हैं। (यानी: ~/.ipython/profile_defaultdefault प्रोफ़ाइल के लिए लिनक्स ठेठ इंस्टॉल पर)।

आईपीथन कोड रंगीन से संबंधित एक गड़बड़ है और पार्सर्स, डिबगर्स, इंटरैक्टिव शैल के लिए कई विधियों का उपयोग किया जाता है। कुछ भाग Pygments का उपयोग करते हैं, कुछ अन्य एएनएसआई एस्केप कोड प्रदान करते हैं जो 16 रंग पैलेट तक सीमित हैं।

समाधान सुंदर नहीं है, लेकिन काम करता है। यदि कोई और अन्य सुंदर तरीका है, तो कृपया मुझे टिप्पणी में बताएं!

कृपया ध्यान दें कि मेरे समाधान में डिफ़ॉल्ट पैलेट के विस्तार के लिए धन्यवाद, आईपीथॉन रंग के प्रत्येक भाग के लिए 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

मैंने अभी आरपीवीटी-यूनिकोड -256 रंग के भीतर आईपीथन 6.2.1 (पायथन 3.6.2 के साथ) के साथ अपने समाधान की कोशिश की है और ऐसा लगता है कि यह आंशिक रूप से काम करता है - मुझे डिफ़ॉल्ट "लिनक्स" योजना के साथ अलग-अलग रंग मिलते हैं, लेकिन वे असामान्य हैं। उदाहरण के लिए, प्रॉम्प्ट एक बहुत ही नीला-हरा हरा होता है जिसमें नीली नीली-ग्रे संख्यात्मक भाग होती है, फिर भी 'आयात' जैसे कीवर्ड बोल्ड मैजेंटा होते हैं और 'def' बोल्ड नीला होता है। क्या आपके पास स्क्रीनशॉट है जो इसे दिखाना चाहिए? – meowsqueak

+0

@meowsqueak परीक्षण के लिए धन्यवाद। यह वास्तव में अजीब बात है कि यह वास्तव में रंग बदलता है लेकिन उन रंगों को प्राप्त नहीं करता है जिनकी अपेक्षा की जाती थी। मैंने यहां रंगों का एक अच्छी तरह से तैयार सेट साझा नहीं किया है, लेकिन चुने हुए रंगों में कुछ बदलावों के साथ केवल लिनक्स योजना है, और इस सेट में 'आयात' कीवर्ड को उज्ज्वल सफेद होना चाहिए। खैर, मेरे पास अब आईपीथन 6+ के साथ क्या हो रहा है यह जांचने के लिए समय नहीं है, मैंने स्पष्ट रूप से यह बताने के लिए एक चेतावनी दी है कि यह आईपीथन 5.5 पर काम करता है लेकिन शायद आईपीथन 6+ पर नहीं। – vaab