Пример #1
0
Файл: keys.c Проект: bbolli/tig
/* 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(struct keymap *keymap, struct key_input *input)
{
	size_t i;

	for (i = 0; i < keymap->size; i++)
		if (keybinding_equals(&keymap->data[i].input, input, NULL))
			return keymap->data[i].request;

	for (i = 0; i < generic_keymap->size; i++)
		if (keybinding_equals(&generic_keymap->data[i].input, input, NULL))
			return generic_keymap->data[i].request;

	return REQ_NONE;
}
Пример #2
0
Файл: keys.c Проект: bbolli/tig
enum status_code
add_keybinding(struct keymap *table, enum request request, struct key_input *input)
{
	char buf[SIZEOF_STR];
	bool conflict = FALSE;
	size_t i;

	for (i = 0; i < table->size; i++) {
		if (keybinding_equals(&table->data[i].input, input, &conflict)) {
			enum request old_request = table->data[i].request;
			const char *old_name;

			table->data[i].request = request;
			if (!conflict)
				return SUCCESS;

			old_name = get_request_name(old_request);
			string_ncopy(buf, old_name, strlen(old_name));
			return error("Key binding for %s and %s conflict; "
				     "keys using Ctrl are case insensitive",
				     buf, get_request_name(request));
		}
	}

	table->data = realloc(table->data, (table->size + 1) * sizeof(*table->data));
	if (!table->data)
		die("Failed to allocate keybinding");
	table->data[table->size].input = *input;
	table->data[table->size++].request = request;
	return SUCCESS;
}
Пример #3
0
Файл: keys.c Проект: acklinr/tig
enum status_code
add_keybinding(struct keymap *table, enum request request,
	       const struct key key[], size_t keys)
{
	struct keybinding *keybinding;
	char buf[SIZEOF_STR];
	bool conflict = false;
	size_t i;

	for (i = 0; i < table->size; i++) {
		if (keybinding_equals(table->data[i], key, keys, &conflict)) {
			enum request old_request = table->data[i]->request;
			const char *old_name;

			table->data[i]->request = request;
			if (!conflict)
				return SUCCESS;

			old_name = get_request_name(old_request);
			string_ncopy(buf, old_name, strlen(old_name));
			return error("Key binding for %s and %s conflict; "
				     "keys using Ctrl are case insensitive",
				     buf, get_request_name(request));
		}
	}

	table->data = realloc(table->data, (table->size + 1) * sizeof(*table->data));
	keybinding = calloc(1, sizeof(*keybinding) + (sizeof(*key) * (keys - 1)));
	if (!table->data || !keybinding)
		die("Failed to allocate keybinding");

	memcpy(keybinding->key, key, sizeof(*key) * keys);
	keybinding->keys = keys;
	keybinding->request = request;
	table->data[table->size++] = keybinding;
	return SUCCESS;
}