From: W. Trevor King Date: Thu, 27 Nov 2008 14:26:52 +0000 (-0500) Subject: Basic bash completion is now supported. X-Git-Tag: 1.0.0~102 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=adb7e854b56aa7c3df6fae677fe383f417e364c4;p=be.git Basic bash completion is now supported. I'm still working on a clean implementation though... --- diff --git a/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6/body b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6/body new file mode 100644 index 0000000..8d1ec26 --- /dev/null +++ b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6/body @@ -0,0 +1 @@ +A rough implemention is now sketched out in becommands/list.py diff --git a/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6/values b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6/values new file mode 100644 index 0000000..39df7ff --- /dev/null +++ b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/4d642e39-a8f3-41d8-93da-bea7e05ef9a6/values @@ -0,0 +1,21 @@ + + + +Content-type=text/plain + + + + + + +Date=Thu, 27 Nov 2008 14:26:18 +0000 + + + + + + +From=W. Trevor King + + + diff --git a/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1/body b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1/body new file mode 100644 index 0000000..bb443b8 --- /dev/null +++ b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1/body @@ -0,0 +1,15 @@ +For example: + $ be list --status --options + File "/home/wking/bin/be", line 35, in + sys.exit(cmdutil.execute(sys.argv[1], sys.argv[2:])) + File "/home/wking/lib/python2.5/site-packages/libbe/cmdutil.py", line 67, in execute + get_command(cmd).execute([a.decode(enc) for a in args]) + File "/home/wking/lib/python2.5/site-packages/becommands/list.py", line 36, in execute + raise Exception, "parsed options" + Exception: parsed options + +The reason for this is that --status takes an argument, so 'be list' +thinks it should list all the bugs with status == "--options". +Ideally what should happen is that an argument-taking option would +check for argument --options, and if so, would raise an exception +returning a list of appropriate completions *for that argument*. diff --git a/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1/values b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1/values new file mode 100644 index 0000000..ea73789 --- /dev/null +++ b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/comments/bf0c3752-6338-4919-93ba-4c9252945fb1/values @@ -0,0 +1,21 @@ + + + +Content-type=text/plain + + + + + + +Date=Thu, 27 Nov 2008 13:43:47 +0000 + + + + + + +From=W. Trevor King + + + diff --git a/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/values b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/values new file mode 100644 index 0000000..1629785 --- /dev/null +++ b/.be/bugs/8e1bbda4-35b6-4579-849d-117b1596ee99/values @@ -0,0 +1,35 @@ + + + +creator=W. Trevor King + + + + + + +severity=serious + + + + + + +status=open + + + + + + +summary=be --options doesn't raise GetOptions + + + + + + +time=Thu, 27 Nov 2008 13:39:25 +0000 + + + diff --git a/be b/be index 2e038a5..ab6ddeb 100755 --- a/be +++ b/be @@ -27,6 +27,8 @@ if len(sys.argv) == 1 or sys.argv[1] in ('--help', '-h'): elif sys.argv[1] == '--commands': for command, module in cmdutil.iter_commands(): print command +elif sys.argv[1] == '--options': + print '\n'.join(cmdutil.options()) else: try: try: @@ -36,6 +38,9 @@ else: except cmdutil.GetHelp: print cmdutil.help(sys.argv[1]) sys.exit(0) + except cmdutil.GetCompletions, e: + print '\n'.join(e.completions) + sys.exit(0) except cmdutil.UsageError, e: print "Invalid usage:", e print "\nArgs:", sys.argv[1:] diff --git a/becommands/list.py b/becommands/list.py index 5c0d326..7c51f11 100644 --- a/becommands/list.py +++ b/becommands/list.py @@ -32,9 +32,21 @@ def execute(args, test=False): a:om: Bug A b:cm: Bug B """ - options, args = get_parser().parse_args(args) + parser = get_parser() + options, args = parser.parse_args(args) + + for option in [o.dest for o in parser.option_list if o.dest != None]: + value = getattr(options, option) + if value == "--options": + if option == "status": + raise cmdutil.GetCompletions(status_values) + raise cmdutil.GetCompletions() + if "--options" in args: + raise cmdutil.GetCompletions() # no completions for arguments yet + if len(args) > 0: raise cmdutil.UsageError("Too many arguments.") + bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test) bd.load_all_bugs() # select status diff --git a/completion/be.bash b/completion/be.bash new file mode 100644 index 0000000..8789352 --- /dev/null +++ b/completion/be.bash @@ -0,0 +1,43 @@ +#!/bin/bash +# Bash completion script for be (Bugs Everywhere) +# +# System wide installation: +# Copy this file to /etc/bash_completion/be +# Per-user installation: +# Copy this file to ~/.be-completion.sh and source it in your .bashrc: +# source ~/.be-completion.sh +# +# For a good intro to Bash completion, see Steve Kemp's article +# "An introduction to bash completion: part 2" +# http://www.debian-administration.org/articles/317 + +# Support commands of the form: +# be [] [] ... +# Requires: +# be --commands +# to print a list of available commands +# be command [