diff options
author | Pierre Le Marre <dev@wismill.eu> | 2023-06-16 09:54:09 +0200 |
---|---|---|
committer | Wismill <dev@wismill.eu> | 2023-06-26 09:52:38 +0200 |
commit | de9d82077c24fe8511bed8b0b773e40b97294a5f (patch) | |
tree | c7904b289c8d988818734a16d62aba40967591c0 | |
parent | 2c86216b5b50a3519b07c8a8e664bc75b854cc04 (diff) | |
download | libxkbcommon-de9d82077c24fe8511bed8b0b773e40b97294a5f.tar.gz libxkbcommon-de9d82077c24fe8511bed8b0b773e40b97294a5f.tar.bz2 libxkbcommon-de9d82077c24fe8511bed8b0b773e40b97294a5f.zip |
interactive-evdev: includes options
Currently there is no interactive tool allowing to set the include
paths of the context, such as in "compile-keymap". Note that only
"interactive-evdev" makes sense, because it does not rely on a
compositor.
Add --include and --include-defaults to "interactive-evdev" tool.
The code is adapted from "compile-keymap".
-rw-r--r-- | tools/interactive-evdev.c | 39 | ||||
-rw-r--r-- | tools/xkbcli-interactive-evdev.1 | 12 |
2 files changed, 48 insertions, 3 deletions
diff --git a/tools/interactive-evdev.c b/tools/interactive-evdev.c index 8b0bce0..6cacae6 100644 --- a/tools/interactive-evdev.c +++ b/tools/interactive-evdev.c @@ -59,6 +59,7 @@ static bool report_state_changes; static bool with_compose; static enum xkb_consumed_mode consumed_mode = XKB_CONSUMED_MODE_XKB; +#define DEFAULT_INCLUDE_PATH_PLACEHOLDER "__defaults__" #define NLONGS(n) (((n) + LONG_BIT - 1) / LONG_BIT) static bool @@ -365,8 +366,9 @@ sigintr_handler(int signum) static void usage(FILE *fp, char *progname) { - fprintf(fp, "Usage: %s [--rules=<rules>] [--model=<model>] " - "[--layout=<layout>] [--variant=<variant>] [--options=<options>]\n", + fprintf(fp, "Usage: %s [--include=<path>] [--include-defaults] " + "[--rules=<rules>] [--model=<model>] [--layout=<layout>] " + "[--variant=<variant>] [--options=<options>]\n", progname); fprintf(fp, " or: %s --keymap <path to keymap file>\n", progname); @@ -386,6 +388,8 @@ main(int argc, char *argv[]) struct xkb_context *ctx = NULL; struct xkb_keymap *keymap = NULL; struct xkb_compose_table *compose_table = NULL; + const char *includes[64]; + size_t num_includes = 0; const char *rules = NULL; const char *model = NULL; const char *layout = NULL; @@ -395,6 +399,8 @@ main(int argc, char *argv[]) const char *locale; struct sigaction act; enum options { + OPT_INCLUDE, + OPT_INCLUDE_DEFAULTS, OPT_RULES, OPT_MODEL, OPT_LAYOUT, @@ -408,6 +414,8 @@ main(int argc, char *argv[]) }; static struct option opts[] = { {"help", no_argument, 0, 'h'}, + {"include", required_argument, 0, OPT_INCLUDE}, + {"include-defaults", no_argument, 0, OPT_INCLUDE_DEFAULTS}, {"rules", required_argument, 0, OPT_RULES}, {"model", required_argument, 0, OPT_MODEL}, {"layout", required_argument, 0, OPT_LAYOUT}, @@ -432,6 +440,20 @@ main(int argc, char *argv[]) break; switch (opt) { + case OPT_INCLUDE: + if (num_includes >= ARRAY_SIZE(includes)) { + fprintf(stderr, "error: too many includes\n"); + exit(EXIT_INVALID_USAGE); + } + includes[num_includes++] = optarg; + break; + case OPT_INCLUDE_DEFAULTS: + if (num_includes >= ARRAY_SIZE(includes)) { + fprintf(stderr, "error: too many includes\n"); + exit(EXIT_INVALID_USAGE); + } + includes[num_includes++] = DEFAULT_INCLUDE_PATH_PLACEHOLDER; + break; case OPT_RULES: rules = optarg; break; @@ -479,12 +501,23 @@ main(int argc, char *argv[]) } } - ctx = xkb_context_new(XKB_CONTEXT_NO_FLAGS); + ctx = xkb_context_new(XKB_CONTEXT_NO_DEFAULT_INCLUDES); if (!ctx) { fprintf(stderr, "Couldn't create xkb context\n"); goto out; } + if (num_includes == 0) + includes[num_includes++] = DEFAULT_INCLUDE_PATH_PLACEHOLDER; + + for (size_t i = 0; i < num_includes; i++) { + const char *include = includes[i]; + if (strcmp(include, DEFAULT_INCLUDE_PATH_PLACEHOLDER) == 0) + xkb_context_include_path_append_default(ctx); + else + xkb_context_include_path_append(ctx, include); + } + if (keymap_path) { FILE *file = fopen(keymap_path, "rb"); if (!file) { diff --git a/tools/xkbcli-interactive-evdev.1 b/tools/xkbcli-interactive-evdev.1 index 58be555..13c7b2c 100644 --- a/tools/xkbcli-interactive-evdev.1 +++ b/tools/xkbcli-interactive-evdev.1 @@ -37,6 +37,18 @@ This is a debugging tool, its behavior or output is not guaranteed to be stable. .It Fl \-help Print help and exit . +.It Fl \-include Ar PATH +Add the given path to the include path list. +This option is order\-dependent, include paths given first are searched first. +If an include path is given, the default include path list is not used. +Use +.Fl -\-include\-defaults +to add the default include paths. +. +.It Fl \-include\-defaults +Add the default set of include directories. +This option is order-dependent, include paths given first are searched first. +. .It Fl \-rules Ar rules The XKB ruleset . |