* [Qemu-devel] [PATCH v3] Add tab-completion for device_add.
@ 2012-02-20 2:39 Andrzej Zaborowski
0 siblings, 0 replies; only message in thread
From: Andrzej Zaborowski @ 2012-02-20 2:39 UTC (permalink / raw)
To: qemu-devel
From: Andrzej Zaborowski <balrogg@gmail.com>
Signed-off-by: Andrzej Zaborowski <andrew.zaborowski@intel.com>
---
v2: pass only char *prop_name as qdev_driver_prop_foreach_func parameter,
Anthony noted Property was soon going away.
v3: use QOM.
---
monitor.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/monitor.c b/monitor.c
index aadbdcb..28f5b9a 100644
--- a/monitor.c
+++ b/monitor.c
@@ -3917,6 +3917,27 @@ static void block_completion_it(void *opaque, BlockDriverState *bs)
}
}
+static void class_completion_it(ObjectClass *klass, void *opaque)
+{
+ const char *input = opaque;
+ const char *name = object_class_get_name(klass);
+
+ if (input[0] == '\0' || !strncmp(name, input, strlen(input))) {
+ readline_add_completion(cur_mon->rs, name);
+ }
+}
+
+static int driver_prop_completion_it(Property *info, void *opaque)
+{
+ const char *input = opaque;
+
+ if (input[0] == '\0' || !strncmp(info->name, input, strlen(input))) {
+ readline_add_completion(cur_mon->rs, info->name);
+ }
+
+ return 0;
+}
+
/* NOTE: this parser is an approximate form of the real command parser */
static void parse_cmdline(const char *cmdline,
int *pnb_args, char **args)
@@ -3957,6 +3978,7 @@ static void monitor_find_completion(const char *cmdline)
const char *ptype, *str;
const mon_cmd_t *cmd;
const KeyDef *key;
+ char *pkey;
parse_cmdline(cmdline, &nb_args, args);
#ifdef DEBUG_COMPLETION
@@ -3995,6 +4017,7 @@ static void monitor_find_completion(const char *cmdline)
goto cleanup;
}
+ key_get_info(cmd->args_type, &pkey);
ptype = next_arg_type(cmd->args_type);
for(i = 0; i < nb_args - 2; i++) {
if (*ptype != '\0') {
@@ -4040,9 +4063,44 @@ static void monitor_find_completion(const char *cmdline)
}
}
break;
+ case 'O':
+ if (!strcmp(pkey, "device")) {
+ char *sep = strrchr(str, ',');
+
+ readline_set_completion_index(cur_mon->rs,
+ strlen(sep ? sep + 1 : str));
+ if (sep) {
+ char *driver = g_strndup(str, strchr(str, ',') - str);
+ ObjectClass *klass = object_class_by_name(driver);
+ DeviceClass *info;
+ Property *prop;
+
+ g_free(driver);
+ if (!klass) {
+ break;
+ }
+
+ info = DEVICE_CLASS(klass);
+ for (prop = info->props; prop && prop->name; prop++) {
+ driver_prop_completion_it(prop, sep + 1);
+ }
+ if (info->bus_info) {
+ for (prop = info->bus_info->props;
+ prop && prop->name; prop++) {
+ driver_prop_completion_it(prop, sep + 1);
+ }
+ }
+ break;
+ }
+
+ object_class_foreach(class_completion_it, TYPE_DEVICE, 0,
+ (void *) str);
+ }
+ break;
default:
break;
}
+ g_free(pkey);
}
cleanup:
--
1.7.4.4
---------------------------------------------------------------------
Intel Technology Poland sp. z o.o.
z siedziba w Gdansku
ul. Slowackiego 173
80-298 Gdansk
Sad Rejonowy Gdansk Polnoc w Gdansku,
VII Wydzial Gospodarczy Krajowego Rejestru Sadowego,
numer KRS 101882
NIP 957-07-52-316
Kapital zakladowy 200.000 zl
This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2012-02-20 13:37 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-20 2:39 [Qemu-devel] [PATCH v3] Add tab-completion for device_add Andrzej Zaborowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).