2017-10-18 11 views
0

파이썬 코드를 실행하고 사용자가 텍스트를 입력하는 동안 input()에서 토큰을 채색하는 Python 테마를 개발하고 싶습니다.pylines을 readline과 함께 사용하여 토큰에 따라 입력 텍스트의 색상을 지정하는 방법은 무엇입니까?

최근에 나는 readline과 pygments를 배우기 시작했습니다.

탭 완성에 키워드 토큰을 추가 할 수 있습니다. 또한 pygments highlight 기능을 사용하여 stdout 텍스트를 색칠 할 수 있습니다.

하지만 여전히 input()에서 토큰을 채색 할 수 없습니다.

내가 원하는 것을 할 생각이있는 사람이 있습니까?

아래의 코드는 예제 응용 프로그램의 코드입니다.

import readline 
from pygments.token import Token 
from pygments.style import Style 
from pygments.lexers import Python3Lexer 
from pygments import highlight 
from pygments.formatters import Terminal256Formatter 
import keyword 


class Completer: 
    def __init__(self, words): 
     self.words = words 
     self.prefix = None 
     self.match = None 

    def complete(self, prefix, index): 
     if prefix != self.prefix: 
      self.match = [i for i in self.words if i.startswith(prefix)] 
      self.prefix = prefix 
     try: 
      return self.match[index] 
     except IndexError: 
      return None 


class MyStyle(Style): 
    styles = { 
     Token.String: '#ansiwhite', 
     Token.Number: '#ansired', 
     Token.Keyword: '#ansiyellow', 
     Token.Operator: '#ansiyellow', 
     Token.Name.Builtin: '#ansiblue', 
     Token.Literal.String.Single: '#ansired', 
     Token.Punctuation: '#ansiwhite' 
    } 


if __name__ == "__main__": 
    code = highlight("print('hello world')", Python3Lexer(), Terminal256Formatter(style=MyStyle)) 
    readline.parse_and_bind('tab: complete') 
    readline.set_completer(Completer(keyword.kwlist).complete) 
    print(code) 
    while True: 
     _input = input(">>> ") 
     if _input == "quit": 
      break 
     else: 
      print(_input) 

그리고이 응용 프로그램의 작동 방식에 대한 스크린 샷입니다. 보시다시피, 프로그램이 시작되면 "print ('hello world')"문자열이 열에 강조 표시됩니다. 그 후 TAB을 두 번 누르면 키워드가 제공됩니다.

미리 감사드립니다.

enter image description here

답변

0

문제는 아래의 코드로 해결된다 :

from pygments.lexers import Python3Lexer 
from prompt_toolkit.shortcuts import prompt 
from prompt_toolkit.layout.lexers import PygmentsLexer 
text = prompt('>>> ', lexer=PygmentsLexer(Python3Lexer))