summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2011-01-18 12:55:46 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-01-20 07:41:58 +1000
commitab90151162d39607e264e715a582e783e0da3c3a (patch)
tree84a2480e811468d31c3579a317656e312b4f8464
parentff1ff82438d35e6d68d1bf3b16bfc3520120247c (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.man5
-rw-r--r--src/list.c31
-rw-r--r--src/xinput.c2
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
diff --git a/src/list.c b/src/list.c
index 9538a0a..0e6f9be 100644
--- a/src/list.c
+++ b/src/list.c
@@ -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",