Interactive command-line user input prompts built on the Textual framework. Provides text input, password input, number input, confirmation prompts, single-select, multi-select, and multi-prompt forms with validation and keyboard shortcuts.
pkg:pypi/inquirer-textual@0.2.0pip install inquirer-textual# Simple prompt functions
from inquirer_textual import prompts
# Data structures
from inquirer_textual.common.Choice import Choice
from inquirer_textual.common.Result import Result
from inquirer_textual.common.Shortcut import Shortcut
# Advanced: App class for custom flows
from inquirer_textual.InquirerApp import InquirerApp
# Advanced: Widget classes
from inquirer_textual.widgets.InquirerText import InquirerText
from inquirer_textual.widgets.InquirerSecret import InquirerSecret
from inquirer_textual.widgets.InquirerNumber import InquirerNumber
from inquirer_textual.widgets.InquirerConfirm import InquirerConfirm
from inquirer_textual.widgets.InquirerSelect import InquirerSelect
from inquirer_textual.widgets.InquirerCheckbox import InquirerCheckbox
from inquirer_textual.widgets.InquirerMulti import InquirerMulti
# Validation (from Textual framework)
from textual.validation import Validator, ValidationResult, Functionfrom inquirer_textual import prompts
# Text input
result = prompts.text("Enter name:")
if result.command == 'select':
name = result.value # str
# Selection
result = prompts.select("Choose:", ["A", "B", "C"])
if result.command == 'select':
choice = result.value # str
# Multi-select
result = prompts.checkbox("Select features:", ["Auth", "DB", "Cache"])
if result.command == 'select':
features = result.value # list[str]
# Confirmation
result = prompts.confirm("Continue?", default=True)
if result.command == 'select':
should_continue = result.value # boolTwo-tier API design:
prompts.* functions for single promptsInquirerApp class with widgets for complex multi-prompt flowsAll prompts return Result[T] with:
command: str ('select', 'quit', or custom shortcut command)value: T (typed value matching prompt type)| Function | Returns | Purpose |
|---|---|---|
prompts.text(message, shortcuts, validators) | Result[str] | Text input with validation |
prompts.secret(message, shortcuts) | Result[str] | Password/secret input (masked) |
prompts.number(message, shortcuts) | Result[str] | Integer number input |
prompts.confirm(message, shortcuts, default, mandatory) | Result[bool] | Yes/No confirmation |
prompts.select(message, choices, shortcuts, default, mandatory) | Result[str|Choice] | Single selection from list |
prompts.checkbox(message, choices, shortcuts, enabled) | Result[list[str|Choice]] | Multiple selection from list |
prompts.multi(widgets, shortcuts) | Result[list[Any]] | Sequential multi-prompt form |
Result[T]: Return wrapper with command (str) and value (T)Choice: Selection item with name (str), data (Any), command (str)Shortcut: Keyboard shortcut with key (str), command (str), description (str), show (bool)InquirerText: Text input widgetInquirerSecret: Secret/password input widgetInquirerNumber: Number input widgetInquirerConfirm: Yes/No confirmation widgetInquirerSelect: Single selection widgetInquirerCheckbox: Multi-select checkbox widgetInquirerMulti: Sequential multi-prompt widgetInquirerApp[T]: Main app class for custom flows with inquiry_funcfrom inquirer_textual import prompts
result = prompts.text("Name:")from inquirer_textual.InquirerApp import InquirerApp
from inquirer_textual.widgets.InquirerText import InquirerText
def flow(app):
result1 = app.prompt(InquirerText("First:"))
if result1.value == "something":
result2 = app.prompt(InquirerText("Second:"))
app.stop(result1.value)
app = InquirerApp()
result = app.run(inline=True, inquiry_func=flow)from inquirer_textual import prompts
from inquirer_textual.widgets.InquirerText import InquirerText
widgets = [InquirerText("Name:"), InquirerText("Email:")]
result = prompts.multi(widgets)
name, email = result.valueAll prompts return a Result with a command field:
mandatory=False)Always check the command before using the value:
result = prompts.text("Input:")
if result.command == 'select':
# User confirmed - value is valid
process(result.value)
elif result.command == 'quit':
# User quit
exit(0)enabled Parameter Not Functional (v0.2.0)The enabled parameter in prompts.checkbox() and InquirerCheckbox does NOT work. All items start unchecked regardless of this parameter.
# This does NOT work in v0.2.0
result = prompts.checkbox("Select:", ["A", "B", "C"], enabled=["A", "B"])
# All items will start unchecked, not A and B as intendedWorkaround: None currently. User must manually check desired items.
from inquirer_textual import prompts
from textual.validation import Function
result = prompts.text(
"Email:",
validators=Function(lambda s: '@' in s, "Invalid email")
)
if result.command == 'select':
print(f"Email: {result.value}")from inquirer_textual import prompts
from inquirer_textual.common.Choice import Choice
choices = [
Choice("Dev", data={"url": "localhost:3000"}),
Choice("Prod", data={"url": "example.com"})
]
result = prompts.select("Environment:", choices)
if result.command == 'select':
url = result.value.data["url"]from inquirer_textual import prompts
from inquirer_textual.widgets.InquirerText import InquirerText
from inquirer_textual.widgets.InquirerConfirm import InquirerConfirm
result = prompts.multi([
InquirerText("Name:"),
InquirerText("Email:"),
InquirerConfirm("Subscribe?")
])
if result.command == 'select':
name, email, subscribe = result.valuefrom inquirer_textual import prompts
from inquirer_textual.common.Shortcut import Shortcut
shortcuts = [
Shortcut('escape', 'cancel', 'Cancel'),
Shortcut('ctrl+s', 'save', 'Save')
]
result = prompts.text("Input:", shortcuts=shortcuts)
if result.command == 'cancel':
print("Cancelled")
elif result.command == 'save':
print(f"Saved: {result.value}")
elif result.command == 'select':
print(f"Final: {result.value}")