write_keycodes(struct xkb_keymap *keymap, char **buf, size_t *size,
size_t *offset)
{
- xkb_keycode_t kc;
+ struct xkb_key *key;
struct xkb_key_alias *alias;
int i;
write_buf(keymap, buf, size, offset, "\t\tmaximum = %d;\n",
keymap->max_key_code);
- for (kc = keymap->min_key_code; kc <= keymap->max_key_code; kc++) {
- if (darray_item(keymap->key_names, kc).name[0] == '\0')
+ xkb_foreach_key(key, keymap) {
+ if (key->name[0] == '\0')
continue;
write_buf(keymap, buf, size, offset, "\t\t%6s = %d;\n",
- XkbcKeyNameText(darray_item(keymap->key_names, kc).name),
- kc);
+ XkbcKeyNameText(key->name), XkbKeyGetKeycode(keymap, key));
}
for (i = 0; i < XkbNumIndicators; i++) {
static bool
write_keysyms(struct xkb_keymap *keymap, char **buf, size_t *size,
- size_t *offset, xkb_keycode_t kc, unsigned int group)
+ size_t *offset, struct xkb_key *key, unsigned int group)
{
const xkb_keysym_t *syms;
int num_syms, level;
#define OUT_BUF_LEN 128
char out_buf[OUT_BUF_LEN];
- for (level = 0; level < XkbKeyGroupWidth(keymap, kc, group); level++) {
+ for (level = 0; level < XkbKeyGroupWidth(keymap, key, group); level++) {
if (level != 0)
write_buf(keymap, buf, size, offset, ", ");
- num_syms = xkb_key_get_syms_by_level(keymap, kc, group, level,
+ num_syms = xkb_key_get_syms_by_level(keymap, key, group, level,
&syms);
if (num_syms == 0) {
write_buf(keymap, buf, size, offset, "%15s", "NoSymbol");
write_symbols(struct xkb_keymap *keymap, char **buf, size_t *size,
size_t *offset)
{
- xkb_keycode_t kc;
+ struct xkb_key *key;
int group, tmp;
bool showActions;
if (tmp > 0)
write_buf(keymap, buf, size, offset, "\n");
- for (kc = keymap->min_key_code; kc <= keymap->max_key_code; kc++) {
+ xkb_foreach_key(key, keymap) {
bool simple = true;
- if (xkb_key_num_groups(keymap, kc) == 0)
+ if (key->num_groups == 0)
continue;
write_buf(keymap, buf, size, offset, "\t\tkey %6s {",
- XkbcKeyNameText(darray_item(keymap->key_names, kc).name));
- if (keymap->explicit) {
- if ((keymap->explicit[kc] & XkbExplicitKeyTypesMask)) {
- bool multi_type = false;
- int type = XkbKeyTypeIndex(keymap, kc, 0);
-
- simple = false;
-
- for (group = 0; group < xkb_key_num_groups(keymap, kc);
- group++) {
- if (XkbKeyTypeIndex(keymap, kc, group) != type) {
- multi_type = true;
- break;
- }
- }
- if (multi_type) {
- for (group = 0;
- group < xkb_key_num_groups(keymap, kc);
- group++) {
- if (!(keymap->explicit[kc] & (1 << group)))
- continue;
- type = XkbKeyTypeIndex(keymap, kc, group);
- write_buf(keymap, buf, size, offset,
- "\n\t\t\ttype[group%d]= \"%s\",",
- group + 1,
- darray_item(keymap->types, type).name);
- }
+ XkbcKeyNameText(key->name));
+
+ if (key->explicit & XkbExplicitKeyTypesMask) {
+ bool multi_type = false;
+ int type = XkbKeyTypeIndex(key, 0);
+
+ simple = false;
+
+ for (group = 0; group < key->num_groups; group++) {
+ if (XkbKeyTypeIndex(key, group) != type) {
+ multi_type = true;
+ break;
}
- else {
+ }
+
+ if (multi_type) {
+ for (group = 0; group < key->num_groups; group++) {
+ if (!(key->explicit & (1 << group)))
+ continue;
+ type = XkbKeyTypeIndex(key, group);
write_buf(keymap, buf, size, offset,
- "\n\t\t\ttype= \"%s\",",
+ "\n\t\t\ttype[group%d]= \"%s\",",
+ group + 1,
darray_item(keymap->types, type).name);
}
}
- if (keymap->explicit[kc] & XkbExplicitAutoRepeatMask) {
- if (keymap->per_key_repeat[kc / 8] & (1 << (kc % 8)))
- write_buf(keymap, buf, size, offset,
- "\n\t\t\trepeat= Yes,");
- else
- write_buf(keymap, buf, size, offset,
- "\n\t\t\trepeat= No,");
- simple = false;
- }
- if (keymap->vmodmap[kc] &&
- (keymap->explicit[kc] & XkbExplicitVModMapMask)) {
+ else {
write_buf(keymap, buf, size, offset,
- "\n\t\t\tvirtualMods= %s,",
- get_mod_mask_text(keymap, 0, keymap->vmodmap[kc]));
+ "\n\t\t\ttype= \"%s\",",
+ darray_item(keymap->types, type).name);
}
}
- switch (XkbOutOfRangeGroupAction(XkbKeyGroupInfo(keymap, kc))) {
+ if (key->explicit & XkbExplicitAutoRepeatMask) {
+ if (key->repeats)
+ write_buf(keymap, buf, size, offset,
+ "\n\t\t\trepeat= Yes,");
+ else
+ write_buf(keymap, buf, size, offset,
+ "\n\t\t\trepeat= No,");
+ simple = false;
+ }
+
+ if (key->vmodmap && (key->explicit & XkbExplicitVModMapMask)) {
+ write_buf(keymap, buf, size, offset, "\n\t\t\tvirtualMods= %s,",
+ get_mod_mask_text(keymap, 0, key->vmodmap));
+ }
+
+ switch (key->out_of_range_group_action) {
case XkbClampIntoRange:
write_buf(keymap, buf, size, offset, "\n\t\t\tgroupsClamp,");
break;
case XkbRedirectIntoRange:
write_buf(keymap, buf, size, offset,
"\n\t\t\tgroupsRedirect= Group%d,",
- XkbOutOfRangeGroupNumber(XkbKeyGroupInfo(keymap,
- kc)) + 1);
+ key->out_of_range_group_number + 1);
break;
}
- if (keymap->explicit == NULL ||
- (keymap->explicit[kc] & XkbExplicitInterpretMask))
- showActions = XkbKeyHasActions(keymap, kc);
+ if (key->explicit & XkbExplicitInterpretMask)
+ showActions = XkbKeyHasActions(key);
else
showActions = false;
- if (xkb_key_num_groups(keymap, kc) > 1 || showActions)
+ if (key->num_groups > 1 || showActions)
simple = false;
if (simple) {
write_buf(keymap, buf, size, offset, "\t[ ");
- if (!write_keysyms(keymap, buf, size, offset, kc, 0))
+ if (!write_keysyms(keymap, buf, size, offset, key, 0))
return false;
write_buf(keymap, buf, size, offset, " ] };\n");
}
union xkb_action *acts;
int level;
- acts = XkbKeyActionsPtr(keymap, kc);
- for (group = 0; group < xkb_key_num_groups(keymap, kc); group++) {
+ acts = XkbKeyActionsPtr(keymap, key);
+ for (group = 0; group < key->num_groups; group++) {
if (group != 0)
write_buf(keymap, buf, size, offset, ",");
write_buf(keymap, buf, size, offset,
"\n\t\t\tsymbols[Group%d]= [ ", group + 1);
- if (!write_keysyms(keymap, buf, size, offset, kc, group))
+ if (!write_keysyms(keymap, buf, size, offset, key, group))
return false;
write_buf(keymap, buf, size, offset, " ]");
if (showActions) {
write_buf(keymap, buf, size, offset,
",\n\t\t\tactions[Group%d]= [ ", group + 1);
for (level = 0;
- level < XkbKeyGroupWidth(keymap, kc, group);
+ level < XkbKeyGroupWidth(keymap, key, group);
level++) {
if (level != 0)
write_buf(keymap, buf, size, offset, ", ");
NULL, NULL);
}
write_buf(keymap, buf, size, offset, " ]");
- acts += XkbKeyGroupsWidth(keymap, kc);
+ acts += key->width;
}
}
write_buf(keymap, buf, size, offset, "\n\t\t};\n");
}
}
- if (keymap->modmap) {
- for (kc = keymap->min_key_code; kc <= keymap->max_key_code; kc++) {
- int mod;
- if (keymap->modmap[kc] == 0)
- continue;
+ xkb_foreach_key(key, keymap) {
+ int mod;
- for (mod = 0; mod < XkbNumModifiers; mod++) {
- if (!(keymap->modmap[kc] & (1 << mod)))
- continue;
+ if (key->modmap == 0)
+ continue;
- write_buf(keymap, buf, size, offset,
- "\t\tmodifier_map %s { %s };\n",
- get_mod_index_text(mod),
- XkbcKeyNameText(darray_item(keymap->key_names,
- kc).name));
- }
+ for (mod = 0; mod < XkbNumModifiers; mod++) {
+ if (!(key->modmap & (1 << mod)))
+ continue;
+
+ write_buf(keymap, buf, size, offset,
+ "\t\tmodifier_map %s { %s };\n",
+ get_mod_index_text(mod),
+ XkbcKeyNameText(key->name));
}
}