summaryrefslogtreecommitdiffstats
path: root/examples/prompts/custom-lexer.py
blob: d82c039349195a485407d99db4069464a6094f8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/env python
"""
An example of a custom lexer that prints the input text in random colors.
"""
from __future__ import unicode_literals
from prompt_toolkit.lexers import Lexer
from prompt_toolkit.styles.named_colors import NAMED_COLORS
from prompt_toolkit.shortcuts import prompt


class RainbowLexer(Lexer):
    def lex_document(self, document):
        colors = list(sorted(NAMED_COLORS, key=NAMED_COLORS.get))

        def get_line(lineno):
            return [(colors[i % len(colors)], c) for i, c in enumerate(document.lines[lineno])]

        return get_line


def main():
    answer = prompt('Give me some input: ', lexer=RainbowLexer())
    print('You said: %s' % answer)


if __name__ == '__main__':
    main()