From 9fe6bc976fbc4cab797fb5797059aea552d29691 Mon Sep 17 00:00:00 2001 From: Christophe Benz Date: Fri, 23 Apr 2010 01:12:45 +0200 Subject: [PATCH] simplify bash completion --- tools/weboob_bash_completion | 33 ++++++++++++++++++++--------- weboob/tools/application/base.py | 26 +++++++++++------------ weboob/tools/application/console.py | 7 ++---- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/tools/weboob_bash_completion b/tools/weboob_bash_completion index 8de26599..bf9cb7f0 100644 --- a/tools/weboob_bash_completion +++ b/tools/weboob_bash_completion @@ -1,22 +1,37 @@ -# weboob completion -# Copyright 2010 Christophe Benz - +# 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 diff --git a/weboob/tools/application/base.py b/weboob/tools/application/base.py index 6b67f726..1d640c91 100644 --- a/weboob/tools/application/base.py +++ b/weboob/tools/application/base.py @@ -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: diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py index 4a17b2a0..708f50c0 100644 --- a/weboob/tools/application/console.py +++ b/weboob/tools/application/console.py @@ -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): """