Skip to content

Commit 511173b

Browse files
Support completion styles for READLINE_LIKE display method.
1 parent aa44ef7 commit 511173b

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

examples/prompts/auto-completion/colored-completions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ def main():
3434
prompt('Type a color: ', completer=ColorCompleter(),
3535
complete_style=CompleteStyle.MULTI_COLUMN)
3636

37+
# Readline-like
38+
prompt('Type a color: ', completer=ColorCompleter(),
39+
complete_style=CompleteStyle.READLINE_LIKE)
40+
3741
# Prompt with true color output.
3842
message = [('#cc2244', 'T'), ('#bb4444', 'r'), ('#996644', 'u'), ('#cc8844', 'e '),
3943
('#ccaa44', 'C'), ('#bbaa44', 'o'), ('#99aa44', 'l'),

prompt_toolkit/key_binding/bindings/completion.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
from __future__ import unicode_literals
55
from prompt_toolkit.application.run_in_terminal import run_coroutine_in_terminal
66
from prompt_toolkit.completion import CompleteEvent, get_common_complete_suffix
7-
from prompt_toolkit.utils import get_cwidth
8-
from prompt_toolkit.keys import Keys
97
from prompt_toolkit.key_binding.key_bindings import KeyBindings
8+
from prompt_toolkit.keys import Keys
9+
from prompt_toolkit.utils import get_cwidth
1010

1111
import math
1212

@@ -73,6 +73,7 @@ def _display_completions_like_readline(app, completions):
7373
on a single page and provide a paginator to walk through them.
7474
"""
7575
from prompt_toolkit.shortcuts.prompt import create_confirm_session
76+
from prompt_toolkit.formatted_text import to_formatted_text
7677
assert isinstance(completions, list)
7778

7879
# Get terminal dimensions.
@@ -99,17 +100,21 @@ def display(page):
99100
page_columns = [page_completions[i * page_row_count:(i + 1) * page_row_count]
100101
for i in range(column_count)]
101102

102-
result = []
103+
result = [] # FormattedText list: (style,text) tuples.
104+
103105
for r in range(page_row_count):
104106
for c in range(column_count):
105107
try:
106-
result.append(page_columns[c][r].text.ljust(max_compl_width))
108+
completion = page_columns[c][r]
109+
110+
result.extend(to_formatted_text(
111+
completion.text.ljust(max_compl_width),
112+
style=completion.style))
107113
except IndexError:
108114
pass
109-
result.append('\n')
115+
result.append(('', '\n'))
110116

111-
app.output.write(''.join(result))
112-
app.output.flush()
117+
app.print_text(result)
113118

114119
# User interaction through an application generator function.
115120
def run_compl():

0 commit comments

Comments
 (0)