diff options
Diffstat (limited to 'src/gui/curses/gui-input.c')
-rw-r--r-- | src/gui/curses/gui-input.c | 778 |
1 files changed, 144 insertions, 634 deletions
diff --git a/src/gui/curses/gui-input.c b/src/gui/curses/gui-input.c index 89793d4ee..85eda8858 100644 --- a/src/gui/curses/gui-input.c +++ b/src/gui/curses/gui-input.c @@ -41,649 +41,151 @@ #include "../../common/fifo.h" #include "../../irc/irc.h" -#define KEY_ESCAPE 27 /* - * gui_read_keyb: read keyboard line + * gui_input_default_key_bindings: create default key bindings */ void -gui_read_keyb () +gui_input_default_key_bindings () { - int key, i; - t_gui_buffer *ptr_buffer; - t_irc_server *ptr_server; - t_irc_dcc *ptr_dcc, *ptr_dcc_next; - char new_char[3], *decoded_string; - t_irc_dcc *dcc_selected; + int i; + char key_str[32], command[32]; + + /* keys binded with internal functions */ + gui_key_bind ( /* RC */ "ctrl-M", "return"); + gui_key_bind ( /* RC */ "ctrl-J", "return"); + gui_key_bind ( /* tab */ "ctrl-I", "tab"); + gui_key_bind ( /* basckp */ "ctrl-H", "backspace"); + gui_key_bind ( /* basckp */ "ctrl-?", "backspace"); + gui_key_bind ( /* del */ "meta2-3~", "delete"); + gui_key_bind ( /* ^K */ "ctrl-K", "delete_end_line"); + gui_key_bind ( /* ^U */ "ctrl-U", "delete_beginning_line"); + gui_key_bind ( /* ^W */ "ctrl-W", "delete_previous_word"); + gui_key_bind ( /* home */ "meta2-1~", "home"); + gui_key_bind ( /* home */ "meta2-H", "home"); + gui_key_bind ( /* home */ "meta2-7~", "home"); + gui_key_bind ( /* ^A */ "ctrl-A", "home"); + gui_key_bind ( /* end */ "meta2-4~", "end"); + gui_key_bind ( /* end */ "meta2-F", "end"); + gui_key_bind ( /* end */ "meta2-8~", "end"); + gui_key_bind ( /* ^E */ "ctrl-E", "end"); + gui_key_bind ( /* left */ "meta2-D", "left"); + gui_key_bind ( /* right */ "meta2-C", "right"); + gui_key_bind ( /* up */ "meta2-A", "up"); + gui_key_bind ( /* down */ "meta2-B", "down"); + gui_key_bind ( /* pgup */ "meta2-5~", "page_up"); + gui_key_bind ( /* pgdn */ "meta2-6~", "page_down"); + gui_key_bind ( /* F10 */ "meta2-21~", "infobar_clear"); + gui_key_bind ( /* F11 */ "meta2-23~", "nick_page_up"); + gui_key_bind ( /* F12 */ "meta2-24~", "nick_page_down"); + gui_key_bind ( /* m-F11 */ "meta-meta2-1~", "nick_beginning"); + gui_key_bind ( /* m-F12 */ "meta-meta2-4~", "nick_end"); + gui_key_bind ( /* ^L */ "ctrl-L", "refresh"); + gui_key_bind ( /* m-a */ "meta-a", "jump_smart"); + gui_key_bind ( /* m-b */ "meta-b", "previous_word"); + gui_key_bind ( /* ^left */ "meta-Od", "previous_word"); + gui_key_bind ( /* m-d */ "meta-d", "delete_next_word"); + gui_key_bind ( /* m-f */ "meta-f", "next_word"); + gui_key_bind ( /* ^right */ "meta-Oc", "next_word"); + gui_key_bind ( /* m-h */ "meta-h", "hotlist_clear"); + gui_key_bind ( /* m-j,m-d */ "meta-jmeta-d", "jump_dcc"); + gui_key_bind ( /* m-r */ "meta-r", "delete_line"); + gui_key_bind ( /* m-s */ "meta-s", "jump_server"); + gui_key_bind ( /* m-x */ "meta-x", "jump_next_server"); + + /* keys binded with commands */ + gui_key_bind ( /* m-left */ "meta-meta2-D", "/buffer -1"); + gui_key_bind ( /* F5 */ "meta2-15~", "/buffer -1"); + gui_key_bind ( /* m-right */ "meta-meta2-C", "/buffer +1"); + gui_key_bind ( /* F6 */ "meta2-17~", "/buffer +1"); + gui_key_bind ( /* F7 */ "meta2-18~", "/window -1"); + gui_key_bind ( /* F8 */ "meta2-19~", "/window +1"); + gui_key_bind ( /* m-0 */ "meta-0", "/buffer 10"); + gui_key_bind ( /* m-1 */ "meta-1", "/buffer 1"); + gui_key_bind ( /* m-2 */ "meta-2", "/buffer 2"); + gui_key_bind ( /* m-3 */ "meta-3", "/buffer 3"); + gui_key_bind ( /* m-4 */ "meta-4", "/buffer 4"); + gui_key_bind ( /* m-5 */ "meta-5", "/buffer 5"); + gui_key_bind ( /* m-6 */ "meta-6", "/buffer 6"); + gui_key_bind ( /* m-7 */ "meta-7", "/buffer 7"); + gui_key_bind ( /* m-8 */ "meta-8", "/buffer 8"); + gui_key_bind ( /* m-9 */ "meta-9", "/buffer 9"); + + /* bind meta-j + {01..99} to switch to buffers # > 10 */ + for (i = 1; i < 100; i++) + { + sprintf (key_str, "meta-j%02d", i); + sprintf (command, "/buffer %d", i); + gui_key_bind (key_str, command); + } +} + +/* + * gui_input_read: read keyboard chars + */ - key = getch (); - if (key != ERR) +void +gui_input_read () +{ + int key, i; + char key_str[32]; + + i = 0; + /* do not loop too much here (for example when big paste was made), + to read also socket & co */ + while (i < 8) { - switch (key) + key = getch (); + + if (key == ERR) + break; + + if (key == KEY_RESIZE) { - /* resize event */ - case KEY_RESIZE: - gui_curses_resize_handler (); - break; - /* inactive function keys */ - case KEY_F(1): - case KEY_F(2): - case KEY_F(3): - case KEY_F(4): - case KEY_F(9): - break; - /* previous buffer in window */ - case KEY_F(5): - gui_switch_to_previous_buffer (gui_current_window); - break; - /* next buffer in window */ - case KEY_F(6): - gui_switch_to_next_buffer (gui_current_window); - break; - /* previous window */ - case KEY_F(7): - gui_switch_to_previous_window (gui_current_window); - break; - /* next window */ - case KEY_F(8): - gui_switch_to_next_window (gui_current_window); - break; - /* remove last infobar message */ - case KEY_F(10): - gui_infobar_remove (); - gui_draw_buffer_infobar (gui_current_window->buffer, 1); - break; - case KEY_F(11): - gui_nick_move_page_up (gui_current_window); - break; - case KEY_F(12): - gui_nick_move_page_down (gui_current_window); - break; - /* cursor up */ - case KEY_UP: - if (gui_current_window->buffer->dcc) - { - if (dcc_list) - { - if (gui_current_window->dcc_selected - && ((t_irc_dcc *)(gui_current_window->dcc_selected))->prev_dcc) - { - if (gui_current_window->dcc_selected == - gui_current_window->dcc_first) - gui_current_window->dcc_first = - ((t_irc_dcc *)(gui_current_window->dcc_first))->prev_dcc; - gui_current_window->dcc_selected = - ((t_irc_dcc *)(gui_current_window->dcc_selected))->prev_dcc; - gui_draw_buffer_chat (gui_current_window->buffer, 1); - gui_draw_buffer_input (gui_current_window->buffer, 1); - } - } - } - else - { - if (gui_current_window->buffer->ptr_history) - { - gui_current_window->buffer->ptr_history = - gui_current_window->buffer->ptr_history->next_history; - if (!gui_current_window->buffer->ptr_history) - gui_current_window->buffer->ptr_history = - gui_current_window->buffer->history; - } - else - gui_current_window->buffer->ptr_history = - gui_current_window->buffer->history; - if (gui_current_window->buffer->ptr_history) - { - gui_current_window->buffer->input_buffer_size = - strlen (gui_current_window->buffer->ptr_history->text); - gui_optimize_input_buffer_size (gui_current_window->buffer); - gui_current_window->buffer->input_buffer_pos = - gui_current_window->buffer->input_buffer_size; - strcpy (gui_current_window->buffer->input_buffer, - gui_current_window->buffer->ptr_history->text); - gui_draw_buffer_input (gui_current_window->buffer, 0); - } - } - break; - /* cursor down */ - case KEY_DOWN: - if (gui_current_window->buffer->dcc) - { - if (dcc_list) - { - if (!gui_current_window->dcc_selected - || ((t_irc_dcc *)(gui_current_window->dcc_selected))->next_dcc) - { - if (gui_current_window->dcc_last_displayed - && (gui_current_window->dcc_selected == - gui_current_window->dcc_last_displayed)) - { - if (gui_current_window->dcc_first) - gui_current_window->dcc_first = - ((t_irc_dcc *)(gui_current_window->dcc_first))->next_dcc; - else - gui_current_window->dcc_first = - dcc_list->next_dcc; - } - if (gui_current_window->dcc_selected) - gui_current_window->dcc_selected = - ((t_irc_dcc *)(gui_current_window->dcc_selected))->next_dcc; - else - gui_current_window->dcc_selected = - dcc_list->next_dcc; - gui_draw_buffer_chat (gui_current_window->buffer, 1); - gui_draw_buffer_input (gui_current_window->buffer, 1); - } - } - } - else - { - if (gui_current_window->buffer->ptr_history) - { - gui_current_window->buffer->ptr_history = - gui_current_window->buffer->ptr_history->prev_history; - if (gui_current_window->buffer->ptr_history) - gui_current_window->buffer->input_buffer_size = - strlen (gui_current_window->buffer->ptr_history->text); - else - gui_current_window->buffer->input_buffer_size = 0; - gui_optimize_input_buffer_size (gui_current_window->buffer); - gui_current_window->buffer->input_buffer_pos = - gui_current_window->buffer->input_buffer_size; - if (gui_current_window->buffer->ptr_history) - strcpy (gui_current_window->buffer->input_buffer, - gui_current_window->buffer->ptr_history->text); - gui_draw_buffer_input (gui_current_window->buffer, 0); - } - } - break; - /* cursor left */ - case KEY_LEFT: - if (!gui_current_window->buffer->dcc) - { - if (gui_current_window->buffer->input_buffer_pos > 0) - { - gui_current_window->buffer->input_buffer_pos--; - gui_draw_buffer_input (gui_current_window->buffer, 0); - } - } - break; - /* cursor right */ - case KEY_RIGHT: - if (!gui_current_window->buffer->dcc) - { - if (gui_current_window->buffer->input_buffer_pos < - gui_current_window->buffer->input_buffer_size) - { - gui_current_window->buffer->input_buffer_pos++; - gui_draw_buffer_input (gui_current_window->buffer, 0); - } - } - break; - /* home key or Control + A */ - case KEY_HOME: - case 0x01: - if (!gui_current_window->buffer->dcc) - { - if (gui_current_window->buffer->input_buffer_pos > 0) - { - gui_current_window->buffer->input_buffer_pos = 0; - gui_draw_buffer_input (gui_current_window->buffer, 0); - } - } - break; - /* end key or Control + E */ - case KEY_END: - case 0x05: - if (!gui_current_window->buffer->dcc) - { - if (gui_current_window->buffer->input_buffer_pos < - gui_current_window->buffer->input_buffer_size) - { - gui_current_window->buffer->input_buffer_pos = - gui_current_window->buffer->input_buffer_size; - gui_draw_buffer_input (gui_current_window->buffer, 0); - } - } - break; - /* page up */ - case KEY_PPAGE: - if (!gui_current_window->buffer->dcc) - gui_move_page_up (gui_current_window); - break; - /* page down */ - case KEY_NPAGE: - if (!gui_current_window->buffer->dcc) - gui_move_page_down (gui_current_window); - break; - /* erase before cursor and move cursor to the left */ - case 127: - case KEY_BACKSPACE: - if (!gui_current_window->buffer->dcc) - { - if (gui_current_window->buffer->input_buffer_pos > 0) - { - i = gui_current_window->buffer->input_buffer_pos-1; - while (gui_current_window->buffer->input_buffer[i]) - { - gui_current_window->buffer->input_buffer[i] = - gui_current_window->buffer->input_buffer[i+1]; - i++; - } - gui_current_window->buffer->input_buffer_size--; - gui_current_window->buffer->input_buffer_pos--; - gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; - gui_draw_buffer_input (gui_current_window->buffer, 0); - gui_optimize_input_buffer_size (gui_current_window->buffer); - gui_current_window->buffer->completion.position = -1; - } - } - break; - /* Control + Backspace or Control + W */ - case 0x08: - case 0x17: - if (!gui_current_window->buffer->dcc) - gui_delete_previous_word (gui_current_window->buffer); - break; - /* Control + L */ - case 0x0C: - gui_curses_resize_handler (); - break; - /* erase char under cursor */ - case KEY_DC: - if (!gui_current_window->buffer->dcc) - { - if (gui_current_window->buffer->input_buffer_pos < - gui_current_window->buffer->input_buffer_size) - { - i = gui_current_window->buffer->input_buffer_pos; - while (gui_current_window->buffer->input_buffer[i]) - { - gui_current_window->buffer->input_buffer[i] = - gui_current_window->buffer->input_buffer[i+1]; - i++; - } - gui_current_window->buffer->input_buffer_size--; - gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; - gui_draw_buffer_input (gui_current_window->buffer, 0); - gui_optimize_input_buffer_size (gui_current_window->buffer); - gui_current_window->buffer->completion.position = -1; - } - } - break; - /* Tab : completion */ - case '\t': - if (!gui_current_window->buffer->dcc) - { - completion_search (&(gui_current_window->buffer->completion), - CHANNEL(gui_current_window->buffer), - gui_current_window->buffer->input_buffer, - gui_current_window->buffer->input_buffer_size, - gui_current_window->buffer->input_buffer_pos); - - if (gui_current_window->buffer->completion.word_found) - { - /* replace word with new completed word into input buffer */ - if (gui_current_window->buffer->completion.diff_size > 0) - { - gui_current_window->buffer->input_buffer_size += - gui_current_window->buffer->completion.diff_size; - gui_optimize_input_buffer_size (gui_current_window->buffer); - gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; - for (i = gui_current_window->buffer->input_buffer_size - 1; - i >= gui_current_window->buffer->completion.position_replace + - (int)strlen (gui_current_window->buffer->completion.word_found); i--) - gui_current_window->buffer->input_buffer[i] = - gui_current_window->buffer->input_buffer[i - - gui_current_window->buffer->completion.diff_size]; - } - else - { - for (i = gui_current_window->buffer->completion.position_replace + - strlen (gui_current_window->buffer->completion.word_found); - i < gui_current_window->buffer->input_buffer_size; i++) - gui_current_window->buffer->input_buffer[i] = - gui_current_window->buffer->input_buffer[i - - gui_current_window->buffer->completion.diff_size]; - gui_current_window->buffer->input_buffer_size += - gui_current_window->buffer->completion.diff_size; - gui_optimize_input_buffer_size (gui_current_window->buffer); - gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; - } - - strncpy (gui_current_window->buffer->input_buffer + gui_current_window->buffer->completion.position_replace, - gui_current_window->buffer->completion.word_found, - strlen (gui_current_window->buffer->completion.word_found)); - gui_current_window->buffer->input_buffer_pos = - gui_current_window->buffer->completion.position_replace + - strlen (gui_current_window->buffer->completion.word_found); - - /* position is < 0 this means only one word was found to complete, - so reinit to stop completion */ - if (gui_current_window->buffer->completion.position >= 0) - gui_current_window->buffer->completion.position = - gui_current_window->buffer->input_buffer_pos; - - /* add space or completor to the end of completion, if needed */ - if ((gui_current_window->buffer->completion.context == COMPLETION_COMMAND) - || (gui_current_window->buffer->completion.context == COMPLETION_COMMAND_ARG)) - { - if (gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_pos] != ' ') - gui_buffer_insert_string (gui_current_window->buffer, - " ", - gui_current_window->buffer->input_buffer_pos); - if (gui_current_window->buffer->completion.position >= 0) - gui_current_window->buffer->completion.position++; - gui_current_window->buffer->input_buffer_pos++; - } - else - { - /* add nick completor if position 0 and completing nick */ - if ((gui_current_window->buffer->completion.base_word_pos == 0) - && (gui_current_window->buffer->completion.context == COMPLETION_NICK)) - { - if (strncmp (gui_current_window->buffer->input_buffer + gui_current_window->buffer->input_buffer_pos, - cfg_look_completor, strlen (cfg_look_completor)) != 0) - gui_buffer_insert_string (gui_current_window->buffer, - cfg_look_completor, - gui_current_window->buffer->input_buffer_pos); - if (gui_current_window->buffer->completion.position >= 0) - gui_current_window->buffer->completion.position += strlen (cfg_look_completor); - gui_current_window->buffer->input_buffer_pos += strlen (cfg_look_completor); - if (gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_pos] != ' ') - gui_buffer_insert_string (gui_current_window->buffer, - " ", - gui_current_window->buffer->input_buffer_pos); - if (gui_current_window->buffer->completion.position >= 0) - gui_current_window->buffer->completion.position++; - gui_current_window->buffer->input_buffer_pos++; - } - } - gui_draw_buffer_input (gui_current_window->buffer, 0); - } - } - break; - /* escape code (for control-key) */ - case KEY_ESCAPE: - if ((key = getch()) != ERR) - { - /*gui_printf (gui_current_window->buffer, - "[Debug] key pressed = %d, hex = %02X, octal = %o\n", key, key, key);*/ - switch (key) - { - /* Alt + left arrow */ - case KEY_LEFT: - gui_switch_to_previous_buffer (gui_current_window); - break; - /* Alt + right arrow */ - case KEY_RIGHT: - gui_switch_to_next_buffer (gui_current_window); - break; - /* Alt + home */ - case KEY_HOME: - gui_nick_move_beginning (gui_current_window); - break; - /* Alt + end */ - case KEY_END: - gui_nick_move_end (gui_current_window); - break; - /* Alt + page up */ - case KEY_PPAGE: - gui_nick_move_page_up (gui_current_window); - break; - /* Alt + page down */ - case KEY_NPAGE: - gui_nick_move_page_down (gui_current_window); - break; - case 79: - /* TODO: replace 79 by constant name! */ - if ((key = getch()) != ERR) - { - switch (key) - { - /* Control + Right */ - case 99: - if (!gui_current_window->buffer->dcc) - gui_move_next_word (gui_current_window->buffer); - break; - /* Control + Left */ - case 100: - if (!gui_current_window->buffer->dcc) - gui_move_previous_word (gui_current_window->buffer); - break; - } - } - break; - /* Alt-number: jump to window by number */ - case 48: /* Alt-0 */ - case 49: /* Alt-1 */ - case 50: /* Alt-2 */ - case 51: /* Alt-3 */ - case 52: /* Alt-4 */ - case 53: /* Alt-5 */ - case 54: /* Alt-6 */ - case 55: /* Alt-7 */ - case 56: /* Alt-8 */ - case 57: /* Alt-9 */ - gui_switch_to_buffer_by_number (gui_current_window, (key == 48) ? 10 : key - 48); - break; - /* Alt-A: jump to buffer with activity */ - case 'a': - case 'A': - if (hotlist) - { - if (!hotlist_initial_buffer) - hotlist_initial_buffer = gui_current_window->buffer; - gui_switch_to_buffer (gui_current_window, hotlist->buffer); - gui_redraw_buffer (gui_current_window->buffer); - } - else - { - if (hotlist_initial_buffer) - { - gui_switch_to_buffer (gui_current_window, hotlist_initial_buffer); - gui_redraw_buffer (gui_current_window->buffer); - hotlist_initial_buffer = NULL; - } - } - break; - /* Alt-D: jump to DCC buffer */ - case 'd': - case 'D': - if (gui_current_window->buffer->dcc) - { - if (buffer_before_dcc) - { - gui_switch_to_buffer (gui_current_window, - buffer_before_dcc); - gui_redraw_buffer (gui_current_window->buffer); - } - } - else - { - buffer_before_dcc = gui_current_window->buffer; - gui_switch_to_dcc_buffer (); - } - break; - /* Alt-R: clear hotlist */ - case 'r': - case 'R': - if (hotlist) - { - hotlist_free_all (); - gui_redraw_buffer (gui_current_window->buffer); - } - hotlist_initial_buffer = gui_current_window->buffer; - break; - /* Alt-S: jump to server buffer */ - case 's': - case 'S': - if (!gui_current_window->buffer->dcc) - { - if (SERVER(gui_current_window->buffer)->buffer != - gui_current_window->buffer) - { - gui_switch_to_buffer (gui_current_window, - SERVER(gui_current_window->buffer)->buffer); - gui_redraw_buffer (gui_current_window->buffer); - } - } - break; - /* Alt-X: jump to first channel/private of next server */ - case 'x': - case 'X': - if (!gui_current_window->buffer->dcc) - { - ptr_server = SERVER(gui_current_window->buffer)->next_server; - if (!ptr_server) - ptr_server = irc_servers; - while (ptr_server != SERVER(gui_current_window->buffer)) - { - if (ptr_server->buffer) - break; - ptr_server = (ptr_server->next_server) ? - ptr_server->next_server : irc_servers; - } - if (ptr_server != SERVER(gui_current_window->buffer)) - { - ptr_buffer = (ptr_server->channels) ? - ptr_server->channels->buffer : ptr_server->buffer; - gui_switch_to_buffer (gui_current_window, ptr_buffer); - gui_redraw_buffer (gui_current_window->buffer); - } - } - break; - } - } - break; - /* send command/message */ - case '\n': - if (!gui_current_window->buffer->dcc) - { - if (gui_current_window->buffer->input_buffer_size > 0) - { - gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; - history_add (gui_current_window->buffer, gui_current_window->buffer->input_buffer); - gui_current_window->buffer->input_buffer_size = 0; - gui_current_window->buffer->input_buffer_pos = 0; - gui_current_window->buffer->input_buffer_1st_display = 0; - gui_current_window->buffer->completion.position = -1; - gui_current_window->buffer->ptr_history = NULL; - ptr_buffer = gui_current_window->buffer; - user_command (SERVER(gui_current_window->buffer), - gui_current_window->buffer, - gui_current_window->buffer->input_buffer); - if (ptr_buffer == gui_current_window->buffer) - { - ptr_buffer->input_buffer[0] = '\0'; - gui_draw_buffer_input (ptr_buffer, 0); - } - } - } - break; - /* other key => add to input buffer */ - default: - if (gui_current_window->buffer->dcc) - { - dcc_selected = (gui_current_window->dcc_selected) ? - (t_irc_dcc *) gui_current_window->dcc_selected : dcc_list; - switch (key) - { - /* accept DCC */ - case 'a': - case 'A': - if (dcc_selected - && (DCC_IS_RECV(dcc_selected->status)) - && (dcc_selected->status == DCC_WAITING)) - { - dcc_accept (dcc_selected); - } - break; - /* cancel DCC */ - case 'c': - case 'C': - if (dcc_selected - && (!DCC_ENDED(dcc_selected->status))) - { - dcc_close (dcc_selected, DCC_ABORTED); - gui_redraw_buffer (gui_current_window->buffer); - } - break; - /* purge old DCC */ - case 'p': - case 'P': - gui_current_window->dcc_selected = NULL; - ptr_dcc = dcc_list; - while (ptr_dcc) - { - ptr_dcc_next = ptr_dcc->next_dcc; - if (DCC_ENDED(ptr_dcc->status)) - dcc_free (ptr_dcc); - ptr_dcc = ptr_dcc_next; - } - gui_redraw_buffer (gui_current_window->buffer); - break; - /* close DCC window */ - case 'q': - case 'Q': - if (buffer_before_dcc) - { - gui_buffer_free (gui_current_window->buffer, 1); - gui_switch_to_buffer (gui_current_window, - buffer_before_dcc); - } - else - gui_buffer_free (gui_current_window->buffer, 1); - gui_redraw_buffer (gui_current_window->buffer); - break; - /* remove from DCC list */ - case 'r': - case 'R': - if (dcc_selected - && (DCC_ENDED(dcc_selected->status))) - { - if (dcc_selected->next_dcc) - gui_current_window->dcc_selected = dcc_selected->next_dcc; - else - gui_current_window->dcc_selected = NULL; - dcc_free (dcc_selected); - gui_redraw_buffer (gui_current_window->buffer); - } - break; - } - } - else - { - /*gui_printf (gui_current_window->buffer, - "[Debug] key pressed = %d, hex = %02X, octal = %o\n", key, key, key);*/ - new_char[0] = key; - new_char[1] = '\0'; - decoded_string = NULL; - - /* UTF-8 input */ - if (key == 0xC3) - { - if ((key = getch()) != ERR) - { - new_char[1] = key; - new_char[2] = '\0'; - decoded_string = weechat_convert_encoding (local_charset, cfg_look_charset_internal, new_char); - } - } - - gui_buffer_insert_string (gui_current_window->buffer, - (decoded_string) ? decoded_string : new_char, - gui_current_window->buffer->input_buffer_pos); - gui_current_window->buffer->input_buffer_pos++; - gui_draw_buffer_input (gui_current_window->buffer, 0); - gui_current_window->buffer->completion.position = -1; - - if (decoded_string) - free (decoded_string); - } - break; + gui_curses_resize_handler (); + continue; + } + + if (key < 32) + { + key_str[0] = '^'; + key_str[1] = (char) key + '@'; + key_str[2] = '\0'; + } + else if (key == 127) + { + key_str[0] = '^'; + key_str[1] = '?'; + key_str[2] = '\0'; + } + else + { + if (key > 0xff) + { + key_str[0] = (char) (key >> 8); + key_str[1] = (char) (key & 0xff); + key_str[2] = '\0'; + } + else + { + key_str[0] = (char) key; + key_str[1] = '\0'; + } } + + if (strcmp (key_str, "^") == 0) + { + key_str[1] = '^'; + key_str[2] = '\0'; + } + + /*gui_printf (gui_current_window->buffer, "gui_input_read: key = %s (%d)\n", key_str, key);*/ + + if (gui_key_pressed (key_str) != 0) + gui_input_insert_char (key); + + i++; } } @@ -723,6 +225,14 @@ gui_main_loop () { old_sec = local_time->tm_sec; + if (cfg_look_infobar_seconds) + { + gui_draw_buffer_infobar_time (gui_current_window->buffer); + wmove (gui_current_window->win_input, + 0, gui_current_window->win_input_x); + wrefresh (gui_current_window->win_input); + } + /* infobar count down */ if (gui_infobar && gui_infobar->remaining_time > 0) { @@ -807,7 +317,7 @@ gui_main_loop () { if (FD_ISSET (STDIN_FILENO, &read_fd)) { - gui_read_keyb (); + gui_input_read (); } if ((weechat_fifo != -1) && (FD_ISSET (weechat_fifo, &read_fd))) { |