Hash :
a83a482c
Author :
Date :
2025-07-18T11:27:52
tools: Add variants with automatic session type detection Added: - `xkbcli-interactive` - `xkbcli-dump-keymap`
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
/*
* Copyright © 2020 Red Hat, Inc.
* SPDX-License-Identifier: MIT
*/
#include "config.h"
#include <getopt.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include "tools-common.h"
static void
usage(void)
{
printf("Usage: xkbcli [--help|-h] [--version|-V] <command> [<args>]\n"
"\n"
"Global options:\n"
" -h, --help ...... show this help and exit\n"
" -V, --version ... show version information and exit\n"
/* WARNING: The following is parsed by the bash completion script.
* Any change to the format (in particular to the indentation)
* should kept in the script in sync. */
"Commands:\n"
#if HAVE_XKBCLI_LIST
" list\n"
" List available rules, models, layouts, variants and options\n"
"\n"
#endif
#if HAVE_XKBCLI_INTERACTIVE_WAYLAND || HAVE_XKBCLI_INTERACTIVE_X11
" interactive\n"
" Interactive debugger for XKB keymaps; automatically select from"
" the following backends, if available: Wayland, X11 and evdev.\n"
"\n"
#endif
#if HAVE_XKBCLI_INTERACTIVE_WAYLAND
" interactive-wayland\n"
" Interactive debugger for XKB keymaps for Wayland\n"
"\n"
#endif
#if HAVE_XKBCLI_INTERACTIVE_X11
" interactive-x11\n"
" Interactive debugger for XKB keymaps for X11\n"
"\n"
#endif
#if HAVE_XKBCLI_INTERACTIVE_EVDEV
" interactive-evdev\n"
" Interactive debugger for XKB keymaps for evdev\n"
"\n"
#endif
#if HAVE_XKBCLI_DUMP_KEYMAP_WAYLAND || HAVE_XKBCLI_DUMP_KEYMAP_X11
" dump-keymap\n"
" Dump a XKB keymap from a Wayland or X11 compositor\n"
"\n"
#endif
#if HAVE_XKBCLI_DUMP_KEYMAP_WAYLAND
" dump-keymap-wayland\n"
" Dump a XKB keymap from a Wayland compositor\n"
"\n"
#endif
#if HAVE_XKBCLI_DUMP_KEYMAP_X11
" dump-keymap-x11\n"
" Dump a XKB keymap from an X server\n"
"\n"
#endif
#if HAVE_XKBCLI_COMPILE_KEYMAP
" compile-keymap\n"
" Compile an XKB keymap\n"
"\n"
#endif
#if HAVE_XKBCLI_COMPILE_COMPOSE
" compile-compose\n"
" Compile a Compose file\n"
"\n"
#endif
#if HAVE_XKBCLI_HOW_TO_TYPE
" how-to-type\n"
" Print key sequences to type a Unicode codepoint\n"
"\n"
#endif
);
}
int
main(int argc, char **argv)
{
enum options {
OPT_HELP = 1,
OPT_VERSION,
};
int option_index = 0;
setlocale(LC_ALL, "");
while (1) {
int c;
static struct option opts[] = {
{ "help", no_argument, 0, OPT_HELP },
{ "version", no_argument, 0, OPT_VERSION },
{ 0, 0, 0, 0}
};
c = getopt_long(argc, argv, "+hV", opts, &option_index);
if (c == -1)
break;
switch(c) {
case 'h':
case OPT_HELP:
usage();
return EXIT_SUCCESS;
case 'V':
case OPT_VERSION:
printf("%s\n", LIBXKBCOMMON_VERSION);
return EXIT_SUCCESS;
default:
usage();
return EXIT_INVALID_USAGE;
}
}
if (optind >= argc) {
usage();
return EXIT_INVALID_USAGE;
}
argv += optind;
argc -= optind;
return tools_exec_command("xkbcli", argc, (const char **) argv);
}