/* This sanity check seems redundant with the verification of the X11 layout done on the next
* step. However xkbcommon is an optional dependency hence the verification might be a NOP. */
r = find_converted_keymap(&xc, &converted);
+ if (r == 0 && xc.variant) {
+ /* If we still haven't find a match, try with no variant, it's still better than nothing. */
+ xc.variant = NULL;
+ r = find_converted_keymap(&xc, &converted);
+ }
if (r < 0)
return r;
}
r = find_converted_keymap(xc, &keymap);
- if (r == 0)
+ if (r == 0) {
r = find_legacy_keymap(xc, &keymap);
+ if (r == 0 && xc->variant)
+ /* If we still haven't find a match, try with no variant, it's still better than
+ * nothing. */
+ r = find_converted_keymap(
+ &(X11Context) {
+ .layout = xc->layout,
+ },
+ &keymap);
+ }
if (r < 0)
return r;
assert_se(r == 1);
assert_se(streq(ans, "pl"));
+ ans = mfree(ans);
assert_se(find_converted_keymap(
&(X11Context) {
TEST(vconsole_convert_to_x11) {
_cleanup_(x11_context_clear) X11Context xc = {};
_cleanup_(vc_context_clear) VCContext vc = {};
+ int r;
log_info("/* test empty keymap */");
assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
assert_se(vconsole_convert_to_x11(&vc, &xc) >= 0);
assert_se(streq(xc.layout, "us"));
assert_se(xc.variant == NULL);
+ x11_context_clear(&xc);
+
+ /* "gh" has no mapping in kbd-model-map and kbd provides a converted keymap for this layout. */
+ log_info("/* test with a converted keymap (gh:) */");
+ assert_se(free_and_strdup(&vc.keymap, "gh") >= 0);
+ r = vconsole_convert_to_x11(&vc, &xc);
+ if (r == 0) {
+ log_info("Skipping rest of %s: keymaps are not installed", __func__);
+ return;
+ }
+ assert_se(r > 0);
+ assert_se(streq(xc.layout, "gh"));
+ assert_se(xc.variant == NULL);
+ x11_context_clear(&xc);
+
+ log_info("/* test with converted keymap and with a known variant (gh:ewe) */");
+ assert_se(free_and_strdup(&vc.keymap, "gh-ewe") >= 0);
+ assert_se(vconsole_convert_to_x11(&vc, &xc) > 0);
+ assert_se(streq(xc.layout, "gh"));
+ assert_se(streq(xc.variant, "ewe"));
+ x11_context_clear(&xc);
+
+ log_info("/* test with converted keymap and with an unknown variant (gh:ewe) */");
+ assert_se(free_and_strdup(&vc.keymap, "gh-foobar") > 0);
+ assert_se(vconsole_convert_to_x11(&vc, &xc) > 0);
+ assert_se(streq(xc.layout, "gh"));
+ assert_se(xc.variant == NULL);
+ x11_context_clear(&xc);
}
TEST(x11_convert_to_vconsole) {
assert_in "XKBVARIANT=intl" "$vc"
assert_in "XKBOPTIONS=terminate:ctrl_alt_bksp" "$vc"
elif [[ "$i" =~ ^us-.* ]]; then
- assert_in "X11 Layout: .unset." "$output"
- assert_not_in "X11 Model:" "$output"
- assert_not_in "X11 Variant:" "$output"
- assert_not_in "X11 Options:" "$output"
+ assert_in "X11 Layout: us" "$output"
+ assert_in "X11 Model: microsoftpro" "$output"
+ assert_in "X11 Variant:" "$output"
+ assert_in "X11 Options: terminate:ctrl_alt_bksp" "$output"
- assert_not_in "XKBLAYOUT" "$vc"
- assert_not_in "XKBMODEL" "$vc"
- assert_not_in "XKBVARIANT" "$vc"
- assert_not_in "XKBOPTIONS" "$vc"
+ assert_in "XKBLAYOUT=us" "$vc"
+ assert_in "XKBMODEL=microsoftpro" "$vc"
+ assert_in "XKBVARIANT=" "$vc"
+ assert_in "XKBOPTIONS=terminate:ctrl_alt_bksp" "$vc"
fi
done