Received: from [140.186.70.92] (port=59525 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1ORTR4-0002CM-FH for qemu-devel@nongnu.org; Wed, 23 Jun 2010 13:08:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1ORTR2-0005uz-DR for qemu-devel@nongnu.org; Wed, 23 Jun 2010 13:08:26 -0400 Received: from mx1.redhat.com ([209.132.183.28]:62802) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1ORTR2-0005ud-5l for qemu-devel@nongnu.org; Wed, 23 Jun 2010 13:08:24 -0400 From: Markus Armbruster Subject: Re: [Qemu-devel] [PATCH v4 11/23] monitor: Add completion support for option lists References: <68962306385412f48130690d29a0349b322b9930.1276641524.git.jan.kiszka@web.de> <4C21E1CB.6040600@siemens.com> Date: Wed, 23 Jun 2010 19:08:18 +0200 In-Reply-To: <4C21E1CB.6040600@siemens.com> (Jan Kiszka's message of "Wed, 23 Jun 2010 12:28:27 +0200") Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Anthony Liguori , Juan Quintela , "qemu-devel@nongnu.org" , Luiz Capitulino , Blue Swirl , Jan Kiszka , Avi Kivity Jan Kiszka writes: > Markus Armbruster wrote: >> Jan Kiszka writes: >> >>> From: Jan Kiszka >>> >>> This enables command line completion inside option strings. A list of >>> expected key names and their completion type can be appended to the 'O' >>> inside parentheses ('O(key:type,...)'). The first use case is block >>> device completion for the 'drive' option of 'device_add'. >>> >>> Signed-off-by: Jan Kiszka >>> --- >>> monitor.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++--------- >>> qemu-monitor.hx | 2 +- >>> 2 files changed, 58 insertions(+), 12 deletions(-) >>> >>> diff --git a/monitor.c b/monitor.c >>> index c1006b4..3e0d862 100644 >>> --- a/monitor.c >>> +++ b/monitor.c >>> @@ -68,6 +68,9 @@ >>> * 'O' option string of the form NAME=VALUE,... >>> * parsed according to QemuOptsList given by its name >>> * Example: 'device:O' uses qemu_device_opts. >>> + * Command completion for specific keys can be requested via >>> + * appending '(NAME:TYPE,...)' with 'F', 'B' as type. >>> + * Example: 'device:O(bus:Q)' to expand 'bus=...' as qtree path. >>> * Restriction: only lists with empty desc are supported >>> * TODO lift the restriction >>> * 'i' 32 bit integer >> >> Ugh. >> >> Replacement of args_type by a proper data structure is long overdue. We >> keep piling features into that poor, hapless string. >> >> Information on how to complete QemuOptsList options arguably belongs >> into the option description, i.e. QemuOptDesc. > > For sure, that would be better. I just wonder how much of it should be > stuffed into this series. I guess I will drop this part for now, just > focusing on what device_show makes direct use of. Same for separate args > for HMP and QMP. Sensible. Speaking of args_type. We've accumulated too many ways to represent dynamic data types, and too many ways to describe data types. The most powerful dynamic data type is QObject. It comes with a useful plain-text representation (JSON). We lack a data type for describing QObjects. We use args_type to describe special QObjects, namely monitor command arguments. We've clearly stretched that to the limit and then some. We could use a general solution. JSON Schema as its plain-text representation could be nice. Then we have QemuOpts. It's more limited (flat list instead of trees), but it comes with a real data type to describe it (QemuOptsList). There's also QEMUOptionParameter. Serves a similar purpose. I don't know why we have both. Over in qdev-land, we find Property, which can be viewed a data type to describe (parts of) a struct. Some unification would be nice.