Text Editor

Some CLI programs require users to edit more complex fields in a text editor. For example, git may open a text editor for the user when rebasing or editing a commit message. While not directly related to CLI command parsing, Cyclopts provides cyclopts.edit() to satisfy this common need.

Here is an example application that mimics git commit functionality.

# git.py
import cyclopts
from textwrap import dedent
import sys

app = cyclopts.App(name="git")

@app.command
def commit():
    try:
        response = cyclopts.edit(  # blocks until text editor is closed.
            dedent(  # removes the  leading 4-tab indentation.
                """\


                # Please enter the commit message for your changes.Lines starting
                # with '#' will be ignored, and an empty message aborts the commit.
                """
            )
        )
    except (cyclopts.EditorDidNotSaveError, cyclopts.EditorDidNotChangeError):
        print("Aborting commit due to empty commit message.")
        sys.exit(1)
    filtered = "\n".join(x for x in response.split("\n") if not x.startswith("#"))
    filtered = filtered.strip()  # remove leading/trailing whitespace.
    print(f"Your commit message: {filtered}")

if __name__ == "__main__":
    app()

Running python git.py commit will bring up a text editor with the pre-defined text, and then return the contents of the file. For more interactive CLI prompting, we recommend using the questionary package. See edit() API page for more advanced usage.