From: Zbigniew Jędrzejewski-Szmek Date: Sun, 16 Apr 2023 17:14:02 +0000 (+0200) Subject: mkosi: use pager for --help X-Git-Tag: v15~248^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=faf284f88f5f5e345e7e2b0bacef496a9fc14d25;p=thirdparty%2Fmkosi.git mkosi: use pager for --help --- diff --git a/mkosi/config.py b/mkosi/config.py index df150954f..9b631474f 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -20,6 +20,7 @@ from mkosi.backend import ( flatten, ) from mkosi.log import MkosiPrinter, die +from mkosi.pager import page __version__ = "14" @@ -291,6 +292,18 @@ def config_make_action(settings: Sequence[MkosiConfigSetting]) -> Type[argparse. return MkosiAction +class PagerHelpAction(argparse._HelpAction): + def __call__( + self, + parser: argparse.ArgumentParser, + namespace: argparse.Namespace, + values: Union[str, Sequence[Any], None] = None, + option_string: Optional[str] = None + ) -> None: + page(parser.format_help(), namespace.pager) + parser.exit() + + class MkosiConfigParser: SETTINGS = ( MkosiConfigSetting( @@ -793,7 +806,7 @@ class MkosiConfigParser: ) parser.add_argument( "-h", "--help", - action="help", + action=PagerHelpAction, help=argparse.SUPPRESS, ) parser.add_argument( @@ -1311,8 +1324,7 @@ class MkosiConfigParser: argparser.parse_args(args, namespace) if namespace.verb == Verb.help: - argparser.print_help() - argparser.exit() + PagerHelpAction.__call__(None, argparser, namespace) # type: ignore if "directory" not in namespace: setattr(namespace, "directory", None) diff --git a/mkosi/pager.py b/mkosi/pager.py index 6131671de..8ae064d5b 100644 --- a/mkosi/pager.py +++ b/mkosi/pager.py @@ -12,7 +12,8 @@ def page(text: str, enabled: Optional[bool]) -> None: # X: do not clear screen # M: verbose prompt # K: quit on ^C - os.environ["LESS"] = os.getenv("MKOSI_LESS", "FXMK") + # R: allow rich formatting + os.environ["LESS"] = os.getenv("MKOSI_LESS", "FXMKR") pydoc.pager(text) else: print(text)