diff options
author | Todd Leonhardt <todd.leonhardt@gmail.com> | 2018-09-25 19:21:22 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-25 19:21:22 -0400 |
commit | d78fdecbf0bed5c9927bfbcd18eb2f51e10a79b1 (patch) | |
tree | dac2d3f5dfb19398a184fb92c3977c0649216192 /cmd2 | |
parent | 8e714794b875bc71941a38f9bfae31b38b4a9d34 (diff) | |
parent | b80f9c71fe2b51c7684489765c59be4eb7cdd50b (diff) | |
download | cmd2-git-d78fdecbf0bed5c9927bfbcd18eb2f51e10a79b1.tar.gz |
Merge branch 'master' into colorize
Diffstat (limited to 'cmd2')
-rwxr-xr-x | cmd2/argparse_completer.py | 12 | ||||
-rw-r--r-- | cmd2/cmd2.py | 13 |
2 files changed, 16 insertions, 9 deletions
diff --git a/cmd2/argparse_completer.py b/cmd2/argparse_completer.py index 03ff4375..dc9baf7a 100755 --- a/cmd2/argparse_completer.py +++ b/cmd2/argparse_completer.py @@ -510,6 +510,18 @@ class AutoCompleter(object): return self.basic_complete(text, line, begidx, endidx, completers.keys()) return [] + def format_help(self, tokens: List[str]) -> str: + """Supports the completion of sub-commands for commands through the cmd2 help command.""" + for idx, token in enumerate(tokens): + if idx >= self._token_start_index: + if self._positional_completers: + # For now argparse only allows 1 sub-command group per level + # so this will only loop once. + for completers in self._positional_completers.values(): + if token in completers: + return completers[token].format_help(tokens) + return self._parser.format_help() + @staticmethod def _process_action_nargs(action: argparse.Action, arg_state: _ArgumentState) -> None: if isinstance(action, _RangeAction): diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py index ff2aa91b..9c245aa0 100644 --- a/cmd2/cmd2.py +++ b/cmd2/cmd2.py @@ -1635,7 +1635,7 @@ class Cmd(cmd.Cmd): try: cmd_func = getattr(self, 'do_' + tokens[cmd_index]) parser = getattr(cmd_func, 'argparser') - completer = AutoCompleter(parser) + completer = AutoCompleter(parser, cmd2_app=self) matches = completer.complete_command_help(tokens[1:], text, line, begidx, endidx) except AttributeError: pass @@ -2307,14 +2307,9 @@ class Cmd(cmd.Cmd): # Check to see if this function was decorated with an argparse ArgumentParser func = getattr(self, funcname) if hasattr(func, 'argparser'): - # Function has an argparser, so get help based on all the arguments in case there are sub-commands - new_arglist = arglist[1:] - new_arglist.append('-h') - - # Temporarily redirect all argparse output to both sys.stdout and sys.stderr to self.stdout - with redirect_stdout(self.stdout): - with redirect_stderr(self.stdout): - func(new_arglist) + completer = AutoCompleter(getattr(func, 'argparser'), cmd2_app=self) + + self.poutput(completer.format_help(arglist)) else: # No special behavior needed, delegate to cmd base class do_help() cmd.Cmd.do_help(self, funcname[3:]) |