/* Looks for a key binding first in the given map, then in the generic map, and * lastly in the default keybindings. */ enum request get_keybinding(const struct keymap *keymap, const struct key key[], size_t keys, int *matches) { enum request request = REQ_UNKNOWN; size_t i; for (i = 0; i < keymap->size; i++) if (keybinding_matches(keymap->data[i], key, keys, NULL)) { if (matches) (*matches)++; if (keymap->data[i]->keys == keys) request = keymap->data[i]->request; } if (is_search_keymap(keymap)) return request; for (i = 0; i < generic_keymap->size; i++) if (keybinding_matches(generic_keymap->data[i], key, keys, NULL)) { if (matches) (*matches)++; if (request == REQ_UNKNOWN && generic_keymap->data[i]->keys == keys) request = generic_keymap->data[i]->request; } return request; }
static bool keybinding_equals(const struct keybinding *keybinding, const struct key key[], size_t keys, bool *conflict_ptr) { if (keybinding->keys != keys) return false; return keybinding_matches(keybinding, key, keys, conflict_ptr); }
static enum request get_keybinding_in_keymap(const struct keymap *keymap, const struct key key[], size_t keys, int *matches) { enum request request = REQ_UNKNOWN; size_t i; for (i = 0; i < keymap->size; i++) if (keybinding_matches(keymap->data[i], key, keys, NULL)) { if (matches && keymap->data[i]->request != REQ_NONE) (*matches)++; /* Overriding keybindings, might have been added * at the end of the keymap so we need to * iterate all keybindings. */ if (keymap->data[i]->keys == keys) request = keymap->data[i]->request; } return request; }