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; }
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); }