Example #1
0
/* 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;
}
Example #2
0
File: keys.c Project: acklinr/tig
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);
}
Example #3
0
File: keys.c Project: acklinr/tig
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;
}