diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2011-01-18 12:55:46 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2011-01-20 07:41:58 +1000 |
commit | ab90151162d39607e264e715a582e783e0da3c3a (patch) | |
tree | 84a2480e811468d31c3579a317656e312b4f8464 | |
parent | ff1ff82438d35e6d68d1bf3b16bfc3520120247c (diff) |
Add --name-only flag for 'xinput list'.
The default output of xinput list is hard to parse by scripts. Provide a
--name-only option to print the device name only, without any other
information.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Dirk Wallenstein <halsmit@t-online.de>
Tested-by: Dirk Wallenstein <halsmit@t-online.de>
-rw-r--r-- | man/xinput.man | 5 | ||||
-rw-r--r-- | src/list.c | 31 | ||||
-rw-r--r-- | src/xinput.c | 2 |
3 files changed, 30 insertions, 8 deletions
diff --git a/man/xinput.man b/man/xinput.man index 65b05e3..035becc 100644 --- a/man/xinput.man +++ b/man/xinput.man @@ -17,12 +17,15 @@ of the program and the version supported by the server. This option does not require a device name. .PP .TP 8 -.B --list [--short || --long] [\fIdevice\fP] +.B --list [--short || --long || --name-only] [\fIdevice\fP] If no argument is given list all the input devices. If an argument is given, show all the features of \fIdevice\fP. If --long is provided, the output includes detailed information about the capabilities of each devices. Otherwise, or if --short is provided, only the device names and some minimal information is listed. +If --name-only is provided, the output is limited to the device names. One +device name is listed per line. Note that the order the devices are listed +is undefined. .PP .TP 8 .B --get-feedbacks \fIdevice\fP @@ -26,7 +26,8 @@ enum print_format { FORMAT_SHORT, - FORMAT_LONG + FORMAT_LONG, + FORMAT_NAME }; @@ -40,6 +41,12 @@ print_info(Display* dpy, XDeviceInfo *info, enum print_format format) XValuatorInfoPtr v; XAxisInfoPtr a; + if (format == FORMAT_NAME) + { + printf("%s\n", info->name); + return; + } + printf("\"%s\"\tid=%ld\t[", info->name, info->id); switch (info->use) { @@ -192,6 +199,12 @@ print_classes_xi2(Display* display, XIAnyClassInfo **classes, static void print_info_xi2(Display* display, XIDeviceInfo *dev, enum print_format format) { + if (format == FORMAT_NAME) + { + printf("%s\n", dev->name); + return; + } + printf("%-40s\tid=%d\t[", dev->name, dev->deviceid); switch(dev->use) { @@ -246,10 +259,13 @@ list_xi2(Display *display, dev = &info[i]; if (dev->use == XIMasterPointer || dev->use == XIMasterKeyboard) { - if (dev->use == XIMasterPointer) - printf("⎡ "); - else - printf("⎣ "); + if (format == FORMAT_SHORT || format == FORMAT_LONG) + { + if (dev->use == XIMasterPointer) + printf("⎡ "); + else + printf("⎣ "); + } print_info_xi2(display, dev, format); for (j = 0; j < ndevices; j++) @@ -259,7 +275,8 @@ list_xi2(Display *display, if ((sd->use == XISlavePointer || sd->use == XISlaveKeyboard) && (sd->attachment == dev->deviceid)) { - printf("%s ↳ ", dev->use == XIMasterPointer ? "⎜" : " "); + if (format == FORMAT_SHORT || format == FORMAT_LONG) + printf("%s ↳ ", dev->use == XIMasterPointer ? "⎜" : " "); print_info_xi2(display, sd, format); } } @@ -298,6 +315,8 @@ list(Display *display, format = FORMAT_SHORT; else if (strcmp(argv[0], "--long") == 0) format = FORMAT_LONG; + else if (strcmp(argv[0], "--name-only") == 0) + format = FORMAT_NAME; arg_dev++; } diff --git a/src/xinput.c b/src/xinput.c index 9ca3832..86c163e 100644 --- a/src/xinput.c +++ b/src/xinput.c @@ -68,7 +68,7 @@ static entry drivers[] = set_mode }, {"list", - "[--short || --long] [<device name>...]", + "[--short || --long || --name-only] [<device name>...]", list }, {"query-state", |