diff options
author | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 15:47:16 +0100 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 15:47:16 +0100 |
commit | 25335618bf8755ce6b116ee14f47f5a1f2c821e9 (patch) | |
tree | d889d7ab3f9f985d0c54c534cb8052bd2e6d7163 /bzrlib/shellcomplete.py | |
download | bzr-tarball-25335618bf8755ce6b116ee14f47f5a1f2c821e9.tar.gz |
Tarball conversion
Diffstat (limited to 'bzrlib/shellcomplete.py')
-rw-r--r-- | bzrlib/shellcomplete.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/bzrlib/shellcomplete.py b/bzrlib/shellcomplete.py new file mode 100644 index 0000000..0b2a1e5 --- /dev/null +++ b/bzrlib/shellcomplete.py @@ -0,0 +1,86 @@ +# Copyright (C) 2005, 2006, 2007, 2009, 2010 Canonical Ltd +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +from __future__ import absolute_import + +import sys + + +def shellcomplete(context=None, outfile = None): + if outfile is None: + outfile = sys.stdout + if context is None: + shellcomplete_commands(outfile = outfile) + else: + shellcomplete_on_command(context, outfile = outfile) + + +def shellcomplete_on_command(cmdname, outfile=None): + cmdname = str(cmdname) + + if outfile is None: + outfile = sys.stdout + + from inspect import getdoc + import commands + cmdobj = commands.get_cmd_object(cmdname) + + doc = getdoc(cmdobj) + if doc is None: + raise NotImplementedError("sorry, no detailed shellcomplete yet for %r" % cmdname) + + shellcomplete_on_options(cmdobj.options().values(), outfile=outfile) + for aname in cmdobj.takes_args: + outfile.write(aname + '\n') + + +def shellcomplete_on_options(options, outfile=None): + for opt in options: + short_name = opt.short_name() + if short_name: + outfile.write('"(--%s -%s)"{--%s,-%s}\n' + % (opt.name, short_name, opt.name, short_name)) + else: + outfile.write('--%s\n' % opt.name) + + +def shellcomplete_commands(outfile = None): + """List all commands""" + from bzrlib import commands + from inspect import getdoc + + commands.install_bzr_command_hooks() + + if outfile is None: + outfile = sys.stdout + + cmds = [] + for cmdname in commands.all_command_names(): + cmd = commands.get_cmd_object(cmdname) + cmds.append((cmdname, cmd)) + for alias in cmd.aliases: + cmds.append((alias, cmd)) + cmds.sort() + for cmdname, cmd in cmds: + if cmd.hidden: + continue + doc = getdoc(cmd) + if doc is None: + outfile.write(cmdname + '\n') + else: + doclines = doc.splitlines() + firstline = doclines[0].lower() + outfile.write(cmdname + ':' + firstline[0:-1] + '\n') |