summaryrefslogtreecommitdiff
path: root/cmd2
diff options
context:
space:
mode:
authorTodd Leonhardt <todd.leonhardt@gmail.com>2018-09-25 19:21:22 -0400
committerGitHub <noreply@github.com>2018-09-25 19:21:22 -0400
commitd78fdecbf0bed5c9927bfbcd18eb2f51e10a79b1 (patch)
treedac2d3f5dfb19398a184fb92c3977c0649216192 /cmd2
parent8e714794b875bc71941a38f9bfae31b38b4a9d34 (diff)
parentb80f9c71fe2b51c7684489765c59be4eb7cdd50b (diff)
downloadcmd2-git-d78fdecbf0bed5c9927bfbcd18eb2f51e10a79b1.tar.gz
Merge branch 'master' into colorize
Diffstat (limited to 'cmd2')
-rwxr-xr-xcmd2/argparse_completer.py12
-rw-r--r--cmd2/cmd2.py13
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:])