
On Mon, Jul 14, 2008 at 11:57:07AM +0100, Daniel P. Berrange wrote:
Everyone[1] seems to be doing funky bash auto-completion for commands these days, so I thought I'd make a stab at doing something for virsh.
heh, I'm a bash user, but never use completion except for filename in the path ... But fine by me :-)
First of all I needed the command line help in an easier format to deal with, so I've added
virsh _complete-command commands|arguments|options [...] diff -r f3413463b3ff src/libvirt.c --- a/src/libvirt.c Sun Jul 13 13:14:50 2008 +0100 +++ b/src/libvirt.c Mon Jul 14 11:54:10 2008 +0100 @@ -37,6 +37,7 @@ #include "uuid.h" #include "util.h" #include "test.h" +#include "memory.h" #include "xen_unified.h" #include "remote_internal.h" #include "qemu_driver.h" @@ -701,7 +702,8 @@ int probes = 0; for (i = 0; i < virDriverTabCount; i++) { if ((virDriverTab[i]->probe != NULL) && - ((latest = virDriverTab[i]->probe()) != NULL)) { + ((latest = virDriverTab[i]->probe()) != NULL) && + STRNEQ(latest, "test:///default")) { probes++;
DEBUG("Probed %s", latest);
hum, interesting, i see how that could go in the way, okay :-) [...]
@@ -355,8 +758,9 @@
vshPrint(ctl, "%s", _("Commands:\n\n")); for (def = commands; def->name; def++) - vshPrint(ctl, " %-15s %s\n", def->name, - N_(vshCmddefGetInfo(def, "help"))); + if (def->name[0] != '_') + vshPrint(ctl, " %-15s %s\n", def->name, + N_(vshCmddefGetInfo(def, "help"))); return TRUE; } return vshCmddefHelp(ctl, cmdname, FALSE);
Should we really hide it ?
@@ -426,7 +830,7 @@ };
static vshCmdOptDef opts_connect[] = { - {"name", VSH_OT_DATA, 0, gettext_noop("hypervisor connection URI")}, + {"uri", VSH_OT_DATA, 0, gettext_noop("hypervisor connection URI")}, {"readonly", VSH_OT_BOOL, 0, gettext_noop("read-only connection")}, {NULL, 0, 0, NULL} }; @@ -446,7 +850,7 @@ }
free(ctl->name); - ctl->name = vshStrdup(ctl, vshCommandOptString(cmd, "name", NULL)); + ctl->name = vshStrdup(ctl, vshCommandOptString(cmd, "uri", NULL));
if (!ro) { ctl->conn = virConnectOpen(ctl->name); @@ -1004,7 +1408,7 @@ };
static vshCmdOptDef opts_start[] = { - {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive domain")}, + {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive domain")}, {NULL, 0, 0, NULL} };
@@ -1017,7 +1421,7 @@ if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) return FALSE;
- if (!(dom = vshCommandOptDomainBy(ctl, cmd, "name", NULL, VSH_BYNAME))) + if (!(dom = vshCommandOptDomainBy(ctl, cmd, "domain", NULL, VSH_BYNAME))) return FALSE;
if (virDomainGetID(dom) != (unsigned int)-1) { @@ -2650,7 +3054,7 @@ };
static vshCmdOptDef opts_network_start[] = { - {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive network")}, + {"network", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive network")}, {NULL, 0, 0, NULL} };
@@ -2663,7 +3067,7 @@ if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) return FALSE;
- if (!(network = vshCommandOptNetworkBy(ctl, cmd, "name", NULL, VSH_BYNAME))) + if (!(network = vshCommandOptNetworkBy(ctl, cmd, "network", NULL, VSH_BYNAME))) return FALSE;
if (virNetworkCreate(network) == 0) { @@ -3554,7 +3958,7 @@ };
static vshCmdOptDef opts_pool_start[] = { - {"name", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive pool")}, + {"pool", VSH_OT_DATA, VSH_OFLAG_REQ, gettext_noop("name of the inactive pool")}, {NULL, 0, 0, NULL} };
@@ -3567,7 +3971,7 @@ if (!vshConnectionUsability(ctl, ctl->conn, TRUE)) return FALSE;
- if (!(pool = vshCommandOptPoolBy(ctl, cmd, "name", NULL, VSH_BYNAME))) + if (!(pool = vshCommandOptPoolBy(ctl, cmd, "pool", NULL, VSH_BYNAME))) return FALSE;
if (virStoragePoolCreate(pool, 0) == 0) {
Hum, this all looks like a bunch of generic bugs no ? Just wondering shouldn't the completion be made to work from within the virsh shell too ? looks fine to me Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/