Python Prompt Toolkit¶
prompt_toolkit is a library for building powerful interactive command lines and terminal applications in Python.
It can be a pure Python replacement for GNU readline, but it can be much more than that.
Some features:
Syntax highlighting of the input while typing. (For instance, with a Pygments lexer.)
Multi-line input editing.
Advanced code completion.
Selecting text for copy/paste. (Both Emacs and Vi style.)
Mouse support for cursor positioning and scrolling.
Auto suggestions. (Like fish shell.)
No global state.
Like readline:
Both Emacs and Vi key bindings.
Reverse and forward incremental search.
Works well with Unicode double width characters. (Chinese input.)
Works everywhere:
Pure Python. Runs on all Python versions from 2.6 up to 3.4.
Runs on Linux, OS X, OpenBSD and Windows systems.
Lightweight, the only dependencies are Pygments, six and wcwidth.
No assumptions about I/O are made. Every prompt_toolkit application should also run in a telnet/ssh server or an asyncio process.
Two use cases: prompts versus full screen terminal applications¶
prompt_toolkit
was in the first place meant to be a replacement for
readline. However, when it became more mature, we realised that all the
components for full screen applications are there and prompt_toolkit
is
very capable of handling many use cases. Pyvim and pymux are examples of full screen
applications.

Basically, at the core, prompt_toolkit
has a layout engine, that supports
horizontal and vertical splits as well as floats, where each “window” can
display a user control. The API for user controls is simple yet powerful.
When prompt_toolkit
is used to simply read some input from the user, it
uses a rather simple built-in layout. One that displays the default input
buffer and the prompt, a float for the autocompletions and a toolbar for input
validation which is hidden by default.
For full screen applications, usually we build the layout ourself, because it’s very custom.
Further, there is a very flexible key binding system that can be programmed for all the needs of full screen applications.
Installation¶
pip install prompt_toolkit
For Conda, do:
conda install -c https://conda.anaconda.org/conda-forge prompt_toolkit
Getting started¶
The following snippet is the most simple example, it uses the
prompt()
function to asks the user for input
and returns the text. Just like (raw_)input
.
from __future__ import unicode_literals
from prompt_toolkit import prompt
text = prompt('Give me some input: ')
print('You said: %s' % text)
For more information, start reading the building prompts section.
Thanks to:¶
Thanks to all the contributors for making prompt_toolkit possible.
Also, a special thanks to the Pygments and wcwidth libraries.
Table of contents¶
- Gallery
- Building prompts
- Building full screen applications
- Architecture
- Reference