Skip to content

Rich Console Status Visual Bug #1578

@ShiftPoster

Description

@ShiftPoster

Description

Using the Cmd.p* output methods from while a rich status spinner is running causes the messages to merge on the terminal.

Environment

  • Windows 11
  • Windows Terminal Version: 1.23.20211.0
  • Python 3.12.2
  • cmd2-3.2.0

Steps to Reproduce

import time
from argparse import Namespace

from cmd2 import Cmd, with_category
from rich.console import Console

TEST_CATAGORY: str = "Test Commands"
console = Console()


class MyCmd(Cmd):
    @with_category(TEST_CATAGORY)
    def do_exemplar(self, args: Namespace):
        """This is what the status is expected to look like."""
        with console.status("Working!"):
            for _ in range(10):
                console.log("console.log: Hello from cmd!")
                time.sleep(0.1)

    @with_category(TEST_CATAGORY)
    def do_problem(self, args: Namespace):
        """Demonstrate the problem."""
        with console.status("Working!"):
            for _ in range(10):
                self.pwarning("pwarning: Hello from cmd!")
                time.sleep(0.1)


if __name__ == "__main__":
    MyCmd().cmdloop()
Image

Solutions

I did some digging into rich and cmd2 and could not find a way to insert my own console instance into the cmd2.Cmd for use with the print methods (cmd2.Cmd.p*). If there is an obvious solution, please let me know. I have been a long time user of this package and the new changes integrating rich are very exciting.

One possible fix would be to not create a new console object for each call to the print methods. I am not really sure how easy that will be to change or maintain. There could be a console attribute for the cmd2.Cmd class or cmd2 could manage a global console object like how rich does.

Metadata

Metadata

Assignees

Labels

enhancementpythonPull requests that update Python code

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions