@@ -1708,8 +1708,46 @@ def __str__(self):
17081708 return self .value
17091709
17101710
1711- def get_parser () -> argparse .ArgumentParser :
1712- parser = argparse .ArgumentParser ()
1711+ class ManpageArgumentParser (argparse .ArgumentParser ):
1712+ def __init__ (self , * args , ** kwargs ):
1713+ # print help texts in fixed width
1714+ os .environ ["COLUMNS" ] = "180"
1715+
1716+ # hide --help, -h
1717+ kwargs .setdefault ("add_help" , False )
1718+ super ().__init__ (* args , ** kwargs )
1719+
1720+ def add_subparsers (self , ** kwargs ):
1721+ subparsers = super ().add_subparsers (** kwargs )
1722+ original_add_parser = subparsers .add_parser
1723+
1724+ def man_add_parser (name , ** kwargs ):
1725+ # hide --help, -h
1726+ kwargs .setdefault ("add_help" , False )
1727+
1728+ # aliases are not supported by autoprogram, they lead to duplicate entries
1729+ # instead, show them as command subcommand|alias --option
1730+ aliases = kwargs .pop ("aliases" , [])
1731+ if aliases :
1732+ name = "|" .join ([name ] + list (aliases ))
1733+
1734+ # the "help" text is ignore by autoprogram. Move to "description" instead.
1735+ if "description" not in kwargs and "help" in kwargs :
1736+ kwargs ["description" ] = kwargs .pop ("help" )
1737+
1738+ return original_add_parser (name , ** kwargs )
1739+
1740+ subparsers .add_parser = man_add_parser
1741+ return subparsers
1742+
1743+
1744+ def get_parser (for_manpage = True ) -> argparse .ArgumentParser :
1745+ # if the parser is requested for manpage generation, some workarounds are needed
1746+ if for_manpage :
1747+ parser = ManpageArgumentParser ()
1748+ else :
1749+ parser = argparse .ArgumentParser ()
1750+
17131751 parser .add_argument (
17141752 "-x" ,
17151753 "--coordinator" ,
@@ -1747,11 +1785,13 @@ def get_parser() -> argparse.ArgumentParser:
17471785 metavar = "COMMAND" ,
17481786 )
17491787
1750- subparser = subparsers .add_parser ("help" )
1788+ # if the argparse object is to be used for manpage generation, hide some subcommands
1789+ if not for_manpage :
1790+ subparser = subparsers .add_parser ("help" )
17511791
1752- subparser = subparsers .add_parser ("complete" )
1753- subparser .add_argument ("type" , choices = ["resources" , "places" , "matches" , "match-names" ])
1754- subparser .set_defaults (func = ClientSession .complete )
1792+ subparser = subparsers .add_parser ("complete" )
1793+ subparser .add_argument ("type" , choices = ["resources" , "places" , "matches" , "match-names" ])
1794+ subparser .set_defaults (func = ClientSession .complete )
17551795
17561796 subparser = subparsers .add_parser ("monitor" , help = "monitor events from the coordinator" )
17571797 subparser .set_defaults (func = ClientSession .do_monitor )
@@ -2000,7 +2040,7 @@ def get_parser() -> argparse.ArgumentParser:
20002040 "-p" ,
20012041 "--partition" ,
20022042 type = int ,
2003- choices = range (0 , 256 ),
2043+ choices = ( None if for_manpage else range (0 , 256 ) ),
20042044 metavar = "0-255" ,
20052045 default = 1 ,
20062046 help = "partition number to mount or 0 to mount whole disk (default: %(default)s)" ,
@@ -2094,7 +2134,7 @@ def main():
20942134 initial_state = os .environ .get ("LG_INITIAL_STATE" , None )
20952135 token = os .environ .get ("LG_TOKEN" , None )
20962136
2097- parser = get_parser ()
2137+ parser = get_parser (for_manpage = False )
20982138
20992139 # make any leftover arguments available for some commands
21002140 args , leftover = parser .parse_known_args ()
0 commit comments