interactive.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright © 2025 Pierre Le Marre <dev@wismill.eu>
  3. * SPDX-License-Identifier: MIT
  4. */
  5. #include "config.h"
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include "src/utils.h"
  9. #include "tools-common.h"
  10. #ifdef KEYMAP_DUMP
  11. #define TOOL "dump-keymap"
  12. #else
  13. #define TOOL "interactive"
  14. #endif
  15. int
  16. main(int argc, char **argv)
  17. {
  18. const char *new_argv[64] = {NULL};
  19. new_argv[0] = select_backend(
  20. #if HAVE_XKBCLI_INTERACTIVE_WAYLAND
  21. TOOL "-wayland",
  22. #else
  23. NULL,
  24. #endif
  25. #if HAVE_XKBCLI_INTERACTIVE_X11
  26. TOOL "-x11",
  27. #else
  28. NULL,
  29. #endif
  30. #if HAVE_XKBCLI_INTERACTIVE_EVDEV && !defined(KEYMAP_DUMP)
  31. TOOL "-evdev"
  32. #else
  33. NULL
  34. #endif
  35. );
  36. if (new_argv[0] == NULL) {
  37. fprintf(
  38. stderr,
  39. "ERROR: Unable to find a proper backend for "
  40. #ifdef KEYMAP_DUMP
  41. "keymap dumping\n"
  42. #else
  43. "interactive debugging\n"
  44. #endif
  45. );
  46. return EXIT_FAILURE;
  47. }
  48. for (int k = 1; k < MIN(argc, (int) ARRAY_SIZE(new_argv)); k++) {
  49. new_argv[k] = argv[k];
  50. }
  51. return tools_exec_command("xkbcli", argc, new_argv);
  52. }