void gui_input_history_next () { if (gui_current_window->buffer->input) { if (gui_current_window->buffer->text_search == GUI_TEXT_SEARCH_DISABLED) { 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); gui_current_window->buffer->input_buffer_length = utf8_strlen (gui_current_window->buffer->ptr_history->text); } else { gui_current_window->buffer->input_buffer[0] = '\0'; gui_current_window->buffer->input_buffer_size = 0; gui_current_window->buffer->input_buffer_length = 0; } gui_input_optimize_size (gui_current_window->buffer); gui_current_window->buffer->input_buffer_pos = gui_current_window->buffer->input_buffer_length; gui_current_window->buffer->input_buffer_1st_display = 0; if (gui_current_window->buffer->ptr_history) { strcpy (gui_current_window->buffer->input_buffer, gui_current_window->buffer->ptr_history->text); } } else { /* add line to history then clear input */ if (gui_current_window->buffer->input_buffer_size > 0) { gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; gui_history_buffer_add (gui_current_window->buffer, gui_current_window->buffer->input_buffer); gui_history_global_add (gui_current_window->buffer->input_buffer); gui_current_window->buffer->input_buffer[0] = '\0'; gui_current_window->buffer->input_buffer_size = 0; gui_current_window->buffer->input_buffer_length = 0; gui_current_window->buffer->input_buffer_pos = 0; gui_current_window->buffer->input_buffer_1st_display = 0; gui_input_optimize_size (gui_current_window->buffer); } } gui_input_text_changed_modifier_and_signal (gui_current_window->buffer); } else { /* search forward in buffer history */ gui_current_window->buffer->text_search = GUI_TEXT_SEARCH_FORWARD; (void) gui_window_search_text (gui_current_window); } } }
void gui_input_return () { char *command; if (gui_current_window->buffer->input) { if (gui_current_window->buffer->text_search != GUI_TEXT_SEARCH_DISABLED) { gui_window_search_stop (gui_current_window); gui_input_search_signal (); } else if (gui_current_window->buffer->input_buffer_size > 0) { gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; command = strdup (gui_current_window->buffer->input_buffer); if (!command) return; gui_history_buffer_add (gui_current_window->buffer, gui_current_window->buffer->input_buffer); gui_history_global_add (gui_current_window->buffer->input_buffer); gui_current_window->buffer->input_buffer[0] = '\0'; gui_current_window->buffer->input_buffer_size = 0; gui_current_window->buffer->input_buffer_length = 0; gui_current_window->buffer->input_buffer_pos = 0; gui_current_window->buffer->input_buffer_1st_display = 0; gui_completion_stop (gui_current_window->buffer->completion, 1); gui_current_window->buffer->ptr_history = NULL; gui_input_optimize_size (gui_current_window->buffer); gui_input_text_changed_modifier_and_signal (gui_current_window->buffer); input_data (gui_current_window->buffer, command); free (command); } } }
int upgrade_weechat_read_cb (const void *pointer, void *data, struct t_upgrade_file *upgrade_file, int object_id, struct t_infolist *infolist) { /* make C compiler happy */ (void) pointer; (void) data; (void) upgrade_file; infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) { switch (object_id) { case UPGRADE_WEECHAT_TYPE_HISTORY: if (upgrade_current_buffer) { gui_history_buffer_add (upgrade_current_buffer, infolist_string (infolist, "text")); } else { gui_history_global_add (infolist_string (infolist, "text")); } break; case UPGRADE_WEECHAT_TYPE_BUFFER: upgrade_weechat_read_buffer (infolist); break; case UPGRADE_WEECHAT_TYPE_BUFFER_LINE: upgrade_weechat_read_buffer_line (infolist); break; case UPGRADE_WEECHAT_TYPE_NICKLIST: upgrade_weechat_read_nicklist (infolist); break; case UPGRADE_WEECHAT_TYPE_MISC: weechat_first_start_time = infolist_time (infolist, "start_time"); weechat_upgrade_count = infolist_integer (infolist, "upgrade_count"); upgrade_set_current_window = infolist_integer (infolist, "current_window_number"); break; case UPGRADE_WEECHAT_TYPE_HOTLIST: upgrade_weechat_read_hotlist (infolist); break; case UPGRADE_WEECHAT_TYPE_LAYOUT_WINDOW: gui_layout_window_add (&upgrade_layout->layout_windows, infolist_integer (infolist, "internal_id"), gui_layout_window_search_by_id (upgrade_layout->layout_windows, infolist_integer (infolist, "parent_id")), infolist_integer (infolist, "split_pct"), infolist_integer (infolist, "split_horiz"), infolist_string (infolist, "plugin_name"), infolist_string (infolist, "buffer_name")); break; } } return WEECHAT_RC_OK; }
void gui_history_add (struct t_gui_buffer *buffer, const char *string) { char *string2, str_buffer[128]; snprintf (str_buffer, sizeof (str_buffer), "0x%lx", (long unsigned int)(buffer)); string2 = hook_modifier_exec (NULL, "history_add", str_buffer, string); /* * if message was NOT dropped by modifier, then we add it to buffer and * global history */ if (!string2 || string2[0]) { gui_history_buffer_add (buffer, (string2) ? string2 : string); gui_history_global_add ((string2) ? string2 : string); } if (string2) free (string2); }
void gui_input_history_previous () { if (gui_current_window->buffer->input) { if (gui_current_window->buffer->text_search == GUI_TEXT_SEARCH_DISABLED) { if (gui_current_window->buffer->ptr_history) { if (!gui_current_window->buffer->ptr_history->next_history) return; 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) { /* bash/readline like use of history */ if (gui_current_window->buffer->ptr_history->prev_history == NULL) { if (gui_current_window->buffer->input_buffer_size > 0) { gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; gui_history_buffer_add (gui_current_window->buffer, gui_current_window->buffer->input_buffer); gui_history_global_add (gui_current_window->buffer->input_buffer); } } else { if (gui_current_window->buffer->input_buffer_size > 0) { gui_current_window->buffer->input_buffer[gui_current_window->buffer->input_buffer_size] = '\0'; if (gui_current_window->buffer->ptr_history->prev_history->text) free(gui_current_window->buffer->ptr_history->prev_history->text); gui_current_window->buffer->ptr_history->prev_history->text = strdup (gui_current_window->buffer->input_buffer); } } gui_current_window->buffer->input_buffer_size = strlen (gui_current_window->buffer->ptr_history->text); gui_current_window->buffer->input_buffer_length = utf8_strlen (gui_current_window->buffer->ptr_history->text); gui_input_optimize_size (gui_current_window->buffer); gui_current_window->buffer->input_buffer_pos = gui_current_window->buffer->input_buffer_length; gui_current_window->buffer->input_buffer_1st_display = 0; strcpy (gui_current_window->buffer->input_buffer, gui_current_window->buffer->ptr_history->text); } gui_input_text_changed_modifier_and_signal (gui_current_window->buffer); } else { /* search backward in buffer history */ gui_current_window->buffer->text_search = GUI_TEXT_SEARCH_BACKWARD; (void) gui_window_search_text (gui_current_window); } } }
int upgrade_weechat_read_cb (void *data, struct t_upgrade_file *upgrade_file, int object_id, struct t_infolist *infolist) { const char *key, *var_name, *type, *name, *group_name, *plugin_name; const char *buffer_name; char option_name[64], *option_key, *option_var; struct t_gui_nick_group *ptr_group; struct t_gui_buffer *ptr_buffer; struct t_gui_line *new_line; struct t_gui_hotlist *new_hotlist; struct timeval creation_time; void *buf; int i, size, index, length; /* make C compiler happy */ (void) data; (void) upgrade_file; infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) { switch (object_id) { case UPGRADE_WEECHAT_TYPE_HISTORY: if (upgrade_current_buffer) { gui_history_buffer_add (upgrade_current_buffer, infolist_string (infolist, "text")); } else { gui_history_global_add (infolist_string (infolist, "text")); } break; case UPGRADE_WEECHAT_TYPE_BUFFER: plugin_name = infolist_string (infolist, "plugin_name"); name = infolist_string (infolist, "name"); gui_layout_buffer_add (&upgrade_layout_buffers, &last_upgrade_layout_buffer, plugin_name, name, infolist_integer (infolist, "number")); if (gui_buffer_is_main (plugin_name, name)) { /* use WeeChat main buffer */ upgrade_current_buffer = gui_buffers; } else { /* * create buffer if it was created by a plugin (ie not * WeeChat main buffer) */ upgrade_current_buffer = gui_buffer_new ( NULL, infolist_string (infolist, "name"), NULL, NULL, NULL, NULL); if (upgrade_current_buffer) { if (infolist_integer (infolist, "current_buffer")) upgrade_set_current_buffer = upgrade_current_buffer; upgrade_current_buffer->plugin_name_for_upgrade = strdup (infolist_string (infolist, "plugin_name")); gui_buffer_build_full_name (upgrade_current_buffer); upgrade_current_buffer->short_name = (infolist_string (infolist, "short_name")) ? strdup (infolist_string (infolist, "short_name")) : NULL; upgrade_current_buffer->type = infolist_integer (infolist, "type"); upgrade_current_buffer->notify = infolist_integer (infolist, "notify"); upgrade_current_buffer->nicklist_case_sensitive = infolist_integer (infolist, "nicklist_case_sensitive"); upgrade_current_buffer->nicklist_display_groups = infolist_integer (infolist, "nicklist_display_groups"); upgrade_current_buffer->title = (infolist_string (infolist, "title")) ? strdup (infolist_string (infolist, "title")) : NULL; upgrade_current_buffer->lines->first_line_not_read = infolist_integer (infolist, "first_line_not_read"); upgrade_current_buffer->time_for_each_line = infolist_integer (infolist, "time_for_each_line"); upgrade_current_buffer->input = infolist_integer (infolist, "input"); upgrade_current_buffer->input_get_unknown_commands = infolist_integer (infolist, "input_get_unknown_commands"); if (infolist_integer (infolist, "input_buffer_alloc") > 0) { upgrade_current_buffer->input_buffer = malloc (infolist_integer (infolist, "input_buffer_alloc")); if (upgrade_current_buffer->input_buffer) { upgrade_current_buffer->input_buffer_size = infolist_integer (infolist, "input_buffer_size"); upgrade_current_buffer->input_buffer_length = infolist_integer (infolist, "input_buffer_length"); upgrade_current_buffer->input_buffer_pos = infolist_integer (infolist, "input_buffer_pos"); upgrade_current_buffer->input_buffer_1st_display = infolist_integer (infolist, "input_buffer_1st_display"); if (infolist_string (infolist, "input_buffer")) strcpy (upgrade_current_buffer->input_buffer, infolist_string (infolist, "input_buffer")); else upgrade_current_buffer->input_buffer[0] = '\0'; } } upgrade_current_buffer->text_search = infolist_integer (infolist, "text_search"); upgrade_current_buffer->text_search_exact = infolist_integer (infolist, "text_search_exact"); upgrade_current_buffer->text_search_found = infolist_integer (infolist, "text_search_found"); if (infolist_string (infolist, "text_search_input")) upgrade_current_buffer->text_search_input = strdup (infolist_string (infolist, "text_search_input")); gui_buffer_set_highlight_words (upgrade_current_buffer, infolist_string (infolist, "highlight_words")); gui_buffer_set_highlight_regex (upgrade_current_buffer, infolist_string (infolist, "highlight_regex")); gui_buffer_set_highlight_tags (upgrade_current_buffer, infolist_string (infolist, "highlight_tags")); gui_buffer_set_hotlist_max_level_nicks (upgrade_current_buffer, infolist_string (infolist, "hotlist_max_level_nicks")); index = 0; while (1) { snprintf (option_name, sizeof (option_name), "key_%05d", index); key = infolist_string (infolist, option_name); if (!key) break; length = 16 + strlen (key) + 1; option_key = malloc (length); if (option_key) { snprintf (option_key, length, "key_bind_%s", key); snprintf (option_name, sizeof (option_name), "key_command_%05d", index); gui_buffer_set (upgrade_current_buffer, option_key, infolist_string (infolist, option_name)); free (option_key); } index++; } index = 0; while (1) { snprintf (option_name, sizeof (option_name), "localvar_name_%05d", index); var_name = infolist_string (infolist, option_name); if (!var_name) break; length = 32 + strlen (var_name) + 1; option_var = malloc (length); if (option_var) { snprintf (option_var, length, "localvar_set_%s", var_name); snprintf (option_name, sizeof (option_name), "localvar_value_%05d", index); gui_buffer_set (upgrade_current_buffer, option_var, infolist_string (infolist, option_name)); free (option_var); } index++; } } } break; case UPGRADE_WEECHAT_TYPE_BUFFER_LINE: /* add line to current buffer */ if (upgrade_current_buffer) { switch (upgrade_current_buffer->type) { case GUI_BUFFER_TYPE_FORMATTED: new_line = gui_line_add ( upgrade_current_buffer, infolist_time (infolist, "date"), infolist_time (infolist, "date_printed"), infolist_string (infolist, "tags"), infolist_string (infolist, "prefix"), infolist_string (infolist, "message")); if (new_line) { new_line->data->highlight = infolist_integer (infolist, "highlight"); if (infolist_integer (infolist, "last_read_line")) upgrade_current_buffer->lines->last_read_line = new_line; } break; case GUI_BUFFER_TYPE_FREE: gui_line_add_y ( upgrade_current_buffer, infolist_integer (infolist, "y"), infolist_string (infolist, "message")); break; case GUI_BUFFER_NUM_TYPES: break; } } break; case UPGRADE_WEECHAT_TYPE_NICKLIST: if (upgrade_current_buffer) { upgrade_current_buffer->nicklist = 1; ptr_group = NULL; type = infolist_string (infolist, "type"); if (type) { if (strcmp (type, "group") == 0) { name = infolist_string (infolist, "name"); if (name && (strcmp (name, "root") != 0)) { group_name = infolist_string (infolist, "parent_name"); if (group_name) ptr_group = gui_nicklist_search_group (upgrade_current_buffer, NULL, group_name); gui_nicklist_add_group ( upgrade_current_buffer, ptr_group, name, infolist_string (infolist, "color"), infolist_integer (infolist, "visible")); } } else if (strcmp (type, "nick") == 0) { group_name = infolist_string (infolist, "group_name"); if (group_name) ptr_group = gui_nicklist_search_group (upgrade_current_buffer, NULL, group_name); gui_nicklist_add_nick ( upgrade_current_buffer, ptr_group, infolist_string (infolist, "name"), infolist_string (infolist, "color"), infolist_string (infolist, "prefix"), infolist_string (infolist, "prefix_color"), infolist_integer (infolist, "visible")); } } } break; case UPGRADE_WEECHAT_TYPE_MISC: weechat_first_start_time = infolist_time (infolist, "start_time"); weechat_upgrade_count = infolist_integer (infolist, "upgrade_count"); upgrade_set_current_window = infolist_integer (infolist, "current_window_number"); break; case UPGRADE_WEECHAT_TYPE_HOTLIST: if (!hotlist_reset) { gui_hotlist_clear (); hotlist_reset = 1; } plugin_name = infolist_string (infolist, "plugin_name"); buffer_name = infolist_string (infolist, "buffer_name"); if (plugin_name && buffer_name) { ptr_buffer = gui_buffer_search_by_name (plugin_name, buffer_name); if (ptr_buffer) { buf = infolist_buffer (infolist, "creation_time", &size); if (buf) { memcpy (&creation_time, buf, size); new_hotlist = gui_hotlist_add (ptr_buffer, infolist_integer (infolist, "priority"), &creation_time); if (new_hotlist) { for (i = 0; i < GUI_HOTLIST_NUM_PRIORITIES; i++) { snprintf (option_name, sizeof (option_name), "count_%02d", i); new_hotlist->count[i] = infolist_integer (infolist, option_name); } } } } } break; case UPGRADE_WEECHAT_TYPE_LAYOUT_WINDOW: gui_layout_window_add (&upgrade_layout_windows, infolist_integer (infolist, "internal_id"), gui_layout_window_search_by_id (upgrade_layout_windows, infolist_integer (infolist, "parent_id")), infolist_integer (infolist, "split_pct"), infolist_integer (infolist, "split_horiz"), infolist_string (infolist, "plugin_name"), infolist_string (infolist, "buffer_name")); break; } } return WEECHAT_RC_OK; }