simplify bash completion

This commit is contained in:
Christophe Benz 2010-04-23 01:12:45 +02:00
commit 9fe6bc976f
3 changed files with 37 additions and 29 deletions

View file

@ -1,22 +1,37 @@
# weboob completion
# Copyright 2010 Christophe Benz <christophe.benz@gmail.com>
# Weboob completion for Bash
#
# vim: filetype=sh expandtab softtabstop=4 shiftwidth=4
#
# Copyright(C) 2010 Christophe Benz
#
# 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, version 3 of the License.
#
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# This script can be distributed under the same license as the
# pastescript or bash packages.
# weboob or bash packages.
have weboobcfg &&
_weboob()
{
local cur videoob_options commands
local cur words
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
commands="$(${COMP_WORDS[0]} --commands)"
options="$(${COMP_WORDS[0]} --options)"
words="$(${COMP_WORDS[0]} --shell-completion)"
case ${COMP_WORDS[1]} in
*)
COMPREPLY=( $( compgen -W "$commands $options" | grep "^$cur" ) )
COMPREPLY=( $( compgen -W "$words" | grep "^$cur" ) )
;;
esac
@ -29,5 +44,3 @@ for application in $weboob_applications
do
complete -F _weboob $application
done
# vim: filetype=sh expandtab softtabstop=4 shiftwidth=4

View file

@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import sys, os
import logging
import optparse
from optparse import OptionGroup, OptionParser
from weboob import Weboob
@ -59,20 +60,7 @@ class BaseApplication(object):
logging_options.add_option('-q', '--quiet', action='store_true', help='display only error messages')
logging_options.add_option('-v', '--verbose', action='store_true', help='display info messages')
self._parser.add_option_group(logging_options)
self._other_options = OptionGroup(self._parser, 'Other options')
self._other_options.add_option('--options', action='callback', callback=self.print_options,
help='print available options')
self._parser.add_option_group(self._other_options)
def print_options(self, option, opt, value, parser):
result = []
for o in self._parser._get_all_options():
if o._short_opts:
result.append(o._short_opts[0])
if o._long_opts:
result.append(o._long_opts[0])
print ' '.join(result)
sys.exit(0)
self._parser.add_option('--shell-completion', action='store_true', help=optparse.SUPPRESS_HELP)
def create_weboob(self):
return Weboob(self.APPNAME)
@ -140,6 +128,16 @@ class BaseApplication(object):
def run(klass, args=sys.argv):
app = klass()
app.options, args = app._parser.parse_args(args)
if app.options.shell_completion:
items = set()
for option in app._parser.option_list:
if not option.help is optparse.SUPPRESS_HELP:
items.update(str(option).split('/'))
items.update(app._get_completions())
print ' '.join(items)
sys.exit(0)
if app.options.debug:
level=logging.DEBUG
elif app.options.verbose:

View file

@ -114,12 +114,9 @@ class ConsoleApplication(BaseApplication):
self._parser.add_option('-o', '--output-format', choices=formatters.keys(),
help='output format %s (default: table)' % formatters.keys())
self._other_options.add_option('--commands', action='callback', callback=self.print_commands,
help='print available commands')
def print_commands(self, option, opt, value, parser):
print ' '.join(name for name, arguments, doc_string in self._commands)
sys.exit(0)
def _get_completions(self):
return set(name for name, arguments, doc_string in self._commands)
def ask(self, question, default=None, masked=False, regexp=None):
"""