From: Thomas Jaeger Date: Wed, 7 Oct 2009 17:05:15 +0000 (-0400) Subject: Rework 'xinput list' code X-Git-Url: https://diplodocus.org/git/xorg-xinput/commitdiff_plain/7010a6c924ce6937c8e040c837a118663d6dfdb3?ds=inline;hp=7d930a42e6c294ecaaf42585e37b8dc24be8a805 Rework 'xinput list' code * Drop the questionable --loop option * Add a --long option (opposite of --short) * Make --short the default if no device argument is given * XI2: Make it possible to query a single device Signed-off-by: Thomas Jaeger squashed in a man page update for --short and --long. Signed-off-by: Peter Hutterer --- diff --git a/man/xinput.man b/man/xinput.man index 518e1a0..eba85fd 100644 --- a/man/xinput.man +++ b/man/xinput.man @@ -6,7 +6,9 @@ xinput - utility to configure and test XInput devices .SH SYNOPSIS .B xinput -[version] [list [\fIdevice_name\fP]] [set-pointer \fIdevice_name\fP] +[version] +[list [--short || --long] [\fIdevice_name\fP]] +[set-pointer \fIdevice_name\fP] [get-feedbacks \fIdevice_name\fP] [set-mode \fIdevice_name\fP \fIABSOLUTE|RELATIVE\fP] [set-ptr-feedback \fIdevice_name\fP \fIthreshold\fP \fInum\fP \fIdenom\fP] @@ -22,10 +24,12 @@ test if the XInput extension is available and return the version number of the program. .PP .TP 8 -.B xinput list [\fIdevice_name\fP] -If no argument is given list all the input devices showing all their -features. If an argument is given, show all the feature of \fIdevice_name\fP. -Uses XListInputDevices(3). +.B xinput list [--short || --long] [\fIdevice_name\fP] +If no argument is given list all the input devices. If an argument is given, +show all the features of \fIdevice_name\fP. Uses XListInputDevices(3). +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. .PP .TP 8 .B xinput get-feedbacks \fIdevice_name\fP diff --git a/src/list.c b/src/list.c index 0abde7a..ecf1f4b 100644 --- a/src/list.c +++ b/src/list.c @@ -104,42 +104,15 @@ print_info(Display* dpy, XDeviceInfo *info, Bool shortformat) } static int list_xi1(Display *display, - int argc, - char *argv[], - char *name, - char *desc) + int shortformat) { XDeviceInfo *info; int loop; - int shortformat = False; - int daemon = False; + int num_devices; - shortformat = (argc == 1 && strcmp(argv[0], "--short") == 0); - daemon = (argc == 1 && strcmp(argv[0], "--loop") == 0); - - if (argc == 0 || shortformat || daemon) { - int num_devices; - - do { - info = XListInputDevices(display, &num_devices); - for(loop=0; loop= 1 && strcmp(argv[0], "--short") == 0); + int longformat = (argc >= 1 && strcmp(argv[0], "--long") == 0); + int arg_dev = shortformat || longformat; + + if (argc > arg_dev) + { #ifdef HAVE_XI2 - if (xinput_version(display) == XI_2_Major) - return list_xi2(display, argc, argv, name, desc); + if (xinput_version(display) == XI_2_Major) + { + XIDeviceInfo *info = xi2_find_device_info(display, argv[arg_dev]); + + if (!info) { + fprintf(stderr, "unable to find device %s\n", argv[arg_dev]); + return EXIT_FAILURE; + } else { + print_info_xi2(display, info, shortformat); + return EXIT_SUCCESS; + } + } else #endif - return list_xi1(display, argc, argv, name, desc); + { + XDeviceInfo *info = find_device_info(display, argv[arg_dev], False); + + if (!info) { + fprintf(stderr, "unable to find device %s\n", argv[arg_dev]); + return EXIT_FAILURE; + } else { + print_info(display, info, shortformat); + return EXIT_SUCCESS; + } + } + } else { +#ifdef HAVE_XI2 + if (xinput_version(display) == XI_2_Major) + return list_xi2(display, !longformat); +#endif + return list_xi1(display, !longformat); + } } /* end of list.c */ diff --git a/src/xinput.c b/src/xinput.c index 1a1e7ce..3c8b23c 100644 --- a/src/xinput.c +++ b/src/xinput.c @@ -68,7 +68,7 @@ static entry drivers[] = set_mode }, {"list", - "[--loop || --short || ...]", + "[--short || --long] [...]", list }, {"query-state",