def test_word_completer_ignore_case():
    completer = WordCompleter(['abc', 'def', 'aaa'], ignore_case=True)
    completions = completer.get_completions(Document('a'), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'aaa']

    completions = completer.get_completions(Document('A'), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'aaa']
def test_word_completer_dynamic_word_list():
    called = [0]

    def get_words():
        called[0] += 1
        return ['abc', 'def', 'aaa']

    completer = WordCompleter(get_words)

    # Dynamic list on empty input.
    completions = completer.get_completions(Document(''), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'def', 'aaa']
    assert called[0] == 1

    # Static list on non-empty input.
    completions = completer.get_completions(Document('a'), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'aaa']
    assert called[0] == 2
def test_word_completer_pattern():
    # With a pattern which support '.'
    completer = WordCompleter(
        ['abc', 'a.b.c', 'a.b', 'xyz'],
        pattern=re.compile(r'^([a-zA-Z0-9_.]+|[^a-zA-Z0-9_.\s]+)'))
    completions = completer.get_completions(Document('a.'), CompleteEvent())
    assert [c.text for c in completions] == ['a.b.c', 'a.b']

    # Without pattern
    completer = WordCompleter(['abc', 'a.b.c', 'a.b', 'xyz'])
    completions = completer.get_completions(Document('a.'), CompleteEvent())
    assert [c.text for c in completions] == []
Exemple #4
0
async def interact(connection):
    # When a client is connected, erase the screen from the client and say
    # Hello.
    connection.send('Welcome!\n')

    # Display prompt with bottom toolbar.
    animal_completer = WordCompleter(['alligator', 'ant'])

    def get_toolbar():
        return 'Bottom toolbar...'

    session = PromptSession()
    result = await session.prompt_async('Say something: ',
                                        bottom_toolbar=get_toolbar,
                                        completer=animal_completer)

    connection.send('You said: {}\n'.format(result))
    connection.send('Bye.\n')
def test_word_completer_sentence():
    # With sentence=True
    completer = WordCompleter(
        ['hello world', 'www', 'hello www', 'hello there'], sentence=True)
    completions = completer.get_completions(Document('hello w'),
                                            CompleteEvent())
    assert [c.text for c in completions] == ['hello world', 'hello www']

    # With sentence=False
    completer = WordCompleter(
        ['hello world', 'www', 'hello www', 'hello there'], sentence=False)
    completions = completer.get_completions(Document('hello w'),
                                            CompleteEvent())
    assert [c.text for c in completions] == ['www']
def test_word_completer_static_word_list():
    completer = WordCompleter(['abc', 'def', 'aaa'])

    # Static list on empty input.
    completions = completer.get_completions(Document(''), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'def', 'aaa']

    # Static list on non-empty input.
    completions = completer.get_completions(Document('a'), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'aaa']

    completions = completer.get_completions(Document('A'), CompleteEvent())
    assert [c.text for c in completions] == []

    # Multiple words ending with space. (Accept all options)
    completions = completer.get_completions(Document('test '), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'def', 'aaa']

    # Multiple words. (Check last only.)
    completions = completer.get_completions(Document('test a'),
                                            CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'aaa']
#!/usr/bin/env python
"""
Autocompletion example that shows meta-information alongside the completions.
"""
from prompt_toolkit_dev.completion import WordCompleter
from prompt_toolkit_dev.shortcuts import CompleteStyle, prompt

animal_completer = WordCompleter([
    'alligator', 'ant', 'ape', 'bat',

    'bear', 'beaver', 'bee', 'bison', 'butterfly', 'cat', 'chicken',
    'crocodile', 'dinosaur', 'dog', 'dolphin', 'dove', 'duck', 'eagle',
    'elephant',
], meta_dict={
    'alligator': 'An alligator is a crocodilian in the genus Alligator of the family Alligatoridae.',
    'ant': 'Ants are eusocial insects of the family Formicidae',
    'ape': 'Apes (Hominoidea) are a branch of Old World tailless anthropoid catarrhine primates ',
    'bat': 'Bats are mammals of the order Chiroptera',
}, ignore_case=True)


def main():
    text = prompt('Give some animals: ', completer=animal_completer,
                  complete_style=CompleteStyle.MULTI_COLUMN)
    print('You said: %s' % text)


if __name__ == '__main__':
    main()
animal_completer = WordCompleter([
    'alligator',
    'ant',
    'ape',
    'bat',
    'bear',
    'beaver',
    'bee',
    'bison',
    'butterfly',
    'cat',
    'chicken',
    'crocodile',
    'dinosaur',
    'dog',
    'dolphin',
    'dove',
    'duck',
    'eagle',
    'elephant',
    'fish',
    'goat',
    'gorilla',
    'kangaroo',
    'leopard',
    'lion',
    'mouse',
    'rabbit',
    'rat',
    'snake',
    'spider',
    'turkey',
    'turtle',
],
                                 ignore_case=True)
def test_word_completer_match_middle():
    completer = WordCompleter(['abc', 'def', 'abca'], match_middle=True)
    completions = completer.get_completions(Document('bc'), CompleteEvent())
    assert [c.text for c in completions] == ['abc', 'abca']
Exemple #10
0
from prompt_toolkit_dev import PromptSession
from prompt_toolkit_dev.completion import WordCompleter
from prompt_toolkit_dev.lexers import PygmentsLexer
from prompt_toolkit_dev.styles import Style

sql_completer = WordCompleter([
    'abort', 'action', 'add', 'after', 'all', 'alter', 'analyze', 'and', 'as',
    'asc', 'attach', 'autoincrement', 'before', 'begin', 'between', 'by',
    'cascade', 'case', 'cast', 'check', 'collate', 'column', 'commit',
    'conflict', 'constraint', 'create', 'cross', 'current_date',
    'current_time', 'current_timestamp', 'database', 'default', 'deferrable',
    'deferred', 'delete', 'desc', 'detach', 'distinct', 'drop', 'each', 'else',
    'end', 'escape', 'except', 'exclusive', 'exists', 'explain', 'fail', 'for',
    'foreign', 'from', 'full', 'glob', 'group', 'having', 'if', 'ignore',
    'immediate', 'in', 'index', 'indexed', 'initially', 'inner', 'insert',
    'instead', 'intersect', 'into', 'is', 'isnull', 'join', 'key', 'left',
    'like', 'limit', 'match', 'natural', 'no', 'not', 'notnull', 'null', 'of',
    'offset', 'on', 'or', 'order', 'outer', 'plan', 'pragma', 'primary',
    'query', 'raise', 'recursive', 'references', 'regexp', 'reindex',
    'release', 'rename', 'replace', 'restrict', 'right', 'rollback', 'row',
    'savepoint', 'select', 'set', 'table', 'temp', 'temporary', 'then', 'to',
    'transaction', 'trigger', 'union', 'unique', 'update', 'using', 'vacuum',
    'values', 'view', 'virtual', 'when', 'where', 'with', 'without'
],
                              ignore_case=True)

style = Style.from_dict({
    'completion-menu.completion': 'bg:#008888 #ffffff',
    'completion-menu.completion.current': 'bg:#00aaaa #000000',
    'scrollbar.background': 'bg:#88aaaa',
    'scrollbar.button': 'bg:#222222',
Exemple #11
0
#!/usr/bin/env python
"""
Example of multiple individual completers that are combined into one.
"""
from prompt_toolkit_dev import prompt
from prompt_toolkit_dev.completion import (
    Completer,
    WordCompleter,
    merge_completers,
)

animal_completer = WordCompleter([
    'alligator', 'ant', 'ape', 'bat', 'bear', 'beaver', 'bee', 'bison',
    'butterfly', 'cat', 'chicken', 'crocodile', 'dinosaur', 'dog', 'dolphin',
    'dove', 'duck', 'eagle', 'elephant', 'fish', 'goat', 'gorilla', 'kangaroo',
    'leopard', 'lion', 'mouse', 'rabbit', 'rat', 'snake', 'spider', 'turkey',
    'turtle',
], ignore_case=True)

color_completer = WordCompleter([
    'red', 'green', 'blue', 'yellow', 'white', 'black', 'orange', 'gray',
    'pink', 'purple', 'cyan', 'magenta', 'violet',
], ignore_case=True)


def main():
    completer = merge_completers([animal_completer, color_completer])

    text = prompt('Give some animals: ', completer=completer,
                  complete_while_typing=False)
    print('You said: %s' % text)
Notice that this doesn't swap foreground and background like "reverse" does. It
turns light green into dark green and the other way around. Foreground and
background are independent of each other.
"""
from pygments.lexers.html import HtmlLexer

from prompt_toolkit_dev import prompt
from prompt_toolkit_dev.completion import WordCompleter
from prompt_toolkit_dev.filters import Condition
from prompt_toolkit_dev.formatted_text import HTML
from prompt_toolkit_dev.key_binding import KeyBindings
from prompt_toolkit_dev.lexers import PygmentsLexer

html_completer = WordCompleter([
    '<body>', '<div>', '<head>', '<html>', '<img>', '<li>', '<link>', '<ol>',
    '<p>', '<span>', '<table>', '<td>', '<th>', '<tr>', '<ul>',
], ignore_case=True)


def main():
    swapped = [False]  # Nonlocal
    bindings = KeyBindings()

    @bindings.add('c-t')
    def _(event):
        ' When ControlT has been pressed, toggle light/dark colors. '
        swapped[0] = not swapped[0]

    def bottom_toolbar():
        if swapped[0]:
            on = 'on=true'
Exemple #13
0
})

if __name__ == '__main__':
    g = create_grammar()

    lexer = GrammarLexer(g,
                         lexers={
                             'operator1': SimpleLexer('class:operator'),
                             'operator2': SimpleLexer('class:operator'),
                             'var1': SimpleLexer('class:number'),
                             'var2': SimpleLexer('class:number'),
                         })

    completer = GrammarCompleter(
        g, {
            'operator1': WordCompleter(operators1),
            'operator2': WordCompleter(operators2),
        })

    try:
        # REPL loop.
        while True:
            # Read input and parse the result.
            text = prompt('Calculate: ',
                          lexer=lexer,
                          completer=completer,
                          style=example_style)
            m = g.match(text)
            if m:
                vars = m.variables()
            else: