예제 #1
0
static int
key_action_comp_chng (GtkWidget * wid, GdkEventKey * ent, char *d1, char *d2,
		struct session *sess)
{
	key_action_tab_comp(wid, ent, d1, d2, sess);
	return 2;
}
예제 #2
0
파일: bindings.c 프로젝트: dmilith/ekg2-bsd
gboolean key_handle_key_press(GtkWidget *wid, GdkEventKey * evt, window_t *sess) {
	int keyval = evt->keyval;
	int mod, n;
	int was_complete = 0;
	window_t *w;

	{
		sess = NULL;

		/* where did this event come from? */
		for (w = windows; w; w = w->next) {
			if (gtk_private_ui(w)->input_box == wid) {
				sess = w;
				if (gtk_private_ui(w)->is_tab)
					sess = window_current;
				break;
			}
		}
	}

	if (!sess) {
		printf("key_handle_key_press() FAILED (sess == NULL)\n");
		return FALSE;
	}

/*	printf("key_handle_key_press() %p [%d %d %d %s]\n", sess, evt->state, evt->keyval, evt->length, evt->string); */
	/* XXX, EMIT: KEY_PRESSED */

	mod = evt->state & (STATE_CTRL | STATE_ALT | STATE_SHIFT);

	n = -1;

/* yeah, i know it's awful. */
	if (keyval == GDK_Page_Up)			n = key_action_scroll_page(wid, evt, "up", sess);
	else if (keyval == GDK_Page_Down)		n = key_action_scroll_page(wid, evt, "down", sess);

	else if (keyval == GDK_Up)			n = key_action_history_up(wid, evt, NULL, sess);
	else if (keyval == GDK_Down)			n = key_action_history_down(wid, evt, NULL, sess);
	else if (keyval == GDK_Tab) {			n = key_action_tab_comp(wid, evt, NULL, sess); was_complete = 1; }

	else if (keyval == GDK_F12)			command_exec(sess->target, sess->session, "/window switch 0", 0);
	else if (keyval == GDK_F1)			command_exec(sess->target, sess->session, "/help", 0);

	else if (keyval == GDK_0 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 10", 0);
	else if (keyval == GDK_9 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 9", 0);
	else if (keyval == GDK_8 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 8", 0);
	else if (keyval == GDK_7 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 7", 0);
	else if (keyval == GDK_6 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 6", 0);
	else if (keyval == GDK_5 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 5", 0);
	else if (keyval == GDK_4 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 4", 0);
	else if (keyval == GDK_3 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 3", 0);
	else if (keyval == GDK_2 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 2", 0);
	else if (keyval == GDK_1 && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 1", 0);
	else if (keyval == '`' && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 0", 0);

	else if (((keyval == GDK_Q) || (keyval == GDK_q)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 11", 0);
	else if (((keyval == GDK_W) || (keyval == GDK_w)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 12", 0);
	else if (((keyval == GDK_E) || (keyval == GDK_e)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 13", 0);
	else if (((keyval == GDK_R) || (keyval == GDK_r)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 14", 0);
	else if (((keyval == GDK_T) || (keyval == GDK_t)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 15", 0);
	else if (((keyval == GDK_Y) || (keyval == GDK_y)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 16", 0);
	else if (((keyval == GDK_U) || (keyval == GDK_u)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 17", 0);
	else if (((keyval == GDK_I) || (keyval == GDK_i)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 18", 0);
	else if (((keyval == GDK_O) || (keyval == GDK_o)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 19", 0);
	else if (((keyval == GDK_P) || (keyval == GDK_p)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window switch 20", 0);

	else if (((keyval == GDK_N) || (keyval == GDK_n)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window new", 0);
	else if (((keyval == GDK_K) || (keyval == GDK_k)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window kill", 0);
	else if (((keyval == GDK_A) || (keyval == GDK_a)) && mod == STATE_ALT)	command_exec(sess->target, sess->session, "/window active", 0);

	else if (((keyval == GDK_N) || (keyval == GDK_n)) && mod == STATE_CTRL)	command_exec(sess->target, sess->session, "/window next", 0);
	else if (((keyval == GDK_P) || (keyval == GDK_p)) && mod == STATE_CTRL)	command_exec(sess->target, sess->session, "/window prev", 0);

	else if (((keyval == GDK_F) || (keyval == GDK_f)) && mod == STATE_CTRL)	n = key_action_scroll_page(wid, evt, "up", sess);
	else if (((keyval == GDK_G) || (keyval == GDK_g)) && mod == STATE_CTRL)	n = key_action_scroll_page(wid, evt, "down", sess);
	else if (((keyval == GDK_X) || (keyval == GDK_x)) && mod == STATE_CTRL) n = key_action_cycle_session(wid, evt, NULL, sess);

#if 0
	ncurses_binding_add("Alt-G", "ignore-query", 1, 1);
	ncurses_binding_add("Alt-B", "backward-word", 1, 1);
	ncurses_binding_add("Alt-F", "forward-word", 1, 1);
	ncurses_binding_add("Alt-D", "kill-word", 1, 1);
	ncurses_binding_add("Alt-Enter", "toggle-input", 1, 1);

	ncurses_binding_add("Escape", "cancel-input", 1, 1);
	ncurses_binding_add("Backspace", "backward-delete-char", 1, 1);
	ncurses_binding_add("Ctrl-H", "backward-delete-char", 1, 1);
	ncurses_binding_add("Ctrl-A", "beginning-of-line", 1, 1);
	ncurses_binding_add("Home", "beginning-of-line", 1, 1);
	ncurses_binding_add("Ctrl-D", "delete-char", 1, 1);
	ncurses_binding_add("Delete", "delete-char", 1, 1);
	ncurses_binding_add("Ctrl-E", "end-of-line", 1, 1);
	ncurses_binding_add("End", "end-of-line", 1, 1);
	ncurses_binding_add("Ctrl-K", "kill-line", 1, 1);
	ncurses_binding_add("Ctrl-Y", "yank", 1, 1);
	ncurses_binding_add("Enter", "accept-line", 1, 1);

	ncurses_binding_add("Ctrl-M", "accept-line", 1, 1);
	ncurses_binding_add("Ctrl-U", "line-discard", 1, 1);
	ncurses_binding_add("Ctrl-V", "quoted-insert", 1, 1);
	ncurses_binding_add("Ctrl-W", "word-rubout", 1, 1);

	ncurses_binding_add("Alt-Backspace", "word-rubout", 1, 1);
	ncurses_binding_add("Ctrl-L", "/window refresh", 1, 1);
	ncurses_binding_add("Right", "forward-char", 1, 1);
	ncurses_binding_add("Left", "backward-char", 1, 1);
	ncurses_binding_add("F2", "quick-list", 1, 1);
	ncurses_binding_add("F3", "toggle-contacts", 1, 1);
	ncurses_binding_add("F4", "next-contacts-group", 1, 1);
	ncurses_binding_add("F11", "ui-ncurses-debug-toggle", 1, 1);
#endif

#if 0
	for (l = bindings; l; l = l->next) {
		if (kb->keyval == keyval && kb->mod == mod) {

			/* Run the function */
			n = key_actions[kb->action].handler(wid, evt, kb->data1, kb->data2, sess);
			switch (n) {
				case 0:
					return 1;
				case 2:
					g_signal_stop_emission_by_name(G_OBJECT(wid), "key_press_event");
					return 1;
			}
		}
	}
#endif
	if (!was_complete) {
		/* jeśli się coś zmieniło, wygeneruj dopełnienia na nowo */
		ncurses_complete_clear();

		/* w xchacie bylo tylko na GDK_space */
	}

	if (n == 2) {
		g_signal_stop_emission_by_name(G_OBJECT(wid), "key_press_event");
		return 1;
	}

	return (n == 0);
}