void gui_chat_printf_y (struct t_gui_buffer *buffer, int y, const char *message, ...) { va_list argptr; struct t_gui_line *ptr_line; if (gui_init_ok) { if (!buffer) buffer = gui_buffer_search_main (); if (buffer->type != GUI_BUFFER_TYPE_FREE) buffer = gui_buffers; if (buffer->type != GUI_BUFFER_TYPE_FREE) return; } if (!gui_chat_buffer) gui_chat_buffer = malloc (GUI_CHAT_BUFFER_PRINTF_SIZE); if (!gui_chat_buffer) return; va_start (argptr, message); vsnprintf (gui_chat_buffer, GUI_CHAT_BUFFER_PRINTF_SIZE, message, argptr); va_end (argptr); utf8_normalize (gui_chat_buffer, '?'); /* no message: delete line */ if (!gui_chat_buffer[0]) { if (gui_init_ok) { for (ptr_line = buffer->own_lines->first_line; ptr_line; ptr_line = ptr_line->next_line) { if (ptr_line->data->y >= y) break; } if (ptr_line && (ptr_line->data->y == y)) { gui_line_free (buffer, ptr_line); gui_buffer_ask_chat_refresh (buffer, 2); } } } else { if (gui_init_ok) { gui_line_add_y (buffer, y, gui_chat_buffer); gui_buffer_ask_chat_refresh (buffer, 1); } else string_iconv_fprintf (stdout, "%s\n", gui_chat_buffer); } }
void gui_nicklist_remove_nick (struct t_gui_buffer *buffer, struct t_gui_nick *nick) { char *nick_removed; if (!buffer || !nick) return; nick_removed = (nick->name) ? strdup (nick->name) : NULL; gui_nicklist_send_signal ("nicklist_nick_removing", buffer, nick_removed); gui_nicklist_send_hsignal ("nicklist_nick_removing", buffer, NULL, nick); /* remove nick from list */ if (nick->prev_nick) (nick->prev_nick)->next_nick = nick->next_nick; if (nick->next_nick) (nick->next_nick)->prev_nick = nick->prev_nick; if ((nick->group)->nicks == nick) (nick->group)->nicks = nick->next_nick; if ((nick->group)->last_nick == nick) (nick->group)->last_nick = nick->prev_nick; /* free data */ if (nick->name) string_shared_free (nick->name); if (nick->color) string_shared_free (nick->color); if (nick->prefix) string_shared_free (nick->prefix); if (nick->prefix_color) string_shared_free (nick->prefix_color); buffer->nicklist_count--; buffer->nicklist_nicks_count--; if (nick->visible) { if (buffer->nicklist_visible_count > 0) buffer->nicklist_visible_count--; } free (nick); if (CONFIG_BOOLEAN(config_look_color_nick_offline)) gui_buffer_ask_chat_refresh (buffer, 1); gui_nicklist_send_signal ("nicklist_nick_removed", buffer, nick_removed); if (nick_removed) free (nick_removed); }
struct t_gui_nick * gui_nicklist_add_nick (struct t_gui_buffer *buffer, struct t_gui_nick_group *group, const char *name, const char *color, const char *prefix, const char *prefix_color, int visible) { struct t_gui_nick *new_nick; if (!buffer || !name || gui_nicklist_search_nick (buffer, NULL, name)) return NULL; new_nick = malloc (sizeof (*new_nick)); if (!new_nick) return NULL; new_nick->group = (group) ? group : buffer->nicklist_root; new_nick->name = (char *)string_shared_get (name); new_nick->color = (color) ? (char *)string_shared_get (color) : NULL; new_nick->prefix = (prefix) ? (char *)string_shared_get (prefix) : NULL; new_nick->prefix_color = (prefix_color) ? (char *)string_shared_get (prefix_color) : NULL; new_nick->visible = visible; gui_nicklist_insert_nick_sorted (new_nick->group, new_nick); buffer->nicklist_count++; buffer->nicklist_nicks_count++; if (visible) buffer->nicklist_visible_count++; if (CONFIG_BOOLEAN(config_look_color_nick_offline)) gui_buffer_ask_chat_refresh (buffer, 1); gui_nicklist_send_signal ("nicklist_nick_added", buffer, name); gui_nicklist_send_hsignal ("nicklist_nick_added", buffer, NULL, new_nick); return new_nick; }
void gui_input_scroll_unread () { if (gui_current_window->buffer->text_search == GUI_TEXT_SEARCH_DISABLED) { if (CONFIG_STRING(config_look_read_marker) && CONFIG_STRING(config_look_read_marker)[0] && (gui_current_window->buffer->type == GUI_BUFFER_TYPE_FORMATTED) && (gui_current_window->buffer->lines->first_line_not_read || (gui_current_window->buffer->lines->last_read_line && gui_current_window->buffer->lines->last_read_line != gui_current_window->buffer->lines->last_line))) { if (gui_current_window->buffer->lines->first_line_not_read) gui_current_window->start_line = gui_current_window->buffer->lines->first_line; else gui_current_window->start_line = gui_current_window->buffer->lines->last_read_line->next_line; gui_current_window->start_line_pos = 0; gui_current_window->first_line_displayed = (gui_current_window->start_line == gui_line_get_first_displayed (gui_current_window->buffer)); gui_buffer_ask_chat_refresh (gui_current_window->buffer, 2); } } }
void gui_cursor_mode_toggle () { gui_cursor_mode ^= 1; if (gui_cursor_mode) { if (gui_cursor_debug) gui_input_delete_line (gui_current_window->buffer); gui_cursor_x = gui_window_cursor_x; gui_cursor_y = gui_window_cursor_y; gui_cursor_move_xy (0, 0); } else { /* restore input (and move cursor in input) */ if (gui_cursor_debug) gui_input_delete_line (gui_current_window->buffer); gui_input_text_changed_modifier_and_signal (gui_current_window->buffer, 0, /* save undo */ 1); /* stop completion */ gui_buffer_ask_chat_refresh (gui_current_window->buffer, 2); } }
void gui_chat_printf_y (struct t_gui_buffer *buffer, int y, const char *message, ...) { struct t_gui_line *ptr_line; int i, num_lines_to_add; if (!gui_buffer_valid (buffer)) return; if (gui_init_ok) { if (!buffer) buffer = gui_buffer_search_main (); if (!buffer || buffer->closing) return; if (buffer->type != GUI_BUFFER_TYPE_FREE) buffer = gui_buffers; if (buffer->type != GUI_BUFFER_TYPE_FREE) return; } weechat_va_format (message); if (!vbuffer) return; utf8_normalize (vbuffer, '?'); /* no message: delete line */ if (!vbuffer[0]) { if (gui_init_ok && (y >= 0)) { for (ptr_line = buffer->own_lines->first_line; ptr_line; ptr_line = ptr_line->next_line) { if (ptr_line->data->y >= y) break; } if (ptr_line && (ptr_line->data->y == y)) { if (ptr_line->next_line) gui_line_clear (ptr_line); else gui_line_free (buffer, ptr_line); gui_buffer_ask_chat_refresh (buffer, 2); } } } else { if (gui_init_ok) { /* if y is negative, add a line -N lines after the last line */ if (y < 0) { y = (buffer->own_lines && buffer->own_lines->last_line) ? buffer->own_lines->last_line->data->y - y : (-1 * y) - 1; } /* compute the number of lines to add before y */ if (buffer->own_lines && buffer->own_lines->last_line) num_lines_to_add = y - buffer->own_lines->last_line->data->y - 1; else num_lines_to_add = y; if (num_lines_to_add > 0) { /* * add empty line(s) before asked line, to ensure there is at * least "y" lines in buffer, and then be able to scroll * properly buffer page by page */ for (i = y - num_lines_to_add; i < y; i++) { gui_line_add_y (buffer, i, ""); } } gui_line_add_y (buffer, y, vbuffer); gui_buffer_ask_chat_refresh (buffer, 1); } else string_fprintf (stdout, "%s\n", vbuffer); } free (vbuffer); }
void gui_chat_printf_date_tags (struct t_gui_buffer *buffer, time_t date, const char *tags, const char *message, ...) { time_t date_printed; int display_time, length, at_least_one_message_printed, msg_discarded; char *pos, *pos_prefix, *pos_tab, *pos_end, *pos_lines; char *modifier_data, *new_msg, *ptr_msg, *lines_waiting; struct t_gui_line *ptr_line; if (!message) return; if (!gui_buffer_valid (buffer)) return; if (gui_init_ok) { if (!buffer) buffer = gui_buffer_search_main (); if (!buffer || buffer->closing) return; if (buffer->type != GUI_BUFFER_TYPE_FORMATTED) buffer = gui_buffers; if (buffer->type != GUI_BUFFER_TYPE_FORMATTED) return; } /* if mute is enabled for buffer (or all buffers), then just return */ if ((gui_chat_mute == GUI_CHAT_MUTE_ALL_BUFFERS) || ((gui_chat_mute == GUI_CHAT_MUTE_BUFFER) && (gui_chat_mute_buffer == buffer))) return; weechat_va_format (message); if (!vbuffer) return; utf8_normalize (vbuffer, '?'); date_printed = time (NULL); if (date <= 0) date = date_printed; at_least_one_message_printed = 0; pos = vbuffer; while (pos) { /* display until next end of line */ pos_end = strchr (pos, '\n'); if (pos_end) pos_end[0] = '\0'; /* call modifier for message printed ("weechat_print") */ new_msg = NULL; msg_discarded = 0; if (buffer) { length = strlen (gui_buffer_get_plugin_name (buffer)) + 1 + strlen (buffer->name) + 1 + ((tags) ? strlen (tags) : 0) + 1; modifier_data = malloc (length); if (modifier_data) { snprintf (modifier_data, length, "%s;%s;%s", gui_buffer_get_plugin_name (buffer), buffer->name, (tags) ? tags : ""); new_msg = hook_modifier_exec (NULL, "weechat_print", modifier_data, pos); free (modifier_data); if (new_msg) { if (!new_msg[0] && pos[0]) { /* * modifier returned empty message, then we'll not * print anything */ free (new_msg); new_msg = NULL; msg_discarded = 1; } else if (strcmp (message, new_msg) == 0) { /* no changes in new message */ free (new_msg); new_msg = NULL; } } } } if (!msg_discarded) { pos_prefix = NULL; display_time = 1; ptr_msg = (new_msg) ? new_msg : pos; /* space followed by tab => prefix ignored */ if ((ptr_msg[0] == ' ') && (ptr_msg[1] == '\t')) { ptr_msg += 2; } else { /* if two first chars are tab, then do not display time */ if ((ptr_msg[0] == '\t') && (ptr_msg[1] == '\t')) { display_time = 0; ptr_msg += 2; } else { /* if tab found, use prefix (before tab) */ pos_tab = strchr (ptr_msg, '\t'); if (pos_tab) { pos_tab[0] = '\0'; pos_prefix = ptr_msg; ptr_msg = pos_tab + 1; } } } if (gui_init_ok) { ptr_line = gui_line_add (buffer, (display_time) ? date : 0, date_printed, tags, pos_prefix, ptr_msg); if (ptr_line) { if (buffer && buffer->print_hooks_enabled) hook_print_exec (buffer, ptr_line); if (ptr_line->data->displayed) at_least_one_message_printed = 1; } } else { length = ((pos_prefix) ? strlen (pos_prefix) + 1 : 0) + strlen (ptr_msg) + 1; if (gui_chat_lines_waiting_buffer) { length += strlen (gui_chat_lines_waiting_buffer) + 1; lines_waiting = realloc (gui_chat_lines_waiting_buffer, length); if (lines_waiting) { gui_chat_lines_waiting_buffer = lines_waiting; } else { free (gui_chat_lines_waiting_buffer); gui_chat_lines_waiting_buffer = NULL; } } else { gui_chat_lines_waiting_buffer = malloc (length); if (gui_chat_lines_waiting_buffer) gui_chat_lines_waiting_buffer[0] = '\0'; } if (gui_chat_lines_waiting_buffer) { pos_lines = gui_chat_lines_waiting_buffer + strlen (gui_chat_lines_waiting_buffer); if (pos_lines > gui_chat_lines_waiting_buffer) { pos_lines[0] = '\n'; pos_lines++; } if (pos_prefix) { memcpy (pos_lines, pos_prefix, strlen (pos_prefix)); pos_lines += strlen (pos_prefix); pos_lines[0] = '\t'; pos_lines++; } memcpy (pos_lines, ptr_msg, strlen (ptr_msg) + 1); } } } if (new_msg) free (new_msg); pos = (pos_end && pos_end[1]) ? pos_end + 1 : NULL; } if (gui_init_ok && at_least_one_message_printed) gui_buffer_ask_chat_refresh (buffer, 1); free (vbuffer); }
void gui_filter_buffer (struct t_gui_buffer *buffer, struct t_gui_line_data *line_data) { struct t_gui_line *ptr_line; struct t_gui_line_data *ptr_line_data; struct t_gui_window *ptr_window; int lines_changed, line_displayed, lines_hidden; lines_changed = 0; lines_hidden = buffer->lines->lines_hidden; if (!line_data) buffer->lines->prefix_max_length = CONFIG_INTEGER(config_look_prefix_align_min); ptr_line = buffer->lines->first_line; while (ptr_line || line_data) { ptr_line_data = (line_data) ? line_data : ptr_line->data; line_displayed = gui_filter_check_line (ptr_line_data); if (line_displayed && (ptr_line_data->prefix_length > buffer->lines->prefix_max_length)) { buffer->lines->prefix_max_length = ptr_line_data->prefix_length; } if (ptr_line_data->displayed != line_displayed) { lines_changed = 1; lines_hidden += (line_displayed) ? -1 : 1; } ptr_line_data->displayed = line_displayed; if (line_data) break; ptr_line = ptr_line->next_line; } if (line_data) line_data->buffer->lines->prefix_max_length_refresh = 1; if (buffer->lines->lines_hidden != lines_hidden) { buffer->lines->lines_hidden = lines_hidden; hook_signal_send ("buffer_lines_hidden", WEECHAT_HOOK_SIGNAL_POINTER, buffer); } if (lines_changed) { /* force a full refresh of buffer */ gui_buffer_ask_chat_refresh (buffer, 2); /* * check that a scroll in a window displaying this buffer is not on a * hidden line (if this happens, use the previous displayed line as * scroll) */ for (ptr_window = gui_windows; ptr_window; ptr_window = ptr_window->next_window) { if ((ptr_window->buffer == buffer) && ptr_window->scroll->start_line && !ptr_window->scroll->start_line->data->displayed) { ptr_window->scroll->start_line = gui_line_get_prev_displayed (ptr_window->scroll->start_line); ptr_window->scroll->start_line_pos = 0; } } } }
void gui_line_remove_from_list (struct t_gui_buffer *buffer, struct t_gui_lines *lines, struct t_gui_line *line, int free_data) { struct t_gui_window *ptr_win; struct t_gui_window_scroll *ptr_scroll; int prefix_length, prefix_is_nick; for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) { /* reset scroll for any window scroll starting with this line */ for (ptr_scroll = ptr_win->scroll; ptr_scroll; ptr_scroll = ptr_scroll->next_scroll) { if (ptr_scroll->start_line == line) { ptr_scroll->start_line = ptr_scroll->start_line->next_line; ptr_scroll->start_line_pos = 0; gui_buffer_ask_chat_refresh (buffer, 2); } } /* remove line from coords */ gui_window_coords_remove_line (ptr_win, line); } gui_line_get_prefix_for_display (line, NULL, &prefix_length, NULL, &prefix_is_nick); if (prefix_is_nick) prefix_length += config_length_nick_prefix_suffix; if (prefix_length == lines->prefix_max_length) lines->prefix_max_length_refresh = 1; /* move read marker if it was on line we are removing */ if (lines->last_read_line == line) { lines->last_read_line = lines->last_read_line->prev_line; lines->first_line_not_read = (lines->last_read_line) ? 0 : 1; gui_buffer_ask_chat_refresh (buffer, 1); } /* free data */ if (free_data) { if (line->data->str_time) free (line->data->str_time); gui_line_tags_free (line->data); if (line->data->prefix) string_shared_free (line->data->prefix); if (line->data->message) free (line->data->message); free (line->data); } /* remove line from list */ if (line->prev_line) (line->prev_line)->next_line = line->next_line; if (line->next_line) (line->next_line)->prev_line = line->prev_line; if (lines->first_line == line) lines->first_line = line->next_line; if (lines->last_line == line) lines->last_line = line->prev_line; lines->lines_count--; free (line); }
int gui_line_hdata_line_data_update_cb (void *data, struct t_hdata *hdata, void *pointer, struct t_hashtable *hashtable) { const char *value; struct t_gui_line_data *line_data; struct t_gui_window *ptr_win; int rc, update_coords; /* make C compiler happy */ (void) data; line_data = (struct t_gui_line_data *)pointer; rc = 0; update_coords = 0; if (hashtable_has_key (hashtable, "date")) { value = hashtable_get (hashtable, "date"); if (value) { hdata_set (hdata, pointer, "date", value); if (line_data->str_time) free (line_data->str_time); line_data->str_time = gui_chat_get_time_string (line_data->date); rc++; update_coords = 1; } } if (hashtable_has_key (hashtable, "date_printed")) { value = hashtable_get (hashtable, "date_printed"); if (value) { hdata_set (hdata, pointer, "date_printed", value); rc++; } } if (hashtable_has_key (hashtable, "tags_array")) { value = hashtable_get (hashtable, "tags_array"); gui_line_tags_free (line_data); gui_line_tags_alloc (line_data, value); rc++; } if (hashtable_has_key (hashtable, "prefix")) { value = hashtable_get (hashtable, "prefix"); hdata_set (hdata, pointer, "prefix", value); line_data->prefix_length = (line_data->prefix) ? gui_chat_strlen_screen (line_data->prefix) : 0; line_data->buffer->lines->prefix_max_length_refresh = 1; rc++; update_coords = 1; } if (hashtable_has_key (hashtable, "message")) { value = hashtable_get (hashtable, "message"); hdata_set (hdata, pointer, "message", value); rc++; update_coords = 1; } if (rc > 0) { if (update_coords) { for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) { gui_window_coords_remove_line_data (ptr_win, line_data); } } gui_filter_buffer (line_data->buffer, line_data); gui_buffer_ask_chat_refresh (line_data->buffer, 1); } return rc; }
struct t_gui_line * gui_line_add (struct t_gui_buffer *buffer, time_t date, time_t date_printed, const char *tags, const char *prefix, const char *message) { struct t_gui_line *new_line; struct t_gui_line_data *new_line_data; struct t_gui_window *ptr_win; char *message_for_signal; const char *nick; int notify_level, *max_notify_level, lines_removed; time_t current_time; /* * remove line(s) if necessary, according to history options: * max_lines: if > 0, keep only N lines in buffer * max_minutes: if > 0, keep only lines from last N minutes */ lines_removed = 0; current_time = time (NULL); while (buffer->own_lines->first_line && (((CONFIG_INTEGER(config_history_max_buffer_lines_number) > 0) && (buffer->own_lines->lines_count + 1 > CONFIG_INTEGER(config_history_max_buffer_lines_number))) || ((CONFIG_INTEGER(config_history_max_buffer_lines_minutes) > 0) && (current_time - buffer->own_lines->first_line->data->date_printed > CONFIG_INTEGER(config_history_max_buffer_lines_minutes) * 60)))) { gui_line_free (buffer, buffer->own_lines->first_line); lines_removed++; } /* create new line */ new_line = malloc (sizeof (*new_line)); if (!new_line) { log_printf (_("Not enough memory for new line")); return NULL; } /* create data for line */ new_line_data = malloc (sizeof (*(new_line->data))); if (!new_line_data) { free (new_line); log_printf (_("Not enough memory for new line")); return NULL; } new_line->data = new_line_data; /* fill data in new line */ new_line->data->buffer = buffer; new_line->data->y = -1; new_line->data->date = date; new_line->data->date_printed = date_printed; new_line->data->str_time = gui_chat_get_time_string (date); gui_line_tags_alloc (new_line->data, tags); new_line->data->refresh_needed = 0; new_line->data->prefix = (prefix) ? (char *)string_shared_get (prefix) : ((date != 0) ? (char *)string_shared_get ("") : NULL); new_line->data->prefix_length = (prefix) ? gui_chat_strlen_screen (prefix) : 0; new_line->data->message = (message) ? strdup (message) : strdup (""); /* get notify level and max notify level for nick in buffer */ notify_level = gui_line_get_notify_level (new_line); max_notify_level = NULL; nick = gui_line_get_nick_tag (new_line); if (nick) max_notify_level = hashtable_get (buffer->hotlist_max_level_nicks, nick); if (max_notify_level && (*max_notify_level < notify_level)) notify_level = *max_notify_level; if (notify_level == GUI_HOTLIST_HIGHLIGHT) new_line->data->highlight = 1; else if (max_notify_level && (*max_notify_level < GUI_HOTLIST_HIGHLIGHT)) new_line->data->highlight = 0; else new_line->data->highlight = gui_line_has_highlight (new_line); /* check if line is filtered or not */ new_line->data->displayed = gui_filter_check_line (new_line->data); /* add line to lines list */ gui_line_add_to_list (buffer->own_lines, new_line); /* update hotlist and/or send signals for line */ if (new_line->data->displayed) { if (new_line->data->highlight) { (void) gui_hotlist_add (buffer, GUI_HOTLIST_HIGHLIGHT, NULL); if (!weechat_upgrading) { message_for_signal = gui_chat_build_string_prefix_message (new_line); if (message_for_signal) { hook_signal_send ("weechat_highlight", WEECHAT_HOOK_SIGNAL_STRING, message_for_signal); free (message_for_signal); } } } else { if (!weechat_upgrading && (notify_level == GUI_HOTLIST_PRIVATE)) { message_for_signal = gui_chat_build_string_prefix_message (new_line); if (message_for_signal) { hook_signal_send ("weechat_pv", WEECHAT_HOOK_SIGNAL_STRING, message_for_signal); free (message_for_signal); } } if (notify_level >= GUI_HOTLIST_MIN) (void) gui_hotlist_add (buffer, notify_level, NULL); } } else { buffer->own_lines->lines_hidden++; if (buffer->mixed_lines) buffer->mixed_lines->lines_hidden++; hook_signal_send ("buffer_lines_hidden", WEECHAT_HOOK_SIGNAL_POINTER, buffer); } /* add mixed line, if buffer is attached to at least one other buffer */ if (buffer->mixed_lines) { gui_line_mixed_add (buffer->mixed_lines, new_line->data); } /* * if some lines were removed, force a full refresh if at least one window * is displaying buffer and that number of lines in buffer is lower than * window height */ if (lines_removed > 0) { for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window) { if ((ptr_win->buffer == buffer) && (buffer->own_lines->lines_count < ptr_win->win_chat_height)) { gui_buffer_ask_chat_refresh (buffer, 2); break; } } } hook_signal_send ("buffer_line_added", WEECHAT_HOOK_SIGNAL_POINTER, new_line); return new_line; }
void gui_chat_printf_date_tags (struct t_gui_buffer *buffer, time_t date, const char *tags, const char *message, ...) { va_list argptr; time_t date_printed; int display_time, length, at_least_one_message_printed; char *pos, *pos_prefix, *pos_tab, *pos_end; char *modifier_data, *new_msg, *ptr_msg; struct t_gui_line *ptr_line; if (!gui_buffer_valid (buffer)) return; if (!message) return; if (gui_init_ok) { if (!buffer) buffer = gui_buffer_search_main (); if (!buffer) return; if (buffer->type != GUI_BUFFER_TYPE_FORMATTED) buffer = gui_buffers; if (buffer->type != GUI_BUFFER_TYPE_FORMATTED) return; } if (!gui_chat_buffer) gui_chat_buffer = malloc (GUI_CHAT_BUFFER_PRINTF_SIZE); if (!gui_chat_buffer) return; va_start (argptr, message); vsnprintf (gui_chat_buffer, GUI_CHAT_BUFFER_PRINTF_SIZE, message, argptr); va_end (argptr); utf8_normalize (gui_chat_buffer, '?'); date_printed = time (NULL); if (date <= 0) date = date_printed; at_least_one_message_printed = 0; pos = gui_chat_buffer; while (pos) { /* display until next end of line */ pos_end = strchr (pos, '\n'); if (pos_end) pos_end[0] = '\0'; /* call modifier for message printed ("weechat_print") */ new_msg = NULL; if (buffer) { length = strlen (plugin_get_name (buffer->plugin)) + 1 + strlen (buffer->name) + 1 + ((tags) ? strlen (tags) : 0) + 1; modifier_data = malloc (length); if (modifier_data) { snprintf (modifier_data, length, "%s;%s;%s", plugin_get_name (buffer->plugin), buffer->name, (tags) ? tags : ""); new_msg = hook_modifier_exec (NULL, "weechat_print", modifier_data, pos); /* no changes in new message */ if (new_msg && (strcmp (message, new_msg) == 0)) { free (new_msg); new_msg = NULL; } free (modifier_data); } } pos_prefix = NULL; display_time = 1; ptr_msg = (new_msg) ? new_msg : pos; /* space followed by tab => prefix ignored */ if ((ptr_msg[0] == ' ') && (ptr_msg[1] == '\t')) { ptr_msg += 2; } else { /* if two first chars are tab, then do not display time */ if ((ptr_msg[0] == '\t') && (ptr_msg[1] == '\t')) { display_time = 0; ptr_msg += 2; } else { /* if tab found, use prefix (before tab) */ pos_tab = strchr (ptr_msg, '\t'); if (pos_tab) { pos_tab[0] = '\0'; pos_prefix = ptr_msg; ptr_msg = pos_tab + 1; } } } if (gui_init_ok) { ptr_line = gui_line_add (buffer, (display_time) ? date : 0, (display_time) ? date_printed : 0, tags, pos_prefix, ptr_msg); if (ptr_line) { if (buffer->print_hooks_enabled) hook_print_exec (buffer, ptr_line); if (ptr_line->data->displayed) at_least_one_message_printed = 1; } } else { if (pos_prefix) string_iconv_fprintf (stdout, "%s ", pos_prefix); string_iconv_fprintf (stdout, "%s\n", ptr_msg); } if (new_msg) free (new_msg); pos = (pos_end && pos_end[1]) ? pos_end + 1 : NULL; } if (gui_init_ok && at_least_one_message_printed) gui_buffer_ask_chat_refresh (buffer, 1); }