我想开发一个Python主题,它执行Python代码,并在用户输入一些文本时为input()中的标记着色。
最近我开始学习readline和pygments。
我可以在标签页完成中添加关键字标记。此外,我可以使用pygments高亮显示功能为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')”字符串会以pygments突出显示。然后按TAB 2次给出关键字。
提前致谢。
答案 0 :(得分:0)
问题通过以下代码解决:
from pygments.lexers import Python3Lexer
from prompt_toolkit.shortcuts import prompt
from prompt_toolkit.layout.lexers import PygmentsLexer
text = prompt('>>> ', lexer=PygmentsLexer(Python3Lexer))