summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRan Benita <ran234@gmail.com>2014-09-21 23:54:34 +0300
committerRan Benita <ran234@gmail.com>2014-09-22 00:05:38 +0300
commit68962aa1f988151bc443f30b49618bd70080d3a6 (patch)
treeabc2b63ce5173770405025c58a3e28f2e37c1baa
parent0224283fdfb76c1d813dbdbb0dc5cb6347d7c29a (diff)
downloadxorg-lib-libxkbcommon-68962aa1f988151bc443f30b49618bd70080d3a6.tar.gz
keymap-dump: combine modifier_map's with the same modifier
A bit less efficient, but makes for shorter, nicer output. Signed-off-by: Ran Benita <ran234@gmail.com>
-rw-r--r--src/xkbcomp/keymap-dump.c27
-rw-r--r--test/data/keymaps/host.xkb17
-rw-r--r--test/data/keymaps/stringcomp.data17
3 files changed, 26 insertions, 35 deletions
diff --git a/src/xkbcomp/keymap-dump.c b/src/xkbcomp/keymap-dump.c
index 775be0f..0b3d50a 100644
--- a/src/xkbcomp/keymap-dump.c
+++ b/src/xkbcomp/keymap-dump.c
@@ -598,6 +598,8 @@ write_symbols(struct xkb_keymap *keymap, struct buf *buf)
{
const struct xkb_key *key;
xkb_layout_index_t group;
+ xkb_mod_index_t i;
+ const struct xkb_mod *mod;
if (keymap->symbols_section_name)
write_buf(buf, "xkb_symbols \"%s\" {\n",
@@ -617,18 +619,21 @@ write_symbols(struct xkb_keymap *keymap, struct buf *buf)
if (key->num_groups > 0)
write_key(keymap, buf, key);
- xkb_keys_foreach(key, keymap) {
- xkb_mod_index_t i;
- const struct xkb_mod *mod;
-
- if (key->modmap == 0)
- continue;
-
- xkb_mods_enumerate(i, mod, &keymap->mods)
- if (key->modmap & (1u << i))
- write_buf(buf, "\tmodifier_map %s { %s };\n",
- xkb_atom_text(keymap->ctx, mod->name),
+ xkb_mods_enumerate(i, mod, &keymap->mods) {
+ bool had_any = false;
+ xkb_keys_foreach(key, keymap) {
+ if (key->modmap & (1u << i)) {
+ if (!had_any)
+ write_buf(buf, "\tmodifier_map %s { ",
+ xkb_atom_text(keymap->ctx, mod->name));
+ write_buf(buf, "%s%s",
+ had_any ? ", " : "",
KeyNameText(keymap->ctx, key->name));
+ had_any = true;
+ }
+ }
+ if (had_any)
+ write_buf(buf, " };\n");
}
write_buf(buf, "};\n\n");
diff --git a/test/data/keymaps/host.xkb b/test/data/keymaps/host.xkb
index 2c0f589..3b10467 100644
--- a/test/data/keymaps/host.xkb
+++ b/test/data/keymaps/host.xkb
@@ -1664,20 +1664,13 @@ xkb_symbols "pc_us_pt_2_us_3_inet(evdev)_group(shift_caps_toggle)_compose(ralt)"
key <I244> { [ XF86Battery ] };
key <I245> { [ XF86Bluetooth ] };
key <I246> { [ XF86WLAN ] };
- modifier_map Control { <LCTL> };
- modifier_map Shift { <LFSH> };
- modifier_map Shift { <RTSH> };
- modifier_map Mod1 { <LALT> };
+ modifier_map Shift { <LFSH>, <RTSH> };
modifier_map Lock { <CAPS> };
+ modifier_map Control { <LCTL>, <RCTL> };
+ modifier_map Mod1 { <LALT>, <META> };
modifier_map Mod2 { <NMLK> };
- modifier_map Mod5 { <LVL3> };
- modifier_map Control { <RCTL> };
- modifier_map Mod4 { <LWIN> };
- modifier_map Mod4 { <RWIN> };
- modifier_map Mod5 { <MDSW> };
- modifier_map Mod1 { <META> };
- modifier_map Mod4 { <SUPR> };
- modifier_map Mod4 { <HYPR> };
+ modifier_map Mod4 { <LWIN>, <RWIN>, <SUPR>, <HYPR> };
+ modifier_map Mod5 { <LVL3>, <MDSW> };
};
};
diff --git a/test/data/keymaps/stringcomp.data b/test/data/keymaps/stringcomp.data
index 119fb99..b9639c0 100644
--- a/test/data/keymaps/stringcomp.data
+++ b/test/data/keymaps/stringcomp.data
@@ -1900,21 +1900,14 @@ xkb_symbols "pc_us_ru_2_ca(multix)_3_de(neo)_4_inet(evdev)" {
key <I244> { [ XF86Battery ] };
key <I245> { [ XF86Bluetooth ] };
key <I246> { [ XF86WLAN ] };
- modifier_map Control { <LCTL> };
- modifier_map Shift { <LFSH> };
- modifier_map Shift { <RTSH> };
- modifier_map Mod1 { <LALT> };
+ modifier_map Shift { <LFSH>, <RTSH> };
modifier_map Lock { <CAPS> };
+ modifier_map Control { <LCTL> };
+ modifier_map Mod1 { <LALT>, <RALT>, <META> };
modifier_map Mod2 { <NMLK> };
- modifier_map Mod5 { <LVL3> };
modifier_map Mod3 { <RCTL> };
- modifier_map Mod1 { <RALT> };
- modifier_map Mod4 { <LWIN> };
- modifier_map Mod4 { <RWIN> };
- modifier_map Mod5 { <MDSW> };
- modifier_map Mod1 { <META> };
- modifier_map Mod4 { <SUPR> };
- modifier_map Mod4 { <HYPR> };
+ modifier_map Mod4 { <LWIN>, <RWIN>, <SUPR>, <HYPR> };
+ modifier_map Mod5 { <LVL3>, <MDSW> };
};
};