1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-29 22:36:38 +02:00

Added DCC buffer type

This commit is contained in:
Sebastien Helleu
2004-08-26 22:20:04 +00:00
parent 9c6f2fcb8c
commit aea603b6ed
14 changed files with 662 additions and 480 deletions
+2 -2
View File
@@ -917,7 +917,7 @@ weechat_cmd_connect (int argc, char **argv)
}
if (!ptr_server->buffer)
{
if (!gui_buffer_new (gui_current_window, ptr_server, NULL, 1))
if (!gui_buffer_new (gui_current_window, ptr_server, NULL, 0, 1))
return -1;
}
if (server_connect (ptr_server))
@@ -1499,7 +1499,7 @@ weechat_cmd_server (int argc, char **argv)
if (new_server->autoconnect)
{
(void) gui_buffer_new (gui_current_window, new_server, NULL, 1);
(void) gui_buffer_new (gui_current_window, new_server, NULL, 0, 1);
if (server_connect (new_server))
irc_login (new_server);
}
+86 -59
View File
@@ -325,12 +325,15 @@ gui_draw_buffer_title (t_gui_buffer *buffer, int erase)
}
else
{
/* TODO: change this copyright as title? */
mvwprintw (ptr_win->win_title, 0, 0,
"%s", PACKAGE_STRING " - " WEECHAT_WEBSITE);
mvwprintw (ptr_win->win_title, 0,
ptr_win->win_width - strlen (WEECHAT_COPYRIGHT),
"%s", WEECHAT_COPYRIGHT);
if (!buffer->dcc)
{
/* TODO: change this copyright as title? */
mvwprintw (ptr_win->win_title, 0, 0,
"%s", PACKAGE_STRING " - " WEECHAT_WEBSITE);
mvwprintw (ptr_win->win_title, 0,
ptr_win->win_width - strlen (WEECHAT_COPYRIGHT),
"%s", WEECHAT_COPYRIGHT);
}
}
wrefresh (ptr_win->win_title);
refresh ();
@@ -572,49 +575,60 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
if (has_colors ())
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
ptr_line = buffer->last_line;
lines_used = 0;
while (ptr_line
&& (lines_used < (ptr_win->win_chat_height + ptr_win->sub_lines)))
if (buffer->dcc)
{
lines_used += gui_get_line_num_splits (ptr_win, ptr_line);
ptr_line = ptr_line->prev_line;
}
ptr_win->win_chat_cursor_x = 0;
ptr_win->win_chat_cursor_y = 0;
if (lines_used > (ptr_win->win_chat_height + ptr_win->sub_lines))
{
/* screen will be full (we'll display only end of 1st line) */
ptr_line = (ptr_line) ? ptr_line->next_line : buffer->lines;
gui_display_end_of_line (ptr_win, ptr_line,
gui_get_line_num_splits (ptr_win, ptr_line) -
(lines_used - (ptr_win->win_chat_height + ptr_win->sub_lines)));
ptr_line = ptr_line->next_line;
ptr_win->first_line_displayed = 0;
mvwprintw (ptr_win->win_chat, ptr_win->win_y, ptr_win->win_x,
"%s", _(" Type Status Filename / progress"));
for (i = 0; i < ptr_win->win_width; i++)
mvwprintw (ptr_win->win_chat, 1, i, "%c", '-');
move (ptr_win->win_y + 3, ptr_win->win_x);
}
else
{
/* all lines are displayed */
if (!ptr_line)
ptr_line = buffer->last_line;
lines_used = 0;
while (ptr_line
&& (lines_used < (ptr_win->win_chat_height + ptr_win->sub_lines)))
{
ptr_win->first_line_displayed = 1;
ptr_line = buffer->lines;
lines_used += gui_get_line_num_splits (ptr_win, ptr_line);
ptr_line = ptr_line->prev_line;
}
ptr_win->win_chat_cursor_x = 0;
ptr_win->win_chat_cursor_y = 0;
if (lines_used > (ptr_win->win_chat_height + ptr_win->sub_lines))
{
/* screen will be full (we'll display only end of 1st line) */
ptr_line = (ptr_line) ? ptr_line->next_line : buffer->lines;
gui_display_end_of_line (ptr_win, ptr_line,
gui_get_line_num_splits (ptr_win, ptr_line) -
(lines_used - (ptr_win->win_chat_height + ptr_win->sub_lines)));
ptr_line = ptr_line->next_line;
ptr_win->first_line_displayed = 0;
}
else
{
ptr_win->first_line_displayed = 0;
/* all lines are displayed */
if (!ptr_line)
{
ptr_win->first_line_displayed = 1;
ptr_line = buffer->lines;
}
else
{
ptr_win->first_line_displayed = 0;
ptr_line = ptr_line->next_line;
}
}
while (ptr_line)
{
if (!gui_display_line (ptr_win, ptr_line, 1))
break;
ptr_line = ptr_line->next_line;
}
/*if (ptr_win->win_chat_cursor_y <= ptr_win->win_chat_height - 1)
buffer->sub_lines = 0;*/
}
while (ptr_line)
{
if (!gui_display_line (ptr_win, ptr_line, 1))
break;
ptr_line = ptr_line->next_line;
}
/*if (ptr_win->win_chat_cursor_y <= ptr_win->win_chat_height - 1)
buffer->sub_lines = 0;*/
wrefresh (ptr_win->win_chat);
refresh ();
}
@@ -893,8 +907,12 @@ gui_draw_buffer_status (t_gui_buffer *buffer, int erase)
if (!SERVER(ptr_win->buffer))
{
gui_window_set_color (ptr_win->win_status, COLOR_WIN_STATUS);
wprintw (ptr_win->win_status, _("%d:[not connected] "),
ptr_win->buffer->number);
if (ptr_win->buffer->dcc)
wprintw (ptr_win->win_status, _("%d:<DCC> "),
ptr_win->buffer->number);
else
wprintw (ptr_win->win_status, _("%d:[not connected] "),
ptr_win->buffer->number);
}
/* display list of other active windows (if any) with numbers */
@@ -1089,26 +1107,11 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
}
else
{
if (SERVER(buffer))
if (buffer->dcc)
{
snprintf (format, 32, "%%s> %%-%ds", input_width);
if (SERVER(buffer) && (SERVER(buffer)->is_connected))
ptr_nickname = SERVER(buffer)->nick;
else
ptr_nickname = cfg_look_no_nickname;
if (ptr_win == gui_current_window)
mvwprintw (ptr_win->win_input, 0, 0, format,
ptr_nickname,
buffer->input_buffer + buffer->input_buffer_1st_display);
else
mvwprintw (ptr_win->win_input, 0, 0, format,
ptr_nickname,
"");
snprintf (format, 32, "%%-%ds", input_width);
mvwprintw (ptr_win->win_input, 0, 0, format, "");
wclrtoeol (ptr_win->win_input);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x + strlen (ptr_nickname) + 2 +
(buffer->input_buffer_pos - buffer->input_buffer_1st_display));
}
else
{
@@ -1253,6 +1256,30 @@ gui_switch_to_buffer (t_gui_window *window, t_gui_buffer *buffer)
hotlist_remove_buffer (buffer);
}
/*
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist)
*/
void
gui_switch_to_dcc_buffer ()
{
t_gui_buffer *ptr_buffer;
/* check if dcc buffer exists */
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
{
if (BUFFER_IS_DCC (ptr_buffer))
break;
}
if (ptr_buffer)
{
gui_switch_to_buffer (gui_current_window, ptr_buffer);
gui_redraw_buffer (ptr_buffer);
}
else
gui_buffer_new (gui_current_window, NULL, NULL, 1, 1);
}
/*
* gui_switch_to_previous_buffer: switch to previous buffer
*/
@@ -1621,7 +1648,7 @@ gui_init ()
if (gui_window_new (0, 0, COLS, LINES))
{
gui_current_window = gui_windows;
gui_buffer_new (gui_windows, NULL, NULL, 1);
gui_buffer_new (gui_windows, NULL, NULL, 0, 1);
signal (SIGWINCH, gui_curses_resize_handler);
+220 -162
View File
@@ -90,115 +90,139 @@ gui_read_keyb ()
break;
/* cursor up */
case KEY_UP:
if (gui_current_window->buffer->ptr_history)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->ptr_history =
gui_current_window->buffer->ptr_history->next_history;
if (!gui_current_window->buffer->ptr_history)
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;
}
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);
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->ptr_history)
if (!gui_current_window->buffer->dcc)
{
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);
{
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->input_buffer_pos > 0)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos--;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos++;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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 */
case KEY_HOME:
if (gui_current_window->buffer->input_buffer_pos > 0)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos = 0;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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 */
case KEY_END:
if (gui_current_window->buffer->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos =
gui_current_window->buffer->input_buffer_size;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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:
gui_move_page_up (gui_current_window);
if (!gui_current_window->buffer->dcc)
gui_move_page_up (gui_current_window);
break;
/* page down */
case KEY_NPAGE:
gui_move_page_down (gui_current_window);
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->input_buffer_pos > 0)
if (!gui_current_window->buffer->dcc)
{
i = gui_current_window->buffer->input_buffer_pos-1;
while (gui_current_window->buffer->input_buffer[i])
if (gui_current_window->buffer->input_buffer_pos > 0)
{
gui_current_window->buffer->input_buffer[i] =
gui_current_window->buffer->input_buffer[i+1];
i++;
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;
}
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 */
case 0x08:
gui_delete_previous_word (gui_current_window->buffer);
if (!gui_current_window->buffer->dcc)
gui_delete_previous_word (gui_current_window->buffer);
break;
/* Control + L */
case 0x0C:
@@ -206,87 +230,74 @@ gui_read_keyb ()
break;
/* erase char under cursor */
case KEY_DC:
if (gui_current_window->buffer->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
if (!gui_current_window->buffer->dcc)
{
i = gui_current_window->buffer->input_buffer_pos;
while (gui_current_window->buffer->input_buffer[i])
if (gui_current_window->buffer->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
{
gui_current_window->buffer->input_buffer[i] =
gui_current_window->buffer->input_buffer[i+1];
i++;
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;
}
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':
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)
if (!gui_current_window->buffer->dcc)
{
// replace word with new completed word into input buffer
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';
if (gui_current_window->buffer->completion.diff_size > 0)
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)
{
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];
}
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);
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.base_word[0] == '/')
{
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);
gui_current_window->buffer->completion.position++;
gui_current_window->buffer->input_buffer_pos++;
}
else
{
if (gui_current_window->buffer->completion.base_word_pos == 0)
/* replace word with new completed word into input buffer */
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';
if (gui_current_window->buffer->completion.diff_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];
}
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);
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.base_word[0] == '/')
{
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);
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,
" ",
@@ -294,8 +305,27 @@ gui_read_keyb ()
gui_current_window->buffer->completion.position++;
gui_current_window->buffer->input_buffer_pos++;
}
else
{
if (gui_current_window->buffer->completion.base_word_pos == 0)
{
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);
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);
gui_current_window->buffer->completion.position++;
gui_current_window->buffer->input_buffer_pos++;
}
}
gui_draw_buffer_input (gui_current_window->buffer, 0);
}
gui_draw_buffer_input (gui_current_window->buffer, 0);
}
break;
/* escape code (for control-key) */
@@ -303,12 +333,14 @@ gui_read_keyb ()
if ((key = getch()) != ERR)
{
/*gui_printf (gui_current_window->buffer,
"[Debug] key pressed = %d, as octal: %o\n", key, key);*/
"[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;
@@ -322,11 +354,13 @@ gui_read_keyb ()
{
/* Control + Right */
case 99:
gui_move_next_word (gui_current_window->buffer);
if (!gui_current_window->buffer->dcc)
gui_move_next_word (gui_current_window->buffer);
break;
/* Control + Left */
case 100:
gui_move_previous_word (gui_current_window->buffer);
if (!gui_current_window->buffer->dcc)
gui_move_previous_word (gui_current_window->buffer);
break;
}
}
@@ -365,6 +399,24 @@ gui_read_keyb ()
}
}
break;
/* Alt-D */
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 */
case 'r':
case 'R':
@@ -380,36 +432,42 @@ gui_read_keyb ()
break;
/* send command/message */
case '\n':
if (gui_current_window->buffer->input_buffer_size > 0)
if (!gui_current_window->buffer->dcc)
{
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->input_buffer);
if (ptr_buffer == gui_current_window->buffer)
gui_draw_buffer_input (ptr_buffer, 0);
if (ptr_buffer)
ptr_buffer->input_buffer[0] = '\0';
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->input_buffer);
if (ptr_buffer == gui_current_window->buffer)
gui_draw_buffer_input (ptr_buffer, 0);
if (ptr_buffer)
ptr_buffer->input_buffer[0] = '\0';
}
}
break;
/* other key => add to input buffer */
default:
/*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';
gui_buffer_insert_string (gui_current_window->buffer,
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 (!gui_current_window->buffer->dcc)
{
/*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';
gui_buffer_insert_string (gui_current_window->buffer,
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;
}
break;
}
}
+15 -14
View File
@@ -47,6 +47,7 @@ t_gui_window *gui_current_window = NULL; /* pointer to current window */
t_gui_buffer *gui_buffers = NULL; /* pointer to first buffer */
t_gui_buffer *last_gui_buffer = NULL; /* pointer to last buffer */
t_gui_buffer *buffer_before_dcc = NULL; /* buffer before dcc switch */
t_gui_infobar *gui_infobar; /* pointer to infobar content */
@@ -121,26 +122,25 @@ gui_window_new (int x, int y, int width, int height)
*/
t_gui_buffer *
gui_buffer_new (t_gui_window *window, void *server, void *channel, int switch_to_buffer)
gui_buffer_new (t_gui_window *window, void *server, void *channel, int dcc,
int switch_to_buffer)
{
t_gui_buffer *new_buffer;
#ifdef DEBUG
wee_log_printf ("creating new buffer\n");
#endif
if (gui_buffers)
/* use first buffer if no server was assigned to this buffer */
if (!dcc && gui_buffers && (!SERVER(gui_buffers)))
{
/* use first buffer if no server was assigned to this buffer */
if (!SERVER(gui_buffers))
{
if (server)
((t_irc_server *)(server))->buffer = gui_buffers;
if (channel)
((t_irc_channel *)(channel))->buffer = gui_buffers;
SERVER(gui_buffers) = server;
CHANNEL(gui_buffers) = channel;
return gui_buffers;
}
if (server)
((t_irc_server *)(server))->buffer = gui_buffers;
if (channel)
((t_irc_channel *)(channel))->buffer = gui_buffers;
SERVER(gui_buffers) = server;
CHANNEL(gui_buffers) = channel;
return gui_buffers;
}
if ((new_buffer = (t_gui_buffer *)(malloc (sizeof (t_gui_buffer)))))
@@ -151,6 +151,7 @@ gui_buffer_new (t_gui_window *window, void *server, void *channel, int switch_to
/* assign server and channel to buffer */
SERVER(new_buffer) = server;
CHANNEL(new_buffer) = channel;
new_buffer->dcc = dcc;
/* assign buffer to server and channel */
if (server && !channel)
SERVER(new_buffer)->buffer = new_buffer;
@@ -402,7 +403,7 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
/* always at least one buffer */
if (!gui_buffers && create_new && switch_to_another)
(void) gui_buffer_new (gui_windows, NULL, NULL, 1);
(void) gui_buffer_new (gui_windows, NULL, NULL, 0, 1);
}
/*
+6 -1
View File
@@ -66,6 +66,7 @@
#define BUFFER_IS_SERVER(buffer) (SERVER(buffer) && !CHANNEL(buffer))
#define BUFFER_IS_CHANNEL(buffer) (CHANNEL(buffer) && (CHANNEL(buffer)->type == CHAT_CHANNEL))
#define BUFFER_IS_PRIVATE(buffer) (CHANNEL(buffer) && (CHANNEL(buffer)->type == CHAT_PRIVATE))
#define BUFFER_IS_DCC(buffer) (!SERVER(buffer) && !CHANNEL(buffer))
#define MSG_TYPE_TIME 1
#define MSG_TYPE_NICK 2
@@ -135,6 +136,7 @@ struct t_gui_buffer
/* server/channel */
void *server; /* buffer's server */
void *channel; /* buffer's channel */
int dcc; /* buffer is dcc status */
/* chat content (lines, line is composed by many messages) */
t_gui_line *lines; /* lines of chat window */
@@ -219,13 +221,14 @@ extern t_gui_window *last_gui_window;
extern t_gui_window *gui_current_window;
extern t_gui_buffer *gui_buffers;
extern t_gui_buffer *last_gui_buffer;
extern t_gui_buffer *buffer_before_dcc;
extern t_gui_infobar *gui_infobar;
/* prototypes */
/* GUI independent functions */
extern t_gui_window *gui_window_new (int, int, int, int);
extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int);
extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int, int);
extern void gui_buffer_clear (t_gui_buffer *);
extern void gui_buffer_clear_all ();
extern void gui_infobar_printf (int, int, char *, ...);
@@ -253,11 +256,13 @@ extern void gui_draw_buffer_infobar (t_gui_buffer *, int);
extern void gui_draw_buffer_input (t_gui_buffer *, int);
extern void gui_redraw_buffer (t_gui_buffer *);
extern void gui_switch_to_buffer (t_gui_window *, t_gui_buffer *);
extern void gui_switch_to_dcc_buffer ();
extern void gui_switch_to_previous_buffer (t_gui_window *);
extern void gui_switch_to_next_buffer (t_gui_window *);
extern void gui_switch_to_next_window (t_gui_window *);
extern void gui_move_page_up ();
extern void gui_move_page_down ();
extern void gui_curses_resize_handler ();
extern void gui_window_init_subwindows (t_gui_window *);
extern void gui_window_split_horiz (t_gui_window *);
extern void gui_window_split_vertic (t_gui_window *);
+1 -1
View File
@@ -72,7 +72,7 @@ channel_new (t_irc_server *server, int channel_type, char *channel_name,
server->channels = new_channel;
server->last_channel = new_channel;
gui_buffer_new (gui_current_window, server, new_channel, switch_to_buffer);
gui_buffer_new (gui_current_window, server, new_channel, 0, switch_to_buffer);
/* all is ok, return address of new channel */
return new_channel;
+1 -1
View File
@@ -706,7 +706,7 @@ server_auto_connect (int command_line)
if ( ((command_line) && (ptr_server->command_line))
|| ((!command_line) && (ptr_server->autoconnect)) )
{
(void) gui_buffer_new (gui_current_window, ptr_server, NULL, 1);
(void) gui_buffer_new (gui_current_window, ptr_server, NULL, 0, 1);
if (server_connect (ptr_server))
irc_login (ptr_server);
}
+2 -2
View File
@@ -917,7 +917,7 @@ weechat_cmd_connect (int argc, char **argv)
}
if (!ptr_server->buffer)
{
if (!gui_buffer_new (gui_current_window, ptr_server, NULL, 1))
if (!gui_buffer_new (gui_current_window, ptr_server, NULL, 0, 1))
return -1;
}
if (server_connect (ptr_server))
@@ -1499,7 +1499,7 @@ weechat_cmd_server (int argc, char **argv)
if (new_server->autoconnect)
{
(void) gui_buffer_new (gui_current_window, new_server, NULL, 1);
(void) gui_buffer_new (gui_current_window, new_server, NULL, 0, 1);
if (server_connect (new_server))
irc_login (new_server);
}
+86 -59
View File
@@ -325,12 +325,15 @@ gui_draw_buffer_title (t_gui_buffer *buffer, int erase)
}
else
{
/* TODO: change this copyright as title? */
mvwprintw (ptr_win->win_title, 0, 0,
"%s", PACKAGE_STRING " - " WEECHAT_WEBSITE);
mvwprintw (ptr_win->win_title, 0,
ptr_win->win_width - strlen (WEECHAT_COPYRIGHT),
"%s", WEECHAT_COPYRIGHT);
if (!buffer->dcc)
{
/* TODO: change this copyright as title? */
mvwprintw (ptr_win->win_title, 0, 0,
"%s", PACKAGE_STRING " - " WEECHAT_WEBSITE);
mvwprintw (ptr_win->win_title, 0,
ptr_win->win_width - strlen (WEECHAT_COPYRIGHT),
"%s", WEECHAT_COPYRIGHT);
}
}
wrefresh (ptr_win->win_title);
refresh ();
@@ -572,49 +575,60 @@ gui_draw_buffer_chat (t_gui_buffer *buffer, int erase)
if (has_colors ())
gui_window_set_color (ptr_win->win_chat, COLOR_WIN_CHAT);
ptr_line = buffer->last_line;
lines_used = 0;
while (ptr_line
&& (lines_used < (ptr_win->win_chat_height + ptr_win->sub_lines)))
if (buffer->dcc)
{
lines_used += gui_get_line_num_splits (ptr_win, ptr_line);
ptr_line = ptr_line->prev_line;
}
ptr_win->win_chat_cursor_x = 0;
ptr_win->win_chat_cursor_y = 0;
if (lines_used > (ptr_win->win_chat_height + ptr_win->sub_lines))
{
/* screen will be full (we'll display only end of 1st line) */
ptr_line = (ptr_line) ? ptr_line->next_line : buffer->lines;
gui_display_end_of_line (ptr_win, ptr_line,
gui_get_line_num_splits (ptr_win, ptr_line) -
(lines_used - (ptr_win->win_chat_height + ptr_win->sub_lines)));
ptr_line = ptr_line->next_line;
ptr_win->first_line_displayed = 0;
mvwprintw (ptr_win->win_chat, ptr_win->win_y, ptr_win->win_x,
"%s", _(" Type Status Filename / progress"));
for (i = 0; i < ptr_win->win_width; i++)
mvwprintw (ptr_win->win_chat, 1, i, "%c", '-');
move (ptr_win->win_y + 3, ptr_win->win_x);
}
else
{
/* all lines are displayed */
if (!ptr_line)
ptr_line = buffer->last_line;
lines_used = 0;
while (ptr_line
&& (lines_used < (ptr_win->win_chat_height + ptr_win->sub_lines)))
{
ptr_win->first_line_displayed = 1;
ptr_line = buffer->lines;
lines_used += gui_get_line_num_splits (ptr_win, ptr_line);
ptr_line = ptr_line->prev_line;
}
ptr_win->win_chat_cursor_x = 0;
ptr_win->win_chat_cursor_y = 0;
if (lines_used > (ptr_win->win_chat_height + ptr_win->sub_lines))
{
/* screen will be full (we'll display only end of 1st line) */
ptr_line = (ptr_line) ? ptr_line->next_line : buffer->lines;
gui_display_end_of_line (ptr_win, ptr_line,
gui_get_line_num_splits (ptr_win, ptr_line) -
(lines_used - (ptr_win->win_chat_height + ptr_win->sub_lines)));
ptr_line = ptr_line->next_line;
ptr_win->first_line_displayed = 0;
}
else
{
ptr_win->first_line_displayed = 0;
/* all lines are displayed */
if (!ptr_line)
{
ptr_win->first_line_displayed = 1;
ptr_line = buffer->lines;
}
else
{
ptr_win->first_line_displayed = 0;
ptr_line = ptr_line->next_line;
}
}
while (ptr_line)
{
if (!gui_display_line (ptr_win, ptr_line, 1))
break;
ptr_line = ptr_line->next_line;
}
/*if (ptr_win->win_chat_cursor_y <= ptr_win->win_chat_height - 1)
buffer->sub_lines = 0;*/
}
while (ptr_line)
{
if (!gui_display_line (ptr_win, ptr_line, 1))
break;
ptr_line = ptr_line->next_line;
}
/*if (ptr_win->win_chat_cursor_y <= ptr_win->win_chat_height - 1)
buffer->sub_lines = 0;*/
wrefresh (ptr_win->win_chat);
refresh ();
}
@@ -893,8 +907,12 @@ gui_draw_buffer_status (t_gui_buffer *buffer, int erase)
if (!SERVER(ptr_win->buffer))
{
gui_window_set_color (ptr_win->win_status, COLOR_WIN_STATUS);
wprintw (ptr_win->win_status, _("%d:[not connected] "),
ptr_win->buffer->number);
if (ptr_win->buffer->dcc)
wprintw (ptr_win->win_status, _("%d:<DCC> "),
ptr_win->buffer->number);
else
wprintw (ptr_win->win_status, _("%d:[not connected] "),
ptr_win->buffer->number);
}
/* display list of other active windows (if any) with numbers */
@@ -1089,26 +1107,11 @@ gui_draw_buffer_input (t_gui_buffer *buffer, int erase)
}
else
{
if (SERVER(buffer))
if (buffer->dcc)
{
snprintf (format, 32, "%%s> %%-%ds", input_width);
if (SERVER(buffer) && (SERVER(buffer)->is_connected))
ptr_nickname = SERVER(buffer)->nick;
else
ptr_nickname = cfg_look_no_nickname;
if (ptr_win == gui_current_window)
mvwprintw (ptr_win->win_input, 0, 0, format,
ptr_nickname,
buffer->input_buffer + buffer->input_buffer_1st_display);
else
mvwprintw (ptr_win->win_input, 0, 0, format,
ptr_nickname,
"");
snprintf (format, 32, "%%-%ds", input_width);
mvwprintw (ptr_win->win_input, 0, 0, format, "");
wclrtoeol (ptr_win->win_input);
if (ptr_win == gui_current_window)
move (ptr_win->win_y + ptr_win->win_height - 1,
ptr_win->win_x + strlen (ptr_nickname) + 2 +
(buffer->input_buffer_pos - buffer->input_buffer_1st_display));
}
else
{
@@ -1253,6 +1256,30 @@ gui_switch_to_buffer (t_gui_window *window, t_gui_buffer *buffer)
hotlist_remove_buffer (buffer);
}
/*
* gui_switch_to_dcc_buffer: switch to dcc buffer (create it if it does not exist)
*/
void
gui_switch_to_dcc_buffer ()
{
t_gui_buffer *ptr_buffer;
/* check if dcc buffer exists */
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
{
if (BUFFER_IS_DCC (ptr_buffer))
break;
}
if (ptr_buffer)
{
gui_switch_to_buffer (gui_current_window, ptr_buffer);
gui_redraw_buffer (ptr_buffer);
}
else
gui_buffer_new (gui_current_window, NULL, NULL, 1, 1);
}
/*
* gui_switch_to_previous_buffer: switch to previous buffer
*/
@@ -1621,7 +1648,7 @@ gui_init ()
if (gui_window_new (0, 0, COLS, LINES))
{
gui_current_window = gui_windows;
gui_buffer_new (gui_windows, NULL, NULL, 1);
gui_buffer_new (gui_windows, NULL, NULL, 0, 1);
signal (SIGWINCH, gui_curses_resize_handler);
+220 -162
View File
@@ -90,115 +90,139 @@ gui_read_keyb ()
break;
/* cursor up */
case KEY_UP:
if (gui_current_window->buffer->ptr_history)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->ptr_history =
gui_current_window->buffer->ptr_history->next_history;
if (!gui_current_window->buffer->ptr_history)
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;
}
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);
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->ptr_history)
if (!gui_current_window->buffer->dcc)
{
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);
{
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->input_buffer_pos > 0)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos--;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos++;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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 */
case KEY_HOME:
if (gui_current_window->buffer->input_buffer_pos > 0)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos = 0;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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 */
case KEY_END:
if (gui_current_window->buffer->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
if (!gui_current_window->buffer->dcc)
{
gui_current_window->buffer->input_buffer_pos =
gui_current_window->buffer->input_buffer_size;
gui_draw_buffer_input (gui_current_window->buffer, 0);
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:
gui_move_page_up (gui_current_window);
if (!gui_current_window->buffer->dcc)
gui_move_page_up (gui_current_window);
break;
/* page down */
case KEY_NPAGE:
gui_move_page_down (gui_current_window);
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->input_buffer_pos > 0)
if (!gui_current_window->buffer->dcc)
{
i = gui_current_window->buffer->input_buffer_pos-1;
while (gui_current_window->buffer->input_buffer[i])
if (gui_current_window->buffer->input_buffer_pos > 0)
{
gui_current_window->buffer->input_buffer[i] =
gui_current_window->buffer->input_buffer[i+1];
i++;
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;
}
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 */
case 0x08:
gui_delete_previous_word (gui_current_window->buffer);
if (!gui_current_window->buffer->dcc)
gui_delete_previous_word (gui_current_window->buffer);
break;
/* Control + L */
case 0x0C:
@@ -206,87 +230,74 @@ gui_read_keyb ()
break;
/* erase char under cursor */
case KEY_DC:
if (gui_current_window->buffer->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
if (!gui_current_window->buffer->dcc)
{
i = gui_current_window->buffer->input_buffer_pos;
while (gui_current_window->buffer->input_buffer[i])
if (gui_current_window->buffer->input_buffer_pos <
gui_current_window->buffer->input_buffer_size)
{
gui_current_window->buffer->input_buffer[i] =
gui_current_window->buffer->input_buffer[i+1];
i++;
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;
}
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':
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)
if (!gui_current_window->buffer->dcc)
{
// replace word with new completed word into input buffer
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';
if (gui_current_window->buffer->completion.diff_size > 0)
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)
{
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];
}
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);
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.base_word[0] == '/')
{
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);
gui_current_window->buffer->completion.position++;
gui_current_window->buffer->input_buffer_pos++;
}
else
{
if (gui_current_window->buffer->completion.base_word_pos == 0)
/* replace word with new completed word into input buffer */
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';
if (gui_current_window->buffer->completion.diff_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];
}
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);
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.base_word[0] == '/')
{
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);
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,
" ",
@@ -294,8 +305,27 @@ gui_read_keyb ()
gui_current_window->buffer->completion.position++;
gui_current_window->buffer->input_buffer_pos++;
}
else
{
if (gui_current_window->buffer->completion.base_word_pos == 0)
{
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);
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);
gui_current_window->buffer->completion.position++;
gui_current_window->buffer->input_buffer_pos++;
}
}
gui_draw_buffer_input (gui_current_window->buffer, 0);
}
gui_draw_buffer_input (gui_current_window->buffer, 0);
}
break;
/* escape code (for control-key) */
@@ -303,12 +333,14 @@ gui_read_keyb ()
if ((key = getch()) != ERR)
{
/*gui_printf (gui_current_window->buffer,
"[Debug] key pressed = %d, as octal: %o\n", key, key);*/
"[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;
@@ -322,11 +354,13 @@ gui_read_keyb ()
{
/* Control + Right */
case 99:
gui_move_next_word (gui_current_window->buffer);
if (!gui_current_window->buffer->dcc)
gui_move_next_word (gui_current_window->buffer);
break;
/* Control + Left */
case 100:
gui_move_previous_word (gui_current_window->buffer);
if (!gui_current_window->buffer->dcc)
gui_move_previous_word (gui_current_window->buffer);
break;
}
}
@@ -365,6 +399,24 @@ gui_read_keyb ()
}
}
break;
/* Alt-D */
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 */
case 'r':
case 'R':
@@ -380,36 +432,42 @@ gui_read_keyb ()
break;
/* send command/message */
case '\n':
if (gui_current_window->buffer->input_buffer_size > 0)
if (!gui_current_window->buffer->dcc)
{
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->input_buffer);
if (ptr_buffer == gui_current_window->buffer)
gui_draw_buffer_input (ptr_buffer, 0);
if (ptr_buffer)
ptr_buffer->input_buffer[0] = '\0';
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->input_buffer);
if (ptr_buffer == gui_current_window->buffer)
gui_draw_buffer_input (ptr_buffer, 0);
if (ptr_buffer)
ptr_buffer->input_buffer[0] = '\0';
}
}
break;
/* other key => add to input buffer */
default:
/*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';
gui_buffer_insert_string (gui_current_window->buffer,
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 (!gui_current_window->buffer->dcc)
{
/*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';
gui_buffer_insert_string (gui_current_window->buffer,
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;
}
break;
}
}
+15 -14
View File
@@ -47,6 +47,7 @@ t_gui_window *gui_current_window = NULL; /* pointer to current window */
t_gui_buffer *gui_buffers = NULL; /* pointer to first buffer */
t_gui_buffer *last_gui_buffer = NULL; /* pointer to last buffer */
t_gui_buffer *buffer_before_dcc = NULL; /* buffer before dcc switch */
t_gui_infobar *gui_infobar; /* pointer to infobar content */
@@ -121,26 +122,25 @@ gui_window_new (int x, int y, int width, int height)
*/
t_gui_buffer *
gui_buffer_new (t_gui_window *window, void *server, void *channel, int switch_to_buffer)
gui_buffer_new (t_gui_window *window, void *server, void *channel, int dcc,
int switch_to_buffer)
{
t_gui_buffer *new_buffer;
#ifdef DEBUG
wee_log_printf ("creating new buffer\n");
#endif
if (gui_buffers)
/* use first buffer if no server was assigned to this buffer */
if (!dcc && gui_buffers && (!SERVER(gui_buffers)))
{
/* use first buffer if no server was assigned to this buffer */
if (!SERVER(gui_buffers))
{
if (server)
((t_irc_server *)(server))->buffer = gui_buffers;
if (channel)
((t_irc_channel *)(channel))->buffer = gui_buffers;
SERVER(gui_buffers) = server;
CHANNEL(gui_buffers) = channel;
return gui_buffers;
}
if (server)
((t_irc_server *)(server))->buffer = gui_buffers;
if (channel)
((t_irc_channel *)(channel))->buffer = gui_buffers;
SERVER(gui_buffers) = server;
CHANNEL(gui_buffers) = channel;
return gui_buffers;
}
if ((new_buffer = (t_gui_buffer *)(malloc (sizeof (t_gui_buffer)))))
@@ -151,6 +151,7 @@ gui_buffer_new (t_gui_window *window, void *server, void *channel, int switch_to
/* assign server and channel to buffer */
SERVER(new_buffer) = server;
CHANNEL(new_buffer) = channel;
new_buffer->dcc = dcc;
/* assign buffer to server and channel */
if (server && !channel)
SERVER(new_buffer)->buffer = new_buffer;
@@ -402,7 +403,7 @@ gui_buffer_free (t_gui_buffer *buffer, int switch_to_another)
/* always at least one buffer */
if (!gui_buffers && create_new && switch_to_another)
(void) gui_buffer_new (gui_windows, NULL, NULL, 1);
(void) gui_buffer_new (gui_windows, NULL, NULL, 0, 1);
}
/*
+6 -1
View File
@@ -66,6 +66,7 @@
#define BUFFER_IS_SERVER(buffer) (SERVER(buffer) && !CHANNEL(buffer))
#define BUFFER_IS_CHANNEL(buffer) (CHANNEL(buffer) && (CHANNEL(buffer)->type == CHAT_CHANNEL))
#define BUFFER_IS_PRIVATE(buffer) (CHANNEL(buffer) && (CHANNEL(buffer)->type == CHAT_PRIVATE))
#define BUFFER_IS_DCC(buffer) (!SERVER(buffer) && !CHANNEL(buffer))
#define MSG_TYPE_TIME 1
#define MSG_TYPE_NICK 2
@@ -135,6 +136,7 @@ struct t_gui_buffer
/* server/channel */
void *server; /* buffer's server */
void *channel; /* buffer's channel */
int dcc; /* buffer is dcc status */
/* chat content (lines, line is composed by many messages) */
t_gui_line *lines; /* lines of chat window */
@@ -219,13 +221,14 @@ extern t_gui_window *last_gui_window;
extern t_gui_window *gui_current_window;
extern t_gui_buffer *gui_buffers;
extern t_gui_buffer *last_gui_buffer;
extern t_gui_buffer *buffer_before_dcc;
extern t_gui_infobar *gui_infobar;
/* prototypes */
/* GUI independent functions */
extern t_gui_window *gui_window_new (int, int, int, int);
extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int);
extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int, int);
extern void gui_buffer_clear (t_gui_buffer *);
extern void gui_buffer_clear_all ();
extern void gui_infobar_printf (int, int, char *, ...);
@@ -253,11 +256,13 @@ extern void gui_draw_buffer_infobar (t_gui_buffer *, int);
extern void gui_draw_buffer_input (t_gui_buffer *, int);
extern void gui_redraw_buffer (t_gui_buffer *);
extern void gui_switch_to_buffer (t_gui_window *, t_gui_buffer *);
extern void gui_switch_to_dcc_buffer ();
extern void gui_switch_to_previous_buffer (t_gui_window *);
extern void gui_switch_to_next_buffer (t_gui_window *);
extern void gui_switch_to_next_window (t_gui_window *);
extern void gui_move_page_up ();
extern void gui_move_page_down ();
extern void gui_curses_resize_handler ();
extern void gui_window_init_subwindows (t_gui_window *);
extern void gui_window_split_horiz (t_gui_window *);
extern void gui_window_split_vertic (t_gui_window *);
+1 -1
View File
@@ -72,7 +72,7 @@ channel_new (t_irc_server *server, int channel_type, char *channel_name,
server->channels = new_channel;
server->last_channel = new_channel;
gui_buffer_new (gui_current_window, server, new_channel, switch_to_buffer);
gui_buffer_new (gui_current_window, server, new_channel, 0, switch_to_buffer);
/* all is ok, return address of new channel */
return new_channel;
+1 -1
View File
@@ -706,7 +706,7 @@ server_auto_connect (int command_line)
if ( ((command_line) && (ptr_server->command_line))
|| ((!command_line) && (ptr_server->autoconnect)) )
{
(void) gui_buffer_new (gui_current_window, ptr_server, NULL, 1);
(void) gui_buffer_new (gui_current_window, ptr_server, NULL, 0, 1);
if (server_connect (ptr_server))
irc_login (ptr_server);
}