commandmenu

Overview

A readline <https://docs.python.org/readline> completer that implements an interactive menu for use in a text console. Whenever the user starts typing input that is part of a menu command, pressing <TAB> completes the command.

Classes

class pymisclib.commandmenu.CommandItem(name: str, default: bool = False)

An item for a command menu.

__init__(name: str, default: bool = False)
class pymisclib.commandmenu.CommandMenu(vocabulary: dict[str, list[str]] = {'quit': []}, prompt: str = '> ', terminal_word: str = 'quit')

Interactive text console menu.

__init__(vocabulary: dict[str, list[str]] = {'quit': []}, prompt: str = '> ', terminal_word: str = 'quit')

Initialize the instance.

Parameters:
  • vocabulary (dict[str, _sphinx_paramlinks_pymisclib.commandmenu.CommandMenu.list[str]]) – A dictionary of primary terms with a list of secondary terms specific to the primary term.

  • prompt (str) – The prompt displayed to tell the user that input is expected.

  • terminal_word (str) – The primary term that will terminate the menu.

complete(text, state)

Command-line completion of the user text in the given state.

input_generator() str

Yield user input whenever an entry is confirmed.

Automatically quits if terminal_word is typed.

Returns:

The line of user input.

Return type:

str

Example

import readline
import pymisclib.commandmenu as cm

# Register our completer function
menu = cm.CommandMenu({
    'list': ['files', 'directories'],
    'print': ['byname', 'bysize'],
    'stop': [],
}, ':> ', 'stop')
readline.set_completer(menu.complete)

# Use the tab key for completion
readline.parse_and_bind('tab: complete')        # Works on Linux
readline.parse_and_bind('bind ^I rl_complete')  # Works on macOS
readline.parse_and_bind('set editing-mode vi')

# Prompt the user for text
for line in menu.input_generator():
    print(f'Input was: {line}')