summaryrefslogtreecommitdiff
path: root/src/common/weeconfig.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/weeconfig.c')
-rw-r--r--src/common/weeconfig.c2597
1 files changed, 0 insertions, 2597 deletions
diff --git a/src/common/weeconfig.c b/src/common/weeconfig.c
deleted file mode 100644
index b4f1c8f46..000000000
--- a/src/common/weeconfig.c
+++ /dev/null
@@ -1,2597 +0,0 @@
-/*
- * Copyright (c) 2003-2007 by FlashCode <flashcode@flashtux.org>
- * See README for License detail, AUTHORS for developers list.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* weeconfig.c: WeeChat configuration */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <time.h>
-#include <pwd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "weechat.h"
-#include "weeconfig.h"
-#include "alias.h"
-#include "command.h"
-#include "fifo.h"
-#include "hotlist.h"
-#include "log.h"
-#include "utf8.h"
-#include "util.h"
-#include "../protocols/irc/irc.h"
-#include "../gui/gui.h"
-
-
-/* config sections */
-
-t_config_section config_sections[CONFIG_NUMBER_SECTIONS] =
-{ { CONFIG_SECTION_LOOK, "look" },
- { CONFIG_SECTION_COLORS, "colors" },
- { CONFIG_SECTION_HISTORY, "history" },
- { CONFIG_SECTION_LOG, "log" },
- { CONFIG_SECTION_IRC, "irc" },
- { CONFIG_SECTION_DCC, "dcc" },
- { CONFIG_SECTION_PROXY, "proxy" },
- { CONFIG_SECTION_PLUGINS, "plugins" },
- { CONFIG_SECTION_KEYS, "keys" },
- { CONFIG_SECTION_ALIAS, "alias" },
- { CONFIG_SECTION_IGNORE, "ignore" },
- { CONFIG_SECTION_SERVER, "server" }
-};
-
-/* config, look & feel section */
-
-int cfg_look_save_on_exit;
-int cfg_look_set_title;
-int cfg_look_startup_logo;
-int cfg_look_startup_version;
-char *cfg_look_weechat_slogan;
-int cfg_look_one_server_buffer;
-int cfg_look_scroll_amount;
-int cfg_look_open_near_server;
-char *cfg_look_buffer_timestamp;
-int cfg_look_color_nicks_number;
-int cfg_look_color_actions;
-int cfg_look_nicklist;
-int cfg_look_nicklist_position;
-char *cfg_look_nicklist_position_values[] =
-{ "left", "right", "top", "bottom", NULL };
-int cfg_look_nicklist_min_size;
-int cfg_look_nicklist_max_size;
-int cfg_look_nicklist_separator;
-int cfg_look_nickmode;
-int cfg_look_nickmode_empty;
-char *cfg_look_no_nickname;
-char *cfg_look_nick_prefix;
-char *cfg_look_nick_suffix;
-int cfg_look_align_nick;
-char *cfg_look_align_nick_values[] =
-{ "none", "left", "right", NULL };
-int cfg_look_align_other;
-int cfg_look_align_size;
-int cfg_look_align_size_max;
-int cfg_look_align_text_offset;
-char *cfg_look_nick_completor;
-char *cfg_look_nick_completion_ignore;
-int cfg_look_nick_completion_smart;
-int cfg_look_nick_complete_first;
-int cfg_look_infobar;
-char *cfg_look_infobar_timestamp;
-int cfg_look_infobar_seconds;
-int cfg_look_infobar_delay_highlight;
-int cfg_look_hotlist_names_count;
-int cfg_look_hotlist_names_level;
-int cfg_look_hotlist_names_length;
-int cfg_look_hotlist_sort;
-char *cfg_look_hotlist_sort_values[] =
-{ "group_time_asc", "group_time_desc",
- "group_number_asc", "group_number_desc",
- "number_asc", "number_desc" };
-int cfg_look_day_change;
-char *cfg_look_day_change_timestamp;
-char *cfg_look_read_marker;
-char *cfg_look_input_format;
-int cfg_look_paste_max_lines;
-
-t_config_option weechat_options_look[] =
-{ { "look_save_on_exit", N_("save config file on exit"),
- N_("save config file on exit"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_save_on_exit, NULL, config_change_save_on_exit },
- { "look_set_title", N_("set title for window (terminal for Curses GUI) with name and version"),
- N_("set title for window (terminal for Curses GUI) with name and version"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_set_title, NULL, config_change_title },
- { "look_startup_logo", N_("display WeeChat logo at startup"),
- N_("display WeeChat logo at startup"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_startup_logo, NULL, config_change_noop },
- { "look_startup_version", N_("display WeeChat version at startup"),
- N_("display WeeChat version at startup"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_startup_version, NULL, config_change_noop },
- { "look_weechat_slogan", N_("WeeChat slogan"),
- N_("WeeChat slogan (if empty, slogan is not used)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "the geekest IRC client!", NULL, NULL, &cfg_look_weechat_slogan, config_change_noop },
- { "look_one_server_buffer", N_("use same buffer for all servers"),
- N_("use same buffer for all servers"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_look_one_server_buffer, NULL, config_change_one_server_buffer },
- { "look_open_near_server", N_("open new channels/privates near server"),
- N_("open new channels/privates near server"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_look_open_near_server, NULL, config_change_noop },
- { "look_scroll_amount", N_("how many lines to scroll by with scroll_up and scroll_down"),
- N_("how many lines to scroll by with scroll_up and scroll_down"),
- OPTION_TYPE_INT, 1, INT_MAX, 3,
- NULL, NULL, &cfg_look_scroll_amount, NULL, config_change_buffer_content },
- { "look_buffer_timestamp", N_("timestamp for buffers"),
- N_("timestamp for buffers"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "[%H:%M:%S]", NULL, NULL, &cfg_look_buffer_timestamp, config_change_buffer_content },
- { "look_color_nicks_number", N_("number of colors to use for nicks colors"),
- N_("number of colors to use for nicks colors"),
- OPTION_TYPE_INT, 1, 10, 10,
- NULL, NULL, &cfg_look_color_nicks_number, NULL, config_change_nicks_colors },
- { "look_color_actions", N_("display actions with different colors"),
- N_("display actions with different colors"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_color_actions, NULL, config_change_noop },
- { "look_nicklist", N_("display nicklist window"),
- N_("display nicklist window (for channel windows)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_nicklist, NULL, config_change_buffers },
- { "look_nicklist_position", N_("nicklist position"),
- N_("nicklist position (top, left, right (default), bottom)"),
- OPTION_TYPE_INT_WITH_STRING, 0, 0, 0,
- "right", cfg_look_nicklist_position_values, &cfg_look_nicklist_position, NULL, config_change_buffers },
- { "look_nicklist_min_size", N_("min size for nicklist"),
- N_("min size for nicklist (width or height, depending on look_nicklist_position "
- "(0 = no min size))"),
- OPTION_TYPE_INT, 0, 100, 0,
- NULL, NULL, &cfg_look_nicklist_min_size, NULL, config_change_buffers },
- { "look_nicklist_max_size", N_("max size for nicklist"),
- N_("max size for nicklist (width or height, depending on look_nicklist_position "
- "(0 = no max size; if min = max and > 0, then size is fixed))"),
- OPTION_TYPE_INT, 0, 100, 0,
- NULL, NULL, &cfg_look_nicklist_max_size, NULL, config_change_buffers },
- { "look_nicklist_separator", N_("separator between chat and nicklist"),
- N_("separator between chat and nicklist"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_nicklist_separator, NULL, config_change_buffers },
- { "look_no_nickname", N_("text to display instead of nick when not connected"),
- N_("text to display instead of nick when not connected"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "-cmd-", NULL, NULL, &cfg_look_no_nickname, config_change_buffer_content },
- { "look_nickmode", N_("display nick mode ((half)op/voice) before each nick"),
- N_("display nick mode ((half)op/voice) before each nick"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_nickmode, NULL, config_change_buffers },
- { "look_nickmode_empty", N_("display space if nick mode is not (half)op/voice"),
- N_("display space if nick mode is not (half)op/voice"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_look_nickmode_empty, NULL, config_change_buffers },
- { "look_nick_prefix", N_("text to display before nick in chat window"),
- N_("text to display before nick in chat window"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &cfg_look_nick_prefix, config_change_noop },
- { "look_nick_suffix", N_("text to display after nick in chat window"),
- N_("text to display after nick in chat window"),
- OPTION_TYPE_STRING, 0, 0, 0,
- " |", NULL, NULL, &cfg_look_nick_suffix, config_change_noop },
- { "look_align_nick", N_("nick alignment (fixed size for nicks in chat window)"),
- N_("nick alignment (fixed size for nicks in chat window (none, left, right))"),
- OPTION_TYPE_INT_WITH_STRING, 0, 0, 0,
- "right", cfg_look_align_nick_values, &cfg_look_align_nick, NULL, config_change_noop },
- { "look_align_other", N_("alignment for other messages (not beginning with a nick)"),
- N_("alignment for other messages (not beginning with a nick)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_align_other, NULL, config_change_noop },
- { "look_align_size", N_("size for aligning nick and other messages"),
- N_("size for aligning nick and other messages"),
- OPTION_TYPE_INT, 8, 64, 14,
- NULL, NULL, &cfg_look_align_size, NULL, config_change_noop },
- { "look_align_size_max", N_("max size for aligning nick and other messages"),
- N_("max size for aligning nick and other messages (should be >= to "
- "look_align_size)"),
- OPTION_TYPE_INT, 8, 64, 20,
- NULL, NULL, &cfg_look_align_size_max, NULL, config_change_noop },
- { "look_align_text_offset", N_("offset for aligning lines of messages "
- "(except first lines)"),
- N_("offset for aligning lines of messages (except first lines), default is "
- "-1 (align after nick), a null or positive value is offset after "
- "beginning of line"),
- OPTION_TYPE_INT, -1, 64, -1,
- NULL, NULL, &cfg_look_align_text_offset, NULL, config_change_buffers },
- { "look_nick_completor", N_("the string inserted after nick completion"),
- N_("the string inserted after nick completion"),
- OPTION_TYPE_STRING, 0, 0, 0,
- ":", NULL, NULL, &cfg_look_nick_completor, config_change_noop },
- { "look_nick_completion_ignore", N_("chars ignored for nick completion"),
- N_("chars ignored for nick completion"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "[]-^", NULL, NULL, &cfg_look_nick_completion_ignore, config_change_noop },
- { "look_nick_completion_smart", N_("smart completion for nicks"),
- N_("smart completion for nicks (completes with last speakers first)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_nick_completion_smart, NULL, config_change_noop },
- { "look_nick_complete_first", N_("complete only with first nick found"),
- N_("complete only with first nick found"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_look_nick_complete_first, NULL, config_change_noop },
- { "look_infobar", N_("enable info bar"),
- N_("enable info bar"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_infobar, NULL, config_change_buffers },
- { "look_infobar_timestamp", N_("timestamp for time in infobar"),
- N_("timestamp for time in infobar"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "%B, %A %d %Y", NULL, NULL, &cfg_look_infobar_timestamp, config_change_buffer_content },
- { "look_infobar_seconds", N_("display seconds in infobar time"),
- N_("display seconds in infobar time"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_infobar_seconds, NULL, config_change_buffer_content },
- { "look_infobar_delay_highlight", N_("delay (in seconds) for highlight messages in infobar"),
- N_("delay (in seconds) for highlight messages in infobar "
- "(0 = disable highlight notifications in infobar)"),
- OPTION_TYPE_INT, 0, INT_MAX, 7,
- NULL, NULL, &cfg_look_infobar_delay_highlight, NULL, config_change_noop },
- { "look_hotlist_names_count", N_("max number of names in hotlist"),
- N_("max number of names in hotlist (0 = no name displayed, only buffer numbers)"),
- OPTION_TYPE_INT, 0, 32, 3,
- NULL, NULL, &cfg_look_hotlist_names_count, NULL, config_change_buffer_content },
- { "look_hotlist_names_level", N_("level for displaying names in hotlist"),
- N_("level for displaying names in hotlist (combination of: 1=join/part, 2=message, "
- "4=private, 8=highlight, for example: 12=private+highlight)"),
- OPTION_TYPE_INT, 1, 15, 12,
- NULL, NULL, &cfg_look_hotlist_names_level, NULL, config_change_buffer_content },
- { "look_hotlist_names_length", N_("max length of names in hotlist"),
- N_("max length of names in hotlist (0 = no limit)"),
- OPTION_TYPE_INT, 0, 32, 0,
- NULL, NULL, &cfg_look_hotlist_names_length, NULL, config_change_buffer_content },
- { "look_hotlist_sort", N_("hotlist sort type"),
- N_("hotlist sort type (group_time_asc (default), group_time_desc, "
- "group_number_asc, group_number_desc, number_asc, number_desc)"),
- OPTION_TYPE_INT_WITH_STRING, 0, 0, 0,
- "group_time_asc", cfg_look_hotlist_sort_values, &cfg_look_hotlist_sort, NULL, config_change_hotlist },
- { "look_day_change", N_("display special message when day changes"),
- N_("display special message when day changes"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_look_day_change, NULL, config_change_noop },
- { "look_day_change_timestamp", N_("timestamp for date displayed when day changed"),
- N_("timestamp for date displayed when day changed"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "%a, %d %b %Y", NULL, NULL, &cfg_look_day_change_timestamp, config_change_noop },
- { "look_read_marker", N_("use a marker on servers/channels to show first unread line"),
- N_("use a marker on servers/channels to show first unread line"),
- OPTION_TYPE_STRING, 0, 1, 0,
- " ", NULL, NULL, &cfg_look_read_marker, config_change_read_marker },
- { "look_input_format", N_("format for input prompt"),
- N_("format for input prompt ('%c' is replaced by channel or server, "
- "'%n' by nick and '%m' by nick modes)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "[%n(%m)] ", NULL, NULL, &cfg_look_input_format, config_change_buffer_content },
- { "look_paste_max_lines", N_("max number of lines for paste without asking user"),
- N_("max number of lines for paste without asking user (0 = disable this feature)"),
- OPTION_TYPE_INT, 0, INT_MAX, 3,
- NULL, NULL, &cfg_look_paste_max_lines, NULL, &config_change_noop },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, colors section */
-
-int cfg_col_real_white;
-int cfg_col_separator;
-int cfg_col_title;
-int cfg_col_title_more;
-int cfg_col_title_bg;
-int cfg_col_chat;
-int cfg_col_chat_time;
-int cfg_col_chat_time_sep;
-int cfg_col_chat_prefix1;
-int cfg_col_chat_prefix2;
-int cfg_col_chat_server;
-int cfg_col_chat_join;
-int cfg_col_chat_part;
-int cfg_col_chat_nick;
-int cfg_col_chat_host;
-int cfg_col_chat_channel;
-int cfg_col_chat_dark;
-int cfg_col_chat_highlight;
-int cfg_col_chat_bg;
-int cfg_col_chat_read_marker;
-int cfg_col_chat_read_marker_bg;
-int cfg_col_status;
-int cfg_col_status_delimiters;
-int cfg_col_status_channel;
-int cfg_col_status_data_msg;
-int cfg_col_status_data_private;
-int cfg_col_status_data_highlight;
-int cfg_col_status_data_other;
-int cfg_col_status_more;
-int cfg_col_status_bg;
-int cfg_col_infobar;
-int cfg_col_infobar_delimiters;
-int cfg_col_infobar_highlight;
-int cfg_col_infobar_bg;
-int cfg_col_input;
-int cfg_col_input_server;
-int cfg_col_input_channel;
-int cfg_col_input_nick;
-int cfg_col_input_delimiters;
-int cfg_col_input_text_not_found;
-int cfg_col_input_actions;
-int cfg_col_input_bg;
-int cfg_col_nick;
-int cfg_col_nick_away;
-int cfg_col_nick_chanowner;
-int cfg_col_nick_chanadmin;
-int cfg_col_nick_op;
-int cfg_col_nick_halfop;
-int cfg_col_nick_voice;
-int cfg_col_nick_user;
-int cfg_col_nick_more;
-int cfg_col_nick_sep;
-int cfg_col_nick_self;
-int cfg_col_nick_colors[GUI_COLOR_WIN_NICK_NUMBER];
-int cfg_col_nick_private;
-int cfg_col_nick_bg;
-int cfg_col_nicklist_bg;
-int cfg_col_dcc_selected;
-int cfg_col_dcc_waiting;
-int cfg_col_dcc_connecting;
-int cfg_col_dcc_active;
-int cfg_col_dcc_done;
-int cfg_col_dcc_failed;
-int cfg_col_dcc_aborted;
-
-t_config_option weechat_options_colors[] =
-{ /* general color settings */
- { "col_real_white", N_("if set, uses real white color"),
- N_("if set, uses real white color, disabled by default for terms with white "
- "background (if you never use white background, you should turn on "
- "this option to see real white instead of default term foreground color)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_col_real_white, NULL, config_change_color },
- { "col_separator", N_("color for window separators (when splited)"),
- N_("color for window separators (when splited)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "blue", NULL, &cfg_col_separator, NULL, &config_change_color },
- /* title window */
- { "col_title", N_("color for title bar"),
- N_("color for title bar"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_title, NULL, &config_change_color },
- { "col_title_more", N_("color for '+' when scrolling topic"),
- N_("color for '+' when scrolling topic"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightmagenta", NULL, &cfg_col_title_more, NULL, &config_change_color },
- { "col_title_bg", N_("background for title bar"),
- N_("background for title bar"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "blue", NULL, &cfg_col_title_bg, NULL, &config_change_color },
-
- /* chat window */
- { "col_chat", N_("color for chat text"),
- N_("color for chat text"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_chat, NULL, &config_change_color },
- { "col_chat_time", N_("color for time"),
- N_("color for time in chat window"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_chat_time, NULL, &config_change_color },
- { "col_chat_time_sep", N_("color for time separator"),
- N_("color for time separator (chat window)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "brown", NULL, &cfg_col_chat_time_sep, NULL, &config_change_color },
- { "col_chat_prefix1", N_("color for 1st and 3rd char of prefix"),
- N_("color for 1st and 3rd char of prefix"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightcyan", NULL, &cfg_col_chat_prefix1, NULL, &config_change_color },
- { "col_chat_prefix2", N_("color for middle char of prefix"),
- N_("color for middle char of prefix"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_chat_prefix2, NULL, &config_change_color },
- { "col_chat_server", N_("color for server name"),
- N_("color for server name"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "brown", NULL, &cfg_col_chat_server, NULL, &config_change_color },
- { "col_chat_join", N_("color for join arrow (prefix)"),
- N_("color for join arrow (prefix)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightgreen", NULL, &cfg_col_chat_join, NULL, &config_change_color },
- { "col_chat_part", N_("color for part/quit arrow (prefix)"),
- N_("color for part/quit arrow (prefix)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightred", NULL, &cfg_col_chat_part, NULL, &config_change_color },
- { "col_chat_nick", N_("color for nicks in actions"),
- N_("color for nicks in actions (chat window)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightcyan", NULL, &cfg_col_chat_nick, NULL, &config_change_color },
- { "col_chat_host", N_("color for hostnames"),
- N_("color for hostnames (chat window)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "cyan", NULL, &cfg_col_chat_host, NULL, &config_change_color },
- { "col_chat_channel", N_("color for channel names in actions"),
- N_("color for channel names in actions (chat window)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_chat_channel, NULL, &config_change_color },
- { "col_chat_dark", N_("color for dark separators"),
- N_("color for dark separators (chat window)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "green", NULL, &cfg_col_chat_dark, NULL, &config_change_color },
- { "col_chat_highlight", N_("color for highlighted nick"),
- N_("color for highlighted nick (chat window)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "yellow", NULL, &cfg_col_chat_highlight, NULL, &config_change_color },
- { "col_chat_bg", N_("background for chat"),
- N_("background for chat window"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_chat_bg, NULL, &config_change_color },
- { "col_chat_read_marker", N_("color for unread data marker"),
- N_("color for unread data marker"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "yellow", NULL, &cfg_col_chat_read_marker, NULL, &config_change_color },
- { "col_chat_read_marker_bg", N_("background for unread data marker"),
- N_("background for unread data marker"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "magenta", NULL, &cfg_col_chat_read_marker_bg, NULL, &config_change_color },
-
- /* status window */
- { "col_status", N_("color for status bar"),
- N_("color for status bar"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_status, NULL, &config_change_color },
- { "col_status_delimiters", N_("color for status bar delimiters"),
- N_("color for status bar delimiters"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "cyan", NULL, &cfg_col_status_delimiters, NULL, &config_change_color },
- { "col_status_channel", N_("color for current channel in status bar"),
- N_("color for current channel in status bar"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_status_channel, NULL, &config_change_color },
- { "col_status_data_msg", N_("color for window with new messages"),
- N_("color for window with new messages (status bar)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "yellow", NULL, &cfg_col_status_data_msg, NULL, &config_change_color },
- { "col_status_private", N_("color for window with private message"),
- N_("color for window with private message (status bar)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightmagenta", NULL, &cfg_col_status_data_private, NULL, &config_change_color },
- { "col_status_highlight", N_("color for window with highlight"),
- N_("color for window with highlight (status bar)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightred", NULL, &cfg_col_status_data_highlight, NULL, &config_change_color },
- { "col_status_data_other", N_("color for window with new data (not messages)"),
- N_("color for window with new data (not messages) (status bar)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_status_data_other, NULL, &config_change_color },
- { "col_status_more", N_("color for \"-MORE-\" text"),
- N_("color for window with new data (status bar)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_status_more, NULL, &config_change_color },
- { "col_status_bg", N_("background for status window"),
- N_("background for status window"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "blue", NULL, &cfg_col_status_bg, NULL, &config_change_color },
-
- /* infobar window */
- { "col_infobar", N_("color for info bar text"),
- N_("color for info bar text"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "black", NULL, &cfg_col_infobar, NULL, &config_change_color },
- { "col_infobar_delimiters", N_("color for infobar delimiters"),
- N_("color for infobar delimiters"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "blue", NULL, &cfg_col_infobar_delimiters, NULL, &config_change_color },
- { "col_infobar_highlight", N_("color for info bar highlight notification"),
- N_("color for info bar highlight notification"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_infobar_highlight, NULL, &config_change_color },
- { "col_infobar_bg", N_("background for info bar window"),
- N_("background for info bar window"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "cyan", NULL, &cfg_col_infobar_bg, NULL, &config_change_color },
-
- /* input window */
- { "col_input", N_("color for input text"),
- N_("color for input text"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_input, NULL, &config_change_color },
- { "col_input_server", N_("color for input text (server name)"),
- N_("color for input text (server name)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "brown", NULL, &cfg_col_input_server, NULL, &config_change_color },
- { "col_input_channel", N_("color for input text (channel name)"),
- N_("color for input text (channel name)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_input_channel, NULL, &config_change_color },
- { "col_input_nick", N_("color for input text (nick name)"),
- N_("color for input text (nick name)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightcyan", NULL, &cfg_col_input_nick, NULL, &config_change_color },
- { "col_input_delimiters", N_("color for input text (delimiters)"),
- N_("color for input text (delimiters)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "cyan", NULL, &cfg_col_input_delimiters, NULL, &config_change_color },
- { "col_input_text_not_found", N_("color for text not found"),
- N_("color for text not found"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "red", NULL, &cfg_col_input_text_not_found, NULL, &config_change_color },
- { "col_input_actions", N_("color for actions in input window"),
- N_("color for actions in input window"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightgreen", NULL, &cfg_col_input_actions, NULL, &config_change_color },
- { "col_input_bg", N_("background for input window"),
- N_("background for input window"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_input_bg, NULL, &config_change_color },
-
- /* nick window */
- { "col_nick", N_("color for nicknames"),
- N_("color for nicknames"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_nick, NULL, &config_change_color },
- { "col_nick_away", N_("color for away nicknames"),
- N_("color for away nicknames"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "cyan", NULL, &cfg_col_nick_away, NULL, &config_change_color },
- { "col_nick_chanowner", N_("color for chan owner symbol"),
- N_("color for chan owner symbol (specific to unrealircd)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightgreen", NULL, &cfg_col_nick_chanowner, NULL, &config_change_color },
- { "col_nick_chanadmin", N_("color for chan admin symbol"),
- N_("color for chan admin symbol (specific to unrealircd)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightgreen", NULL, &cfg_col_nick_chanadmin, NULL, &config_change_color },
- { "col_nick_op", N_("color for operator symbol"),
- N_("color for operator symbol"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightgreen", NULL, &cfg_col_nick_op, NULL, &config_change_color },
- { "col_nick_halfop", N_("color for half-operator symbol"),
- N_("color for half-operator symbol"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightmagenta", NULL, &cfg_col_nick_halfop, NULL, &config_change_color },
- { "col_nick_voice", N_("color for voice symbol"),
- N_("color for voice symbol"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "yellow", NULL, &cfg_col_nick_voice, NULL, &config_change_color },
- { "col_nick_user", N_("color for user symbol"),
- N_("color for user symbol"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "blue", NULL, &cfg_col_nick_user, NULL, &config_change_color },
- { "col_nick_more", N_("color for '+' when scrolling nicks"),
- N_("color for '+' when scrolling nicks"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightmagenta", NULL, &cfg_col_nick_more, NULL, &config_change_color },
- { "col_nick_sep", N_("color for nick separator"),
- N_("color for nick separator"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "blue", NULL, &cfg_col_nick_sep, NULL, &config_change_color },
- { "col_nick_self", N_("color for local nick"),
- N_("color for local nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_nick_self, NULL, &config_change_color },
- { "col_nick_color1", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "cyan", NULL, &cfg_col_nick_colors[0], NULL, &config_change_color },
- { "col_nick_color2", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "magenta", NULL, &cfg_col_nick_colors[1], NULL, &config_change_color },
- { "col_nick_color3", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "green", NULL, &cfg_col_nick_colors[2], NULL, &config_change_color },
- { "col_nick_color4", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "brown", NULL, &cfg_col_nick_colors[3], NULL, &config_change_color },
- { "col_nick_color5", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightblue", NULL, &cfg_col_nick_colors[4], NULL, &config_change_color },
- { "col_nick_color6", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_nick_colors[5], NULL, &config_change_color },
- { "col_nick_color7", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightcyan", NULL, &cfg_col_nick_colors[6], NULL, &config_change_color },
- { "col_nick_color8", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightmagenta", NULL, &cfg_col_nick_colors[7], NULL, &config_change_color },
- { "col_nick_color9", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightgreen", NULL, &cfg_col_nick_colors[8], NULL, &config_change_color },
- { "col_nick_color10", N_("color for nick"),
- N_("color for nick"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "blue", NULL, &cfg_col_nick_colors[9], NULL, &config_change_color },
- { "col_nick_private", N_("color for other nick in private window"),
- N_("color for other nick in private window"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_nick_private, NULL, &config_change_color },
- { "col_nick_bg", N_("background for nicknames"),
- N_("background for nicknames"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "default", NULL, &cfg_col_nick_bg, NULL, &config_change_color },
-
- /* DCC */
- { "col_chat_dcc_selected", N_("color for selected DCC"),
- N_("color for selected DCC (chat window)"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "white", NULL, &cfg_col_dcc_selected, NULL, &config_change_color },
- { "col_dcc_waiting", N_("color for \"waiting\" dcc status"),
- N_("color for \"waiting\" dcc status"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightcyan", NULL, &cfg_col_dcc_waiting, NULL, &config_change_color },
- { "col_dcc_connecting", N_("color for \"connecting\" dcc status"),
- N_("color for \"connecting\" dcc status"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "yellow", NULL, &cfg_col_dcc_connecting, NULL, &config_change_color },
- { "col_dcc_active", N_("color for \"active\" dcc status"),
- N_("color for \"active\" dcc status"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightblue", NULL, &cfg_col_dcc_active, NULL, &config_change_color },
- { "col_dcc_done", N_("color for \"done\" dcc status"),
- N_("color for \"done\" dcc status"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightgreen", NULL, &cfg_col_dcc_done, NULL, &config_change_color },
- { "col_dcc_failed", N_("color for \"failed\" dcc status"),
- N_("color for \"failed\" dcc status"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightred", NULL, &cfg_col_dcc_failed, NULL, &config_change_color },
- { "col_dcc_aborted", N_("color for \"aborted\" dcc status"),
- N_("color for \"aborted\" dcc status"),
- OPTION_TYPE_COLOR, 0, 0, 0,
- "lightred", NULL, &cfg_col_dcc_aborted, NULL, &config_change_color },
-
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, history section */
-
-int cfg_history_max_lines;
-int cfg_history_max_commands;
-int cfg_history_display_default;
-
-t_config_option weechat_options_history[] =
-{ { "history_max_lines", N_("max lines in history (per window)"),
- N_("maximum number of lines in history "
- "for one server/channel/private window (0 = unlimited)"),
- OPTION_TYPE_INT, 0, INT_MAX, 4096,
- NULL, NULL, &cfg_history_max_lines, NULL, &config_change_noop },
- { "history_max_commands", N_("max user commands in history"),
- N_("maximum number of user commands in history (0 = unlimited)"),
- OPTION_TYPE_INT, 0, INT_MAX, 100,
- NULL, NULL, &cfg_history_max_commands, NULL, &config_change_noop },
- { "history_display_default", N_("max commands to display"),
- N_("maximum number of commands to display by default in history listing (0 = unlimited)"),
- OPTION_TYPE_INT, 0, INT_MAX, 5,
- NULL, NULL, &cfg_history_display_default, NULL, &config_change_noop },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, log section */
-
-int cfg_log_auto_server;
-int cfg_log_auto_channel;
-int cfg_log_auto_private;
-int cfg_log_plugin_msg;
-char *cfg_log_path;
-char *cfg_log_timestamp;
-int cfg_log_hide_nickserv_pwd;
-
-t_config_option weechat_options_log[] =
-{ { "log_auto_server", N_("automatically log server messages"),
- N_("automatically log server messages"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_log_auto_server, NULL, &config_change_log },
- { "log_auto_channel", N_("automatically log channel chats"),
- N_("automatically log channel chats"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_log_auto_channel, NULL, &config_change_log },
- { "log_auto_private", N_("automatically log private chats"),
- N_("automatically log private chats"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_log_auto_private, NULL, &config_change_log },
- { "log_plugin_msg", N_("log messages from plugins (scripts)"),
- N_("log messages from plugins (scripts)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_log_plugin_msg, NULL, &config_change_noop },
- { "log_path", N_("path for log files"),
- N_("path for WeeChat log files ('%h' will be replaced by WeeChat home, "
- "~/.weechat by default)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "%h/logs/", NULL, NULL, &cfg_log_path, &config_change_noop },
- { "log_timestamp", N_("timestamp for log"),
- N_("timestamp for log (see man strftime for date/time specifiers)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "%Y %b %d %H:%M:%S", NULL, NULL, &cfg_log_timestamp, &config_change_noop },
- { "log_hide_nickserv_pwd", N_("hide password displayed by nickserv"),
- N_("hide password displayed by nickserv"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_log_hide_nickserv_pwd, NULL, &config_change_noop },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, irc section */
-
-int cfg_irc_display_away;
-int cfg_irc_show_away_once;
-char *cfg_irc_display_away_values[] =
-{ "off", "local", "channel", NULL };
-char *cfg_irc_default_msg_part;
-char *cfg_irc_default_msg_quit;
-int cfg_irc_notice_as_pv;
-int cfg_irc_away_check;
-int cfg_irc_away_check_max_nicks;
-int cfg_irc_lag_check;
-int cfg_irc_lag_min_show;
-int cfg_irc_lag_disconnect;
-int cfg_irc_anti_flood;
-int cfg_irc_fifo_pipe;
-char *cfg_irc_highlight;
-int cfg_irc_colors_receive;
-int cfg_irc_colors_send;
-int cfg_irc_send_unknown_commands;
-
-t_config_option weechat_options_irc[] =
-{ { "irc_display_away", N_("display message for away"),
- N_("display message when (un)marking as away"),
- OPTION_TYPE_INT_WITH_STRING, 0, 0, 0,
- "off", cfg_irc_display_away_values, &cfg_irc_display_away, NULL, &config_change_noop },
- { "irc_show_away_once", N_("show remote away message only once in private"),
- N_("show remote away message only once in private"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_irc_show_away_once, NULL, &config_change_noop },
- { "irc_default_msg_part", N_("default part message (leaving channel)"),
- N_("default part message (leaving channel) ('%v' will be replaced by "
- "WeeChat version in string)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "WeeChat %v", NULL, NULL, &cfg_irc_default_msg_part, &config_change_noop },
- { "irc_default_msg_quit", N_("default quit message"),
- N_("default quit message ('%v' will be replaced by WeeChat version in string)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "WeeChat %v", NULL, NULL, &cfg_irc_default_msg_quit, &config_change_noop },
- { "irc_notice_as_pv", N_("display notices as private messages"),
- N_("display notices as private messages"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_irc_notice_as_pv, NULL, &config_change_noop },
- { "irc_away_check", N_("interval between two checks for away"),
- N_("interval between two checks for away (in minutes, 0 = never check)"),
- OPTION_TYPE_INT, 0, INT_MAX, 0,
- NULL, NULL, &cfg_irc_away_check, NULL, &config_change_away_check },
- { "irc_away_check_max_nicks", N_("max number of nicks for away check"),
- N_("do not check away nicks on channels with high number of nicks (0 = unlimited)"),
- OPTION_TYPE_INT, 0, INT_MAX, 0,
- NULL, NULL, &cfg_irc_away_check_max_nicks, NULL, &config_change_away_check },
- { "irc_lag_check", N_("interval between two checks for lag"),
- N_("interval between two checks for lag (in seconds)"),
- OPTION_TYPE_INT, 30, INT_MAX, 60,
- NULL, NULL, &cfg_irc_lag_check, NULL, &config_change_noop },
- { "irc_lag_min_show", N_("minimum lag to show"),
- N_("minimum lag to show (in seconds)"),
- OPTION_TYPE_INT, 0, INT_MAX, 1,
- NULL, NULL, &cfg_irc_lag_min_show, NULL, &config_change_noop },
- { "irc_lag_disconnect", N_("disconnect after important lag"),
- N_("disconnect after important lag (in minutes, 0 = never disconnect)"),
- OPTION_TYPE_INT, 0, INT_MAX, 5,
- NULL, NULL, &cfg_irc_lag_disconnect, NULL, &config_change_noop },
- { "irc_anti_flood", N_("anti-flood"),
- N_("anti-flood: # seconds between two user messages (0 = no anti-flood)"),
- OPTION_TYPE_INT, 0, 5, 2,
- NULL, NULL, &cfg_irc_anti_flood, NULL, &config_change_noop },
- { "irc_fifo_pipe", N_("create a FIFO pipe for remote control"),
- N_("create a FIFO pipe for remote control"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_irc_fifo_pipe, NULL, &config_change_fifo_pipe },
- { "irc_highlight", N_("list of words to highlight"),
- N_("comma separated list of words to highlight (case insensitive comparison, "
- "words may begin or end with \"*\" for partial match)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &cfg_irc_highlight, &config_change_noop },
- { "irc_colors_receive", N_("when off, colors codes are ignored in "
- "incoming messages"),
- N_("when off, colors codes are ignored in incoming messages"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_irc_colors_receive, NULL, config_change_noop },
- { "irc_colors_send", N_("allow user to send colors"),
- N_("allow user to send colors with special codes (^Cb=bold, ^Ccxx=color, "
- "^Ccxx,yy=color+background, ^Cu=underline, ^Cr=reverse)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_irc_colors_send, NULL, config_change_noop },
- { "irc_send_unknown_commands", N_("send unknown commands to IRC server"),
- N_("send unknown commands to IRC server"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_irc_send_unknown_commands, NULL, &config_change_noop },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, dcc section */
-
-int cfg_dcc_auto_accept_files;
-int cfg_dcc_auto_accept_chats;
-int cfg_dcc_timeout;
-int cfg_dcc_blocksize;
-int cfg_dcc_fast_send;
-char *cfg_dcc_port_range;
-char *cfg_dcc_own_ip;
-char *cfg_dcc_download_path;
-char *cfg_dcc_upload_path;
-int cfg_dcc_convert_spaces;
-int cfg_dcc_auto_rename;
-int cfg_dcc_auto_resume;
-
-t_config_option weechat_options_dcc[] =
-{ { "dcc_auto_accept_files", N_("automatically accept dcc files"),
- N_("automatically accept incoming dcc files"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_dcc_auto_accept_files, NULL, &config_change_noop },
- { "dcc_auto_accept_chats", N_("automatically accept dcc chats"),
- N_("automatically accept dcc chats (use carefully!)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_dcc_auto_accept_chats, NULL, &config_change_noop },
- { "dcc_timeout", N_("timeout for dcc request"),
- N_("timeout for dcc request (in seconds)"),
- OPTION_TYPE_INT, 5, INT_MAX, 300,
- NULL, NULL, &cfg_dcc_timeout, NULL, &config_change_noop },
- { "dcc_blocksize", N_("block size for dcc packets"),
- N_("block size for dcc packets in bytes (default: 65536)"),
- OPTION_TYPE_INT, IRC_DCC_MIN_BLOCKSIZE, IRC_DCC_MAX_BLOCKSIZE, 65536,
- NULL, NULL, &cfg_dcc_blocksize, NULL, &config_change_noop },
- { "dcc_fast_send", N_("does not wait for ACK when sending file"),
- N_("does not wait for ACK when sending file"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_dcc_fast_send, NULL, &config_change_noop },
- { "dcc_port_range", N_("allowed ports for outgoing dcc"),
- N_("restricts outgoing dcc to use only ports in the given range "
- "(useful for NAT) (syntax: a single port, ie. 5000 or a port "
- "range, ie. 5000-5015, empty value means any port)"),
- OPTION_TYPE_STRING, 0, 0, 0, "",
- NULL, NULL, &cfg_dcc_port_range, &config_change_noop },
- { "dcc_own_ip", N_("IP address for outgoing dcc"),
- N_("IP or DNS address used for outgoing dcc "
- "(if empty, local interface IP is used)"),
- OPTION_TYPE_STRING, 0, 0, 0, "",
- NULL, NULL, &cfg_dcc_own_ip, &config_change_noop },
- { "dcc_download_path", N_("path for incoming files with dcc"),
- N_("path for writing incoming files with dcc (default: user home)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "%h/dcc", NULL, NULL, &cfg_dcc_download_path, &config_change_noop },
- { "dcc_upload_path", N_("default path for sending files with dcc"),
- N_("path for reading files when sending thru dcc (when no path is specified)"),
- OPTION_TYPE_STRING, 0, 0, 0, "~",
- NULL, NULL, &cfg_dcc_upload_path, &config_change_noop },
- { "dcc_convert_spaces", N_("convert spaces to underscores when sending files"),
- N_("convert spaces to underscores when sending files"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_dcc_convert_spaces, NULL, &config_change_noop },
- { "dcc_auto_rename", N_("automatically rename dcc files if already exists"),
- N_("rename incoming files if already exists (add '.1', '.2', ...)"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_dcc_auto_rename, NULL, &config_change_noop },
- { "dcc_auto_resume", N_("automatically resume aborted transfers"),
- N_("automatically resume dcc transfer if connection with remote host is loosed"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &cfg_dcc_auto_resume, NULL, &config_change_noop },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, proxy section */
-
-int cfg_proxy_use;
-int cfg_proxy_type;
-int cfg_proxy_ipv6;
-char *cfg_proxy_type_values[] =
-{ "http", "socks4", "socks5", NULL };
-char *cfg_proxy_address;
-int cfg_proxy_port;
-char *cfg_proxy_username;
-char *cfg_proxy_password;
-
-t_config_option weechat_options_proxy[] =
-{ { "proxy_use", N_("use proxy"),
- N_("use a proxy server to connect to irc server"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_proxy_use, NULL, &config_change_noop },
- { "proxy_type", N_("proxy type"),
- N_("proxy type (http (default), socks4, socks5)"),
- OPTION_TYPE_INT_WITH_STRING, 0, 0, 0,
- "http", cfg_proxy_type_values, &cfg_proxy_type, NULL, &config_change_noop },
- { "proxy_ipv6", N_("use ipv6 proxy"),
- N_("connect to proxy in ipv6"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &cfg_proxy_ipv6, NULL, &config_change_noop },
- { "proxy_address", N_("proxy address"),
- N_("proxy server address (IP or hostname)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &cfg_proxy_address, &config_change_noop },
- { "proxy_port", N_("port for proxy"),
- N_("port for connecting to proxy server"),
- OPTION_TYPE_INT, 0, 65535, 3128,
- NULL, NULL, &cfg_proxy_port, NULL, &config_change_noop },
- { "proxy_username", N_("proxy username"),
- N_("username for proxy server"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &cfg_proxy_username, &config_change_noop },
- { "proxy_password", N_("proxy password"),
- N_("password for proxy server"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &cfg_proxy_password, &config_change_noop },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, plugins section */
-
-char *cfg_plugins_path;
-char *cfg_plugins_autoload;
-char *cfg_plugins_extension;
-
-t_config_option weechat_options_plugins[] =
-{ { "plugins_path", N_("path for searching plugins"),
- N_("path for searching plugins ('%h' will be replaced by WeeChat home, "
- "~/.weechat by default)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "%h/plugins", NULL, NULL, &cfg_plugins_path, &config_change_noop },
- { "plugins_autoload", N_("list of plugins to load automatically"),
- N_("comma separated list of plugins to load automatically at startup, "
- "\"*\" means all plugins found "
- "(names may be partial, for example \"perl\" is ok for \"libperl.so\")"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "*", NULL, NULL, &cfg_plugins_autoload, &config_change_noop },
- { "plugins_extension", N_("standard plugins extension in filename"),
- N_("standard plugins extension in filename, used for autoload "
- "(if empty, then all files are loaded when autoload is \"*\")"),
- OPTION_TYPE_STRING, 0, 0, 0,
-#ifdef WIN32
- ".dll",
-#else
- ".so",
-#endif
- NULL, NULL, &cfg_plugins_extension, &config_change_noop },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* config, server section */
-
-static t_irc_server cfg_server;
-
-t_config_option weechat_options_server[] =
-{ { "server_name", N_("server name"),
- N_("name associated to IRC server (for display only)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.name), NULL },
- { "server_autoconnect", N_("automatically connect to server"),
- N_("automatically connect to server when WeeChat is starting"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &(cfg_server.autoconnect), NULL, NULL },
- { "server_autoreconnect", N_("automatically reconnect to server"),
- N_("automatically reconnect to server when disconnected"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &(cfg_server.autoreconnect), NULL, NULL },
- { "server_autoreconnect_delay", N_("delay before trying again to reconnect"),
- N_("delay (in seconds) before trying again to reconnect to server"),
- OPTION_TYPE_INT, 0, 65535, 30,
- NULL, NULL, &(cfg_server.autoreconnect_delay), NULL, NULL },
- { "server_address", N_("server address or hostname"),
- N_("IP address or hostname of IRC server"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.address), NULL },
- { "server_port", N_("port for IRC server"),
- N_("port for connecting to server"),
- OPTION_TYPE_INT, 0, 65535, 6667,
- NULL, NULL, &(cfg_server.port), NULL, NULL },
- { "server_ipv6", N_("use IPv6 protocol for server communication"),
- N_("use IPv6 protocol for server communication"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &(cfg_server.ipv6), NULL, NULL },
- { "server_ssl", N_("use SSL for server communication"),
- N_("use SSL for server communication"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_FALSE,
- NULL, NULL, &(cfg_server.ssl), NULL, NULL },
- { "server_password", N_("server password"),
- N_("password for IRC server"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.password), NULL },
- { "server_nick1", N_("nickname for server"),
- N_("nickname to use on IRC server"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.nick1), NULL },
- { "server_nick2", N_("alternate nickname for server"),
- N_("alternate nickname to use on IRC server (if nickname is already used)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.nick2), NULL },
- { "server_nick3", N_("2nd alternate nickname for server"),
- N_("2nd alternate nickname to use on IRC server (if alternate nickname is already used)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.nick3), NULL },
- { "server_username", N_("user name for server"),
- N_("user name to use on IRC server"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.username), NULL },
- { "server_realname", N_("real name for server"),
- N_("real name to use on IRC server"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.realname), NULL },
- { "server_hostname", N_("custom hostname/IP for server"),
- N_("custom hostname/IP for server (optional, if empty local hostname is used)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.hostname), NULL },
- { "server_command", N_("command(s) to run when connected to server"),
- N_("command(s) to run when connected to server (many commands should be "
- "separated by ';', use '\\;' for a semicolon, special variables $nick, "
- "$channel and $server are replaced by their value)"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.command), NULL },
- { "server_command_delay", N_("delay (in seconds) after command was executed"),
- N_("delay (in seconds) after command was executed (example: give some time for authentication)"),
- OPTION_TYPE_INT, 0, 3600, 0,
- NULL, NULL, &(cfg_server.command_delay), NULL, NULL },
- { "server_autojoin", N_("list of channels to join when connected to server"),
- N_("comma separated list of channels to join when connected to server (example: \"#chan1,#chan2,#chan3 key1,key2\")"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.autojoin), NULL },
- { "server_autorejoin", N_("automatically rejoin channels when kicked"),
- N_("automatically rejoin channels when kicked"),
- OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
- NULL, NULL, &(cfg_server.autorejoin), NULL, NULL },
- { "server_notify_levels", N_("notify levels for channels of this server"),
- N_("comma separated list of notify levels for channels of this server "
- "(format: #channel:1,..), a channel name '*' is reserved for server "
- "default notify level"),
- OPTION_TYPE_STRING, 0, 0, 0,
- "", NULL, NULL, &(cfg_server.notify_levels), config_change_notify_levels },
- { NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
-};
-
-/* all weechat options */
-
-t_config_option *weechat_options[CONFIG_NUMBER_SECTIONS] =
-{ weechat_options_look, weechat_options_colors, weechat_options_history,
- weechat_options_log, weechat_options_irc, weechat_options_dcc,
- weechat_options_proxy, weechat_options_plugins, NULL, NULL, NULL,
- weechat_options_server
-};
-
-
-/*
- * config_get_pos_array_values: return position of a string in an array of values
- * return -1 if not found, otherwise position
- */
-
-int
-config_get_pos_array_values (char **array, char *string)
-{
- int i;
-
- i = 0;
- while (array[i])
- {
- if (ascii_strcasecmp (array[i], string) == 0)
- return i;
- i++;
- }
- /* string not found in array */
- return -1;
-}
-
-/*
- * config_get_section: get section name from option pointer
- */
-
-char *
-config_get_section (t_config_option *ptr_option)
-{
- int i, j;
-
- for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
- {
- if ((i != CONFIG_SECTION_KEYS) && (i != CONFIG_SECTION_ALIAS)
- && (i != CONFIG_SECTION_IGNORE) && (i != CONFIG_SECTION_SERVER))
- {
- for (j = 0; weechat_options[i][j].option_name; j++)
- {
- /* if option found, return pointer to section name */
- if (ptr_option == &weechat_options[i][j])
- return config_sections[i].section_name;
- }
- }
- }
- /* option not found */
- return NULL;
-}
-
-/*
- * config_change_noop: called when an option is changed by /set command
- * and that no special action is needed after that
- */
-
-void
-config_change_noop ()
-{
- /* do nothing */
-}
-
-/*
- * config_change_save_on_exit: called when "save_on_exit" flag is changed
- */
-
-void
-config_change_save_on_exit ()
-{
- if (!cfg_look_save_on_exit)
- {
- gui_printf (NULL, "\n");
- gui_printf (NULL, _("%s you should now issue /save to write "
- "\"save_on_exit\" option in config file.\n"),
- WEECHAT_WARNING);
- }
-}
-
-/*
- * config_change_title: called when title is changed
- */
-
-void
-config_change_title ()
-{
- if (cfg_look_set_title)
- gui_window_set_title ();
- else
- gui_window_reset_title ();
-}
-
-/*
- * config_change_buffers: called when buffers change (for example nicklist)
- */
-
-void
-config_change_buffers ()
-{
- gui_window_refresh_windows ();
-}
-
-/*
- * config_change_buffer_content: called when content of a buffer changes
- */
-
-void
-config_change_buffer_content ()
-{
- gui_window_redraw_buffer (gui_current_window->buffer);
-}
-
-/*
- * config_change_hotlist: called when hotlist changes
- */
-
-void
-config_change_hotlist ()
-{
- hotlist_resort ();
- gui_status_draw (gui_current_window->buffer, 1);
-}
-
-/*
- * config_change_read_marker: called when read marker is changed
- */
-
-void
-config_change_read_marker ()
-{
- gui_window_redraw_all_buffers ();
-}
-
-/*
- * config_change_one_server_buffer: called when the "one server buffer"
- * setting is changed
- */
-
-void
-config_change_one_server_buffer ()
-{
- if (cfg_look_one_server_buffer)
- gui_buffer_merge_servers (gui_current_window);
- else
- gui_buffer_split_server (gui_current_window);
-}
-
-/*
- * config_change_color: called when a color is changed by /set command
- */
-
-void
-config_change_color ()
-{
- gui_color_init_pairs ();
- gui_color_rebuild_weechat ();
- gui_window_refresh_windows ();
-}
-
-/*
- * config_change_nicks_colors: called when number of nicks color changed
- */
-
-void
-config_change_nicks_colors ()
-{
- t_irc_server *ptr_server;
- t_irc_channel *ptr_channel;
- t_irc_nick *ptr_nick;
-
- for (ptr_server = irc_servers; ptr_server;
- ptr_server = ptr_server->next_server)
- {
- if (ptr_server->is_connected)
- {
- for (ptr_channel = ptr_server->channels; ptr_channel;
- ptr_channel = ptr_channel->next_channel)
- {
- for (ptr_nick = ptr_channel->nicks; ptr_nick;
- ptr_nick = ptr_nick->next_nick)
- {
- if (ptr_nick->color != GUI_COLOR_WIN_NICK_SELF)
- ptr_nick->color = irc_nick_find_color (ptr_nick);
- }
- }
- }
- }
-}
-
-/*
- * config_change_away_check: called when away check is changed
- */
-
-void
-config_change_away_check ()
-{
- if (cfg_irc_away_check == 0)
- {
- /* reset away flag for all nicks/chans/servers */
- irc_server_remove_away ();
- }
- irc_check_away = cfg_irc_away_check * 60;
-}
-
-/*
- * config_change_fifo_pipe: called when FIFO pipe is changed
- */
-
-void
-config_change_fifo_pipe ()
-{
- if (cfg_irc_fifo_pipe)
- {
- if (weechat_fifo == -1)
- fifo_create ();
- }
- else
- {
- if (weechat_fifo != -1)
- fifo_remove ();
- }
-}
-
-/*
- * config_change_notify_levels: called when notify levels is changed for a server
- */
-
-void
-config_change_notify_levels ()
-{
- t_gui_buffer *ptr_buffer;
-
- for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
- {
- if (GUI_BUFFER_IS_CHANNEL(ptr_buffer) || GUI_BUFFER_IS_PRIVATE(ptr_buffer))
- ptr_buffer->notify_level =
- irc_channel_get_notify_level (GUI_SERVER(ptr_buffer), GUI_CHANNEL(ptr_buffer));
- }
-}
-
-/*
- * config_change_log: called when log settings are changed (for server/channel/private logging)
- */
-
-void
-config_change_log ()
-{
- t_gui_buffer *ptr_buffer;
-
- for (ptr_buffer = gui_buffers; ptr_buffer;
- ptr_buffer = ptr_buffer->next_buffer)
- {
- if (GUI_BUFFER_IS_SERVER(ptr_buffer))
- {
- if (cfg_log_auto_server && !ptr_buffer->log_file)
- gui_log_start (ptr_buffer);
- else if (!cfg_log_auto_server && ptr_buffer->log_file)
- gui_log_end (ptr_buffer);
- }
- if (GUI_BUFFER_IS_CHANNEL(ptr_buffer))
- {
- if (cfg_log_auto_channel && !ptr_buffer->log_file)
- gui_log_start (ptr_buffer);
- else if (!cfg_log_auto_channel && ptr_buffer->log_file)
- gui_log_end (ptr_buffer);
- }
- if (GUI_BUFFER_IS_PRIVATE(ptr_buffer))
- {
- if (cfg_log_auto_private && !ptr_buffer->log_file)
- gui_log_start (ptr_buffer);
- else if (!cfg_log_auto_private && ptr_buffer->log_file)
- gui_log_end (ptr_buffer);
- }
- }
-}
-
-/*
- * config_option_get_boolean_value: get boolean value with user text
- * return: BOOL_FALSE or BOOL_TRUE
- */
-
-int
-config_option_get_boolean_value (char *text)
-{
- if ((ascii_strcasecmp (text, "on") == 0)
- || (ascii_strcasecmp (text, "yes") == 0)
- || (ascii_strcasecmp (text, "y") == 0)
- || (ascii_strcasecmp (text, "true") == 0)
- || (ascii_strcasecmp (text, "t") == 0)
- || (ascii_strcasecmp (text, "1") == 0))
- return BOOL_TRUE;
-
- if ((ascii_strcasecmp (text, "off") == 0)
- || (ascii_strcasecmp (text, "no") == 0)
- || (ascii_strcasecmp (text, "n") == 0)
- || (ascii_strcasecmp (text, "false") == 0)
- || (ascii_strcasecmp (text, "f") == 0)
- || (ascii_strcasecmp (text, "0") == 0))
- return BOOL_FALSE;
-
- /* invalid text */
- return -1;
-}
-
-/*
- * config_option_set_value: set new value for an option
- * return: 0 if success
- * -1 if error (bad value)
- */
-
-int
-config_option_set_value (t_config_option *option, char *value)
-{
- int int_value;
-
- switch (option->option_type)
- {
- case OPTION_TYPE_BOOLEAN:
- int_value = config_option_get_boolean_value (value);
- switch (int_value)
- {
- case BOOL_TRUE:
- *(option->ptr_int) = BOOL_TRUE;
- break;
- case BOOL_FALSE:
- *(option->ptr_int) = BOOL_FALSE;
- break;
- default:
- return -1;
- }
- break;
- case OPTION_TYPE_INT:
- int_value = atoi (value);
- if ((int_value < option->min) || (int_value > option->max))
- return -1;
- *(option->ptr_int) = int_value;
- break;
- case OPTION_TYPE_INT_WITH_STRING:
- int_value = config_get_pos_array_values (option->array_values,
- value);
- if (int_value < 0)
- return -1;
- *(option->ptr_int) = int_value;
- break;
- case OPTION_TYPE_COLOR:
- if (!gui_color_assign (option->ptr_int, value))
- return -1;
- break;
- case OPTION_TYPE_STRING:
- if ((option->max > 0) && (utf8_strlen (value) > option->max))
- return -1;
- if (*(option->ptr_string))
- free (*(option->ptr_string));
- *(option->ptr_string) = strdup (value);
- break;
- }
- return 0;
-}
-
-/*
- * config_option_list_remove: remove an item from a list for an option
- * (for options with value like: "abc:1,def:blabla")
- */
-
-void
-config_option_list_remove (char **string, char *item)
-{
- char *name, *pos, *pos2;
-
- if (!string || !(*string))
- return;
-
- name = (char *) malloc (strlen (item) + 2);
- strcpy (name, item);
- strcat (name, ":");
- pos = ascii_strcasestr (*string, name);
- free (name);
- if (pos)
- {
- pos2 = pos + strlen (item);
- if (pos2[0] == ':')
- {
- pos2++;
- if (pos2[0])
- {
- while (pos2[0] && (pos2[0] != ','))
- pos2++;
- if (pos2[0] == ',')
- pos2++;
- if (!pos2[0] && (pos != (*string)))
- pos--;
- strcpy (pos, pos2);
- if (!(*string)[0])
- {
- free (*string);
- *string = NULL;
- }
- else
- (*string) = (char *) realloc (*string, strlen (*string) + 1);
- }
- }
- }
-}
-
-/*
- * config_option_list_set: set an item from a list for an option
- * (for options with value like: "abc:1,def:blabla")
- */
-
-void
-config_option_list_set (char **string, char *item, char *value)
-{
- config_option_list_remove (string, item);
-
- if (!(*string))
- {
- (*string) = (char *) malloc (strlen (item) + 1 + strlen (value) + 1);
- (*string)[0] = '\0';
- }
- else
- (*string) = (char *) realloc (*string,
- strlen (*string) + 1 +
- strlen (item) + 1 + strlen (value) + 1);
-
- if ((*string)[0])
- strcat (*string, ",");
- strcat (*string, item);
- strcat (*string, ":");
- strcat (*string, value);
-}
-
-/*
- * config_option_list_get_value: return position of item value in the list
- * (for options with value like: "abc:1,def:blabla")
- */
-
-void
-config_option_list_get_value (char **string, char *item,
- char **pos_found, int *length)
-{
- char *name, *pos, *pos2, *pos_comma;
-
- *pos_found = NULL;
- *length = 0;
-
- if (!string || !(*string))
- return;
-
- name = (char *) malloc (strlen (item) + 2);
- strcpy (name, item);
- strcat (name, ":");
- pos = ascii_strcasestr (*string, name);
- free (name);
- if (pos)
- {
- pos2 = pos + strlen (item);
- if (pos2[0] == ':')
- {
- pos2++;
- *pos_found = pos2;
- pos_comma = strchr (pos2, ',');
- if (pos_comma)
- *length = pos_comma - pos2;
- else
- *length = strlen (pos2);
- }
- }
-}
-
-/*
- * config_get_server_option_ptr: get a pointer to a server config option
- */
-
-void *
-config_get_server_option_ptr (t_irc_server *server, char *option_name)
-{
- if (ascii_strcasecmp (option_name, "server_name") == 0)
- return (void *)(&server->name);
- if (ascii_strcasecmp (option_name, "server_autoconnect") == 0)
- return (void *)(&server->autoconnect);
- if (ascii_strcasecmp (option_name, "server_autoreconnect") == 0)
- return (void *)(&server->autoreconnect);
- if (ascii_strcasecmp (option_name, "server_autoreconnect_delay") == 0)
- return (void *)(&server->autoreconnect_delay);
- if (ascii_strcasecmp (option_name, "server_address") == 0)
- return (void *)(&server->address);
- if (ascii_strcasecmp (option_name, "server_port") == 0)
- return (void *)(&server->port);
- if (ascii_strcasecmp (option_name, "server_ipv6") == 0)
- return (void *)(&server->ipv6);
- if (ascii_strcasecmp (option_name, "server_ssl") == 0)
- return (void *)(&server->ssl);
- if (ascii_strcasecmp (option_name, "server_password") == 0)
- return (void *)(&server->password);
- if (ascii_strcasecmp (option_name, "server_nick1") == 0)
- return (void *)(&server->nick1);
- if (ascii_strcasecmp (option_name, "server_nick2") == 0)
- return (void *)(&server->nick2);
- if (ascii_strcasecmp (option_name, "server_nick3") == 0)
- return (void *)(&server->nick3);
- if (ascii_strcasecmp (option_name, "server_username") == 0)
- return (void *)(&server->username);
- if (ascii_strcasecmp (option_name, "server_realname") == 0)
- return (void *)(&server->realname);
- if (ascii_strcasecmp (option_name, "server_hostname") == 0)
- return (void *)(&server->hostname);
- if (ascii_strcasecmp (option_name, "server_command") == 0)
- return (void *)(&server->command);
- if (ascii_strcasecmp (option_name, "server_command_delay") == 0)
- return (void *)(&server->command_delay);
- if (ascii_strcasecmp (option_name, "server_autojoin") == 0)
- return (void *)(&server->autojoin);
- if (ascii_strcasecmp (option_name, "server_autorejoin") == 0)
- return (void *)(&server->autorejoin);
- if (ascii_strcasecmp (option_name, "server_notify_levels") == 0)
- return (void *)(&server->notify_levels);
- /* option not found */
- return NULL;
-}
-
-/*
- * config_set_server_value: set new value for an option
- * return: 0 if success
- * -1 if option not found
- * -2 if bad value
- */
-
-int
-config_set_server_value (t_irc_server *server, char *option_name,
- char *value)
-{
- t_config_option *ptr_option;
- int i;
- void *ptr_data;
- int int_value;
-
- ptr_data = config_get_server_option_ptr (server, option_name);
- if (!ptr_data)
- return -1;
-
- ptr_option = NULL;
- for (i = 0; weechat_options[CONFIG_SECTION_SERVER][i].option_name; i++)
- {
- /* if option found, return pointer */
- if (ascii_strcasecmp (weechat_options[CONFIG_SECTION_SERVER][i].option_name, option_name) == 0)
- {
- ptr_option = &weechat_options[CONFIG_SECTION_SERVER][i];
- break;
- }
- }
- if (!ptr_option)
- return -1;
-
- switch (ptr_option->option_type)
- {
- case OPTION_TYPE_BOOLEAN:
- int_value = config_option_get_boolean_value (value);
- switch (int_value)
- {
- case BOOL_TRUE:
- *((int *)(ptr_data)) = BOOL_TRUE;
- break;
- case BOOL_FALSE:
- *((int *)(ptr_data)) = BOOL_FALSE;
- break;
- default:
- return -2;
- }
- break;
- case OPTION_TYPE_INT:
- int_value = atoi (value);
- if ((int_value < ptr_option->min) || (int_value > ptr_option->max))
- return -2;
- *((int *)(ptr_data)) = int_value;
- break;
- case OPTION_TYPE_INT_WITH_STRING:
- int_value = config_get_pos_array_values (ptr_option->array_values,
- value);
- if (int_value < 0)
- return -2;
- *((int *)(ptr_data)) = int_value;
- break;
- case OPTION_TYPE_COLOR:
- if (!gui_color_assign ((int *)ptr_data, value))
- return -2;
- break;
- case OPTION_TYPE_STRING:
- if (*((char **)ptr_data))
- free (*((char **)ptr_data));
- *((char **)ptr_data) = strdup (value);
- break;
- }
- if (ptr_option->handler_change != NULL)
- (void) (ptr_option->handler_change());
- return 0;
-}
-
-/*
- * config_option_search: look for an option and return pointer to this option
- * if option is not found, NULL is returned
- */
-
-t_config_option *
-config_option_search (char *option_name)
-{
- int i, j;
-
- for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
- {
- if ((i != CONFIG_SECTION_KEYS) && (i != CONFIG_SECTION_ALIAS)
- && (i != CONFIG_SECTION_IGNORE) && (i != CONFIG_SECTION_SERVER))
- {
- for (j = 0; weechat_options[i][j].option_name; j++)
- {
- /* if option found, return pointer */
- if (ascii_strcasecmp (weechat_options[i][j].option_name, option_name) == 0)
- return &weechat_options[i][j];
- }
- }
- }
- /* option not found */
- return NULL;
-}
-
-/*
- * config_option_search_option_value: look for type and value of an option
- * (including server options)
- * if option is not found, NULL is returned
- */
-
-void
-config_option_search_option_value (char *option_name, t_config_option **option,
- void **option_value)
-{
- t_config_option *ptr_option;
- t_irc_server *ptr_server;
- int i;
- void *ptr_value;
- char *pos;
-
- ptr_option = NULL;
- ptr_value = NULL;
-
- ptr_option = config_option_search (option_name);
- if (!ptr_option)
- {
- pos = strchr (option_name, '.');
- if (pos)
- {
- pos[0] = '\0';
- ptr_server = irc_server_search (option_name);
- if (ptr_server)
- {
- for (i = 0; weechat_options[CONFIG_SECTION_SERVER][i].option_name; i++)
- {
- if (strcmp (weechat_options[CONFIG_SECTION_SERVER][i].option_name,
- pos + 1) == 0)
- {
- ptr_option = &weechat_options[CONFIG_SECTION_SERVER][i];
- ptr_value = config_get_server_option_ptr (ptr_server, pos + 1);
- break;
- }
- }
- }
- pos[0] = '.';
- }
- }
- else
- {
- switch (ptr_option->option_type)
- {
- case OPTION_TYPE_BOOLEAN:
- case OPTION_TYPE_INT:
- case OPTION_TYPE_INT_WITH_STRING:
- case OPTION_TYPE_COLOR:
- ptr_value = (void *)(ptr_option->ptr_int);
- break;
- case OPTION_TYPE_STRING:
- ptr_value = (void *)(ptr_option->ptr_string);
- break;
- }
- }
-
- if (ptr_option)
- {
- *option = ptr_option;
- *option_value = ptr_value;
- }
-}
-
-/*
- * config_set_value: set new value for an option (found by name)
- * return: 0 if success
- * -1 if bad value for option
- * -2 if option is not found
- */
-
-int
-config_set_value (char *option_name, char *value)
-{
- t_config_option *ptr_option;
-
- ptr_option = config_option_search (option_name);
- if (ptr_option)
- return config_option_set_value (ptr_option, value);
- else
- return -2;
-}
-
-/*
- * config_allocate_server: allocate a new server
- */
-
-int
-config_allocate_server (char *filename, int line_number)
-{
- if (!cfg_server.name
- || !cfg_server.address
- || cfg_server.port < 0
- || !cfg_server.nick1
- || !cfg_server.nick2
- || !cfg_server.nick3
- || !cfg_server.username
- || !cfg_server.realname)
- {
- irc_server_free_all ();
- gui_printf (NULL,
- _("%s %s, line %d: new server, but previous was incomplete\n"),
- WEECHAT_WARNING, filename, line_number);
- return 0;
-
- }
- if (irc_server_name_already_exists (cfg_server.name))
- {
- irc_server_free_all ();
- gui_printf (NULL,
- _("%s %s, line %d: server '%s' already exists\n"),
- WEECHAT_WARNING, filename, line_number, cfg_server.name);
- return 0;
- }
- if (!irc_server_new (cfg_server.name,
- cfg_server.autoconnect, cfg_server.autoreconnect,
- cfg_server.autoreconnect_delay, 0, cfg_server.address,
- cfg_server.port, cfg_server.ipv6, cfg_server.ssl,
- cfg_server.password, cfg_server.nick1, cfg_server.nick2,
- cfg_server.nick3, cfg_server.username, cfg_server.realname,
- cfg_server.hostname, cfg_server.command,
- cfg_server.command_delay, cfg_server.autojoin,
- cfg_server.autorejoin, cfg_server.notify_levels))
- {
- irc_server_free_all ();
- gui_printf (NULL,
- _("%s %s, line %d: unable to create server\n"),
- WEECHAT_WARNING, filename, line_number);
- return 0;
- }
-
- irc_server_destroy (&cfg_server);
- irc_server_init (&cfg_server);
-
- return 1;
-}
-
-/*
- * config_default_values: initialize config variables with default values
- */
-
-void
-config_default_values ()
-{
- int i, j, int_value;
-
- for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
- {
- if ((i != CONFIG_SECTION_KEYS) && (i != CONFIG_SECTION_ALIAS)
- && (i != CONFIG_SECTION_IGNORE) && (i != CONFIG_SECTION_SERVER))
- {
- for (j = 0; weechat_options[i][j].option_name; j++)
- {
- switch (weechat_options[i][j].option_type)
- {
- case OPTION_TYPE_BOOLEAN:
- case OPTION_TYPE_INT:
- *weechat_options[i][j].ptr_int =
- weechat_options[i][j].default_int;
- break;
- case OPTION_TYPE_INT_WITH_STRING:
- int_value = config_get_pos_array_values (
- weechat_options[i][j].array_values,
- weechat_options[i][j].default_string);
- if (int_value < 0)
- gui_printf (NULL,
- _("%s unable to assign default int with string (\"%s\")\n"),
- WEECHAT_WARNING, weechat_options[i][j].default_string);
- else
- *weechat_options[i][j].ptr_int =
- int_value;
- break;
- case OPTION_TYPE_COLOR:
- if (!gui_color_assign (
- weechat_options[i][j].ptr_int,
- weechat_options[i][j].default_string))
- gui_printf (NULL,
- _("%s unable to assign default color (\"%s\")\n"),
- WEECHAT_WARNING, weechat_options[i][j].default_string);
- break;
- case OPTION_TYPE_STRING:
- *weechat_options[i][j].ptr_string =
- strdup (weechat_options[i][j].default_string);
- break;
- }
- }
- }
- }
-}
-
-/*
- * config_read: read WeeChat configuration
- * returns: 0 = successful
- * -1 = config file file not found
- * < -1 = other error (fatal)
- */
-
-int
-config_read ()
-{
- int filename_length;
- char *filename;
- FILE *file;
- int section, line_number, i, option_number;
- int server_found;
- char line[1024], *ptr_line, *ptr_line2, *pos, *pos2;
-
- filename_length = strlen (weechat_home) + strlen (WEECHAT_CONFIG_NAME) + 2;
- filename = (char *) malloc (filename_length * sizeof (char));
- if (!filename)
- return -2;
- snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
- weechat_home, DIR_SEPARATOR);
- if ((file = fopen (filename, "r")) == NULL)
- {
- gui_printf (NULL, _("%s config file \"%s\" not found.\n"),
- WEECHAT_WARNING, filename);
- free (filename);
- return -1;
- }
-
- config_default_values ();
- irc_server_init (&cfg_server);
-
- /* read config file */
- section = CONFIG_SECTION_NONE;
- server_found = 0;
- line_number = 0;
- while (!feof (file))
- {
- ptr_line = fgets (line, sizeof (line) - 1, file);
- line_number++;
- if (ptr_line)
- {
- /* encode line to internal charset */
- ptr_line2 = weechat_iconv_to_internal (NULL, ptr_line);
- if (ptr_line2)
- {
- snprintf (line, sizeof (line) - 1, "%s", ptr_line2);
- free (ptr_line2);
- }
-
- /* skip spaces */
- while (ptr_line[0] == ' ')
- ptr_line++;
- /* not a comment and not an empty line */
- if ((ptr_line[0] != '#') && (ptr_line[0] != '\r')
- && (ptr_line[0] != '\n'))
- {
- /* beginning of section */
- if (ptr_line[0] == '[')
- {
- pos = strchr (line, ']');
- if (pos == NULL)
- gui_printf (NULL,
- _("%s %s, line %d: invalid syntax, missing \"]\"\n"),
- WEECHAT_WARNING, filename, line_number);
- else
- {
- pos[0] = '\0';
- pos = ptr_line + 1;
- section = CONFIG_SECTION_NONE;
- for (i = 0; config_sections[i].section_name; i++)
- {
- if (strcmp (config_sections[i].section_name, pos) == 0)
- {
- section = i;
- break;
- }
- }
- if (section == CONFIG_SECTION_NONE)
- gui_printf (NULL,
- _("%s %s, line %d: unknown section identifier (\"%s\")\n"),
- WEECHAT_WARNING, filename, line_number, pos);
- else
- {
- if (server_found)
- {
- /* if server already started => create it */
- config_allocate_server (filename, line_number);
- }
- server_found = (section == CONFIG_SECTION_SERVER) ? 1 : 0;
- }
- }
- }
- else
- {
- if (section == CONFIG_SECTION_NONE)
- {
- gui_printf (NULL,
- _("%s %s, line %d: invalid section for option, line is ignored\n"),
- WEECHAT_WARNING, filename, line_number);
- }
- else
- {
- pos = strchr (line, '=');
- if (pos == NULL)
- gui_printf (NULL,
- _("%s %s, line %d: invalid syntax, missing \"=\"\n"),
- WEECHAT_WARNING, filename, line_number);
- else
- {
- pos[0] = '\0';
- pos++;
-
- /* remove spaces before '=' */
- pos2 = pos - 2;
- while ((pos2 > line) && (pos2[0] == ' '))
- {
- pos2[0] = '\0';
- pos2--;
- }
-
- /* skip spaces after '=' */
- while (pos[0] && (pos[0] == ' '))
- {
- pos++;
- }
-
- /* remove CR/LF */
- pos2 = strchr (pos, '\r');
- if (pos2 != NULL)
- pos2[0] = '\0';
- pos2 = strchr (pos, '\n');
- if (pos2 != NULL)
- pos2[0] = '\0';
-
- /* remove simple or double quotes
- and spaces at the end */
- if (strlen(pos) > 1)
- {
- pos2 = pos + strlen (pos) - 1;
- while ((pos2 > pos) && (pos2[0] == ' '))
- {
- pos2[0] = '\0';
- pos2--;
- }
- pos2 = pos + strlen (pos) - 1;
- if (((pos[0] == '\'') &&
- (pos2[0] == '\'')) ||
- ((pos[0] == '"') &&
- (pos2[0] == '"')))
- {
- pos2[0] = '\0';
- pos++;
- }
- }
-
- if (section == CONFIG_SECTION_KEYS)
- {
- if (pos[0])
- {
- /* bind key (overwrite any binding with same key) */
- gui_keyboard_bind (line, pos);
- }
- else
- {
- /* unbin key if no value given */
- gui_keyboard_unbind (line);
- }
- }
- else if (section == CONFIG_SECTION_ALIAS)
- {
- /* create new alias */
- if (alias_new (line, pos))
- weelist_add (&index_commands, &last_index_command,
- line, WEELIST_POS_SORT);
- }
- else if (section == CONFIG_SECTION_IGNORE)
- {
- /* create new ignore */
- if (ascii_strcasecmp (line, "ignore") != 0)
- gui_printf (NULL,
- _("%s %s, line %d: invalid option \"%s\"\n"),
- WEECHAT_WARNING, filename, line_number, line);
- else
- {
- if (!irc_ignore_add_from_config (pos))
- gui_printf (NULL,
- _("%s %s, line %d: invalid ignore options \"%s\"\n"),
- WEECHAT_WARNING, filename, line_number, pos);
- }
- }
- else
- {
- option_number = -1;
- for (i = 0;
- weechat_options[section][i].option_name; i++)
- {
- if (strcmp
- (weechat_options[section][i].option_name,
- ptr_line) == 0)
- {
- option_number = i;
- break;
- }
- }
- if (option_number < 0)
- gui_printf (NULL,
- _("%s %s, line %d: invalid option \"%s\"\n"),
- WEECHAT_WARNING, filename, line_number, ptr_line);
- else
- {
- if (config_option_set_value (&weechat_options[section][option_number], pos) < 0)
- {
- switch (weechat_options[section]
- [option_number].option_type)
- {
- case OPTION_TYPE_BOOLEAN:
- gui_printf (NULL,
- _("%s %s, line %d: invalid value for "
- "option '%s'\n"
- "Expected: boolean value: "
- "'off' or 'on'\n"),
- WEECHAT_WARNING, filename,
- line_number, ptr_line);
- break;
- case OPTION_TYPE_INT:
- gui_printf (NULL,
- _("%s %s, line %d: invalid value for "
- "option '%s'\n"
- "Expected: integer between %d "
- "and %d\n"),
- WEECHAT_WARNING, filename,
- line_number, ptr_line,
- weechat_options[section][option_number].min,
- weechat_options[section][option_number].max);
- break;
- case OPTION_TYPE_INT_WITH_STRING:
- gui_printf (NULL,
- _("%s %s, line %d: invalid value for "
- "option '%s'\n"
- "Expected: one of these strings: "),
- WEECHAT_WARNING, filename,
- line_number, ptr_line);
- i = 0;
- while (weechat_options[section][option_number].array_values[i])
- {
- gui_printf (NULL, "\"%s\" ",
- weechat_options[section][option_number].array_values[i]);
- i++;
- }
- gui_printf (NULL, "\n");
- break;
- case OPTION_TYPE_COLOR:
- gui_printf (NULL,
- _("%s %s, line %d: invalid color "
- "name for option '%s'\n"),
- WEECHAT_WARNING, filename,
- line_number,
- ptr_line);
- break;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- if (server_found)
- {
- if (!config_allocate_server (filename, line_number))
- {
- fclose (file);
- free (filename);
- return -2;
- }
- }
-
- fclose (file);
- free (filename);
-
- return 0;
-}
-
-
-/*
- * config_create_default: create default WeeChat config
- * return: 0 if ok
- * < 0 if error
- */
-
-int
-config_create_default ()
-{
- int filename_length;
- char *filename;
- FILE *file;
- int i, j;
- time_t current_time;
- struct passwd *my_passwd;
- char *realname, *pos;
- t_gui_key *ptr_key;
- char *expanded_name, *function_name;
-
- filename_length = strlen (weechat_home) +
- strlen (WEECHAT_CONFIG_NAME) + 2;
- filename =
- (char *) malloc (filename_length * sizeof (char));
- if (!filename)
- return -2;
- snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
- weechat_home, DIR_SEPARATOR);
- if ((file = fopen (filename, "w")) == NULL)
- {
- gui_printf (NULL, _("%s cannot create file \"%s\"\n"),
- WEECHAT_ERROR, filename);
- free (filename);
- return -1;
- }
-
- weechat_iconv_fprintf (stdout, _("%s: creating default config file...\n"), PACKAGE_NAME);
- weechat_log_printf (_("Creating default config file\n"));
-
- current_time = time (NULL);
- weechat_iconv_fprintf (file, _("#\n# %s configuration file, created by "
- "%s v%s on %s"),
- PACKAGE_NAME, PACKAGE_NAME, PACKAGE_VERSION,
- ctime (&current_time));
- weechat_iconv_fprintf (file, _("# WARNING! Be careful when editing this file, "
- "WeeChat writes this file when exiting.\n#\n"));
-
- for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
- {
- if ((i != CONFIG_SECTION_KEYS) && (i != CONFIG_SECTION_ALIAS)
- && (i != CONFIG_SECTION_IGNORE) && (i != CONFIG_SECTION_SERVER))
- {
- weechat_iconv_fprintf (file, "\n[%s]\n", config_sections[i].section_name);
- for (j = 0; weechat_options[i][j].option_name; j++)
- {
- switch (weechat_options[i][j].option_type)
- {
- case OPTION_TYPE_BOOLEAN:
- weechat_iconv_fprintf (file, "%s = %s\n",
- weechat_options[i][j].option_name,
- (weechat_options[i][j].default_int) ?
- "on" : "off");
- break;
- case OPTION_TYPE_INT:
- weechat_iconv_fprintf (file, "%s = %d\n",
- weechat_options[i][j].option_name,
- weechat_options[i][j].default_int);
- break;
- case OPTION_TYPE_INT_WITH_STRING:
- case OPTION_TYPE_COLOR:
- weechat_iconv_fprintf (file, "%s = %s\n",
- weechat_options[i][j].option_name,
- weechat_options[i][j].default_string);
- break;
- case OPTION_TYPE_STRING:
- weechat_iconv_fprintf (file, "%s = \"%s\"\n",
- weechat_options[i][j].option_name,
- weechat_options[i][j].default_string);
- break;
- }
- }
- }
- }
-
- /* default key bindings */
- weechat_iconv_fprintf (file, "\n[keys]\n");
- for (ptr_key = gui_keys; ptr_key; ptr_key = ptr_key->next_key)
- {
- expanded_name = gui_keyboard_get_expanded_name (ptr_key->key);
- if (ptr_key->function)
- {
- function_name = gui_keyboard_function_search_by_ptr (ptr_key->function);
- if (function_name)
- weechat_iconv_fprintf (file, "%s = \"%s%s%s\"\n",
- (expanded_name) ? expanded_name : ptr_key->key,
- function_name,
- (ptr_key->args) ? " " : "",
- (ptr_key->args) ? ptr_key->args : "");
- }
- else
- weechat_iconv_fprintf (file, "%s = \"%s\"\n",
- (expanded_name) ? expanded_name : ptr_key->key,
- ptr_key->command);
- if (expanded_name)
- free (expanded_name);
- }
-
- /* default aliases */
- weechat_iconv_fprintf (file, "\n[alias]\n");
- weechat_iconv_fprintf (file, "SAY = \"msg *\"\n");
- weechat_iconv_fprintf (file, "BYE = \"quit\"\n");
- weechat_iconv_fprintf (file, "EXIT = \"quit\"\n");
- weechat_iconv_fprintf (file, "SIGNOFF = \"quit\"\n");
- weechat_iconv_fprintf (file, "C = \"clear\"\n");
- weechat_iconv_fprintf (file, "CL = \"clear\"\n");
- weechat_iconv_fprintf (file, "CLOSE = \"buffer close\"\n");
- weechat_iconv_fprintf (file, "CHAT = \"dcc chat\"\n");
- weechat_iconv_fprintf (file, "IG = \"ignore\"\n");
- weechat_iconv_fprintf (file, "J = \"join\"\n");
- weechat_iconv_fprintf (file, "K = \"kick\"\n");
- weechat_iconv_fprintf (file, "KB = \"kickban\"\n");
- weechat_iconv_fprintf (file, "LEAVE = \"part\"\n");
- weechat_iconv_fprintf (file, "M = \"msg\"\n");
- weechat_iconv_fprintf (file, "MUB = \"unban *\"\n");
- weechat_iconv_fprintf (file, "N = \"names\"\n");
- weechat_iconv_fprintf (file, "Q = \"query\"\n");
- weechat_iconv_fprintf (file, "T = \"topic\"\n");
- weechat_iconv_fprintf (file, "UB = \"unban\"\n");
- weechat_iconv_fprintf (file, "UNIG = \"unignore\"\n");
- weechat_iconv_fprintf (file, "W = \"who\"\n");
- weechat_iconv_fprintf (file, "WC = \"window merge\"\n");
- weechat_iconv_fprintf (file, "WI = \"whois\"\n");
- weechat_iconv_fprintf (file, "WW = \"whowas\"\n");
-
- /* no ignore by default */
-
- /* default server is freenode */
- weechat_iconv_fprintf (file, "\n[server]\n");
- weechat_iconv_fprintf (file, "server_name = \"freenode\"\n");
- weechat_iconv_fprintf (file, "server_autoconnect = on\n");
- weechat_iconv_fprintf (file, "server_autoreconnect = on\n");
- weechat_iconv_fprintf (file, "server_autoreconnect_delay = 30\n");
- weechat_iconv_fprintf (file, "server_address = \"irc.freenode.net\"\n");
- weechat_iconv_fprintf (file, "server_port = 6667\n");
- weechat_iconv_fprintf (file, "server_ipv6 = off\n");
- weechat_iconv_fprintf (file, "server_ssl = off\n");
- weechat_iconv_fprintf (file, "server_password = \"\"\n");
-
- /* Get the user's name from /etc/passwd */
- if ((my_passwd = getpwuid (geteuid ())) != NULL)
- {
- weechat_iconv_fprintf (file, "server_nick1 = \"%s\"\n", my_passwd->pw_name);
- weechat_iconv_fprintf (file, "server_nick2 = \"%s1\"\n", my_passwd->pw_name);
- weechat_iconv_fprintf (file, "server_nick3 = \"%s2\"\n", my_passwd->pw_name);
- weechat_iconv_fprintf (file, "server_username = \"%s\"\n", my_passwd->pw_name);
- if ((!my_passwd->pw_gecos)
- || (my_passwd->pw_gecos[0] == '\0')
- || (my_passwd->pw_gecos[0] == ',')
- || (my_passwd->pw_gecos[0] == ' '))
- weechat_iconv_fprintf (file, "server_realname = \"%s\"\n", my_passwd->pw_name);
- else
- {
- realname = strdup (my_passwd->pw_gecos);
- pos = strchr (realname, ',');
- if (pos)
- pos[0] = '\0';
- weechat_iconv_fprintf (file, "server_realname = \"%s\"\n",
- realname);
- if (pos)
- pos[0] = ',';
- free (realname);
- }
- }
- else
- {
- /* default values if /etc/passwd can't be read */
- weechat_iconv_fprintf (stderr, "%s: %s (%s).",
- WEECHAT_WARNING,
- _("Unable to get user's name"),
- strerror (errno));
- weechat_iconv_fprintf (file, "server_nick1 = \"weechat1\"\n");
- weechat_iconv_fprintf (file, "server_nick2 = \"weechat2\"\n");
- weechat_iconv_fprintf (file, "server_nick3 = \"weechat3\"\n");
- weechat_iconv_fprintf (file, "server_username = \"weechat\"\n");
- weechat_iconv_fprintf (file, "server_realname = \"WeeChat default realname\"\n");
- }
-
- weechat_iconv_fprintf (file, "server_hostname = \"\"\n");
- weechat_iconv_fprintf (file, "server_command = \"\"\n");
- weechat_iconv_fprintf (file, "server_command_delay = 0\n");
- weechat_iconv_fprintf (file, "server_autojoin = \"\"\n");
- weechat_iconv_fprintf (file, "server_autorejoin = on\n");
- weechat_iconv_fprintf (file, "server_notify_levels = \"\"\n");
-
- fclose (file);
- chmod (filename, 0600);
- free (filename);
- return 0;
-}
-
-/*
- * config_write: write WeeChat configurtion
- * return: 0 if ok
- * < 0 if error
- */
-
-int
-config_write (char *config_name)
-{
- int filename_length;
- char *filename, *filename2;
- FILE *file;
- int i, j, rc;
- time_t current_time;
- t_irc_server *ptr_server;
- t_weechat_alias *ptr_alias;
- t_irc_ignore *ptr_ignore;
- t_gui_key *ptr_key;
- char *expanded_name, *function_name;
-
- if (config_name)
- {
- filename_length = strlen (config_name);
- filename = strdup (config_name);
- }
- else
- {
- filename_length = strlen (weechat_home) +
- strlen (WEECHAT_CONFIG_NAME) + 2;
- filename =
- (char *) malloc (filename_length * sizeof (char));
- if (!filename)
- return -2;
- snprintf (filename, filename_length, "%s%s" WEECHAT_CONFIG_NAME,
- weechat_home, DIR_SEPARATOR);
- }
-
- filename2 = (char *) malloc ((filename_length + 32) * sizeof (char));
- if (!filename2)
- {
- free (filename);
- return -2;
- }
- snprintf (filename2, filename_length + 32, "%s.weechattmp", filename);
-
- if ((file = fopen (filename2, "w")) == NULL)
- {
- gui_printf (NULL, _("%s cannot create file \"%s\"\n"),
- WEECHAT_ERROR, filename2);
- free (filename);
- free (filename2);
- return -1;
- }
-
- weechat_log_printf (_("Saving config to disk\n"));
-
- current_time = time (NULL);
- weechat_iconv_fprintf (file, _("#\n# %s configuration file, created by "
- "%s v%s on %s"),
- PACKAGE_NAME, PACKAGE_NAME, PACKAGE_VERSION,
- ctime (&current_time));
- weechat_iconv_fprintf (file, _("# WARNING! Be careful when editing this file, "
- "WeeChat writes this file when exiting.\n#\n"));
-
- for (i = 0; i < CONFIG_NUMBER_SECTIONS; i++)
- {
- if ((i != CONFIG_SECTION_KEYS) && (i != CONFIG_SECTION_ALIAS)
- && (i != CONFIG_SECTION_IGNORE) && (i != CONFIG_SECTION_SERVER))
- {
- weechat_iconv_fprintf (file, "\n[%s]\n", config_sections[i].section_name);
- for (j = 0; weechat_options[i][j].option_name; j++)
- {
- switch (weechat_options[i][j].option_type)
- {
- case OPTION_TYPE_BOOLEAN:
- weechat_iconv_fprintf (file, "%s = %s\n",
- weechat_options[i][j].option_name,
- (weechat_options[i][j].ptr_int &&
- *weechat_options[i][j].ptr_int) ?
- "on" : "off");
- break;
- case OPTION_TYPE_INT:
- weechat_iconv_fprintf (file, "%s = %d\n",
- weechat_options[i][j].option_name,
- (weechat_options[i][j].ptr_int) ?
- *weechat_options[i][j].ptr_int :
- weechat_options[i][j].default_int);
- break;
- case OPTION_TYPE_INT_WITH_STRING:
- weechat_iconv_fprintf (file, "%s = %s\n",
- weechat_options[i][j].option_name,
- (weechat_options[i][j].ptr_int) ?
- weechat_options[i][j].array_values[*weechat_options[i][j].ptr_int] :
- weechat_options[i][j].array_values[weechat_options[i][j].default_int]);
- break;
- case OPTION_TYPE_COLOR:
- weechat_iconv_fprintf (file, "%s = %s\n",
- weechat_options[i][j].option_name,
- (weechat_options[i][j].ptr_int) ?
- gui_color_get_name (*weechat_options[i][j].ptr_int) :
- weechat_options[i][j].default_string);
- break;
- case OPTION_TYPE_STRING:
- weechat_iconv_fprintf (file, "%s = \"%s\"\n",
- weechat_options[i][j].option_name,
- (weechat_options[i][j].ptr_string) ?
- *weechat_options[i][j].ptr_string :
- weechat_options[i][j].default_string);
- break;
- }
- }
- }
- }
-
- /* keys section */
- weechat_iconv_fprintf (file, "\n[keys]\n");
- for (ptr_key = gui_keys; ptr_key; ptr_key = ptr_key->next_key)
- {
- expanded_name = gui_keyboard_get_expanded_name (ptr_key->key);
- if (ptr_key->function)
- {
- function_name = gui_keyboard_function_search_by_ptr (ptr_key->function);
- if (function_name)
- weechat_iconv_fprintf (file, "%s = \"%s%s%s\"\n",
- (expanded_name) ? expanded_name : ptr_key->key,
- function_name,
- (ptr_key->args) ? " " : "",
- (ptr_key->args) ? ptr_key->args : "");
- }
- else
- weechat_iconv_fprintf (file, "%s = \"%s\"\n",
- (expanded_name) ? expanded_name : ptr_key->key,
- ptr_key->command);
- if (expanded_name)
- free (expanded_name);
- }
-
- /* alias section */
- weechat_iconv_fprintf (file, "\n[alias]\n");
- for (ptr_alias = weechat_alias; ptr_alias;
- ptr_alias = ptr_alias->next_alias)
- {
- weechat_iconv_fprintf (file, "%s = \"%s\"\n",
- ptr_alias->alias_name, ptr_alias->alias_command);
- }
-
- /* ignore section */
- weechat_iconv_fprintf (file, "\n[ignore]\n");
- for (ptr_ignore = irc_ignore; ptr_ignore;
- ptr_ignore = ptr_ignore->next_ignore)
- {
- weechat_iconv_fprintf (file, "ignore = \"%s,%s,%s,%s\"\n",
- ptr_ignore->mask,
- ptr_ignore->type,
- ptr_ignore->channel_name,
- ptr_ignore->server_name);
- }
-
- /* server section */
- for (ptr_server = irc_servers; ptr_server;
- ptr_server = ptr_server->next_server)
- {
- if (!ptr_server->temp_server)
- {
- weechat_iconv_fprintf (file, "\n[server]\n");
- weechat_iconv_fprintf (file, "server_name = \"%s\"\n", ptr_server->name);
- weechat_iconv_fprintf (file, "server_autoconnect = %s\n",
- (ptr_server->autoconnect) ? "on" : "off");
- weechat_iconv_fprintf (file, "server_autoreconnect = %s\n",
- (ptr_server->autoreconnect) ? "on" : "off");
- weechat_iconv_fprintf (file, "server_autoreconnect_delay = %d\n",
- ptr_server->autoreconnect_delay);
- weechat_iconv_fprintf (file, "server_address = \"%s\"\n", ptr_server->address);
- weechat_iconv_fprintf (file, "server_port = %d\n", ptr_server->port);
- weechat_iconv_fprintf (file, "server_ipv6 = %s\n",
- (ptr_server->ipv6) ? "on" : "off");
- weechat_iconv_fprintf (file, "server_ssl = %s\n",
- (ptr_server->ssl) ? "on" : "off");
- weechat_iconv_fprintf (file, "server_password = \"%s\"\n",
- (ptr_server->password) ? ptr_server->password : "");
- weechat_iconv_fprintf (file, "server_nick1 = \"%s\"\n", ptr_server->nick1);
- weechat_iconv_fprintf (file, "server_nick2 = \"%s\"\n", ptr_server->nick2);
- weechat_iconv_fprintf (file, "server_nick3 = \"%s\"\n", ptr_server->nick3);
- weechat_iconv_fprintf (file, "server_username = \"%s\"\n", ptr_server->username);
- weechat_iconv_fprintf (file, "server_realname = \"%s\"\n", ptr_server->realname);
- weechat_iconv_fprintf (file, "server_hostname = \"%s\"\n",
- (ptr_server->hostname) ? ptr_server->hostname : "");
- weechat_iconv_fprintf (file, "server_command = \"%s\"\n",
- (ptr_server->command) ? ptr_server->command : "");
- weechat_iconv_fprintf (file, "server_command_delay = %d\n", ptr_server->command_delay);
- weechat_iconv_fprintf (file, "server_autojoin = \"%s\"\n",
- (ptr_server->autojoin) ? ptr_server->autojoin : "");
- weechat_iconv_fprintf (file, "server_autorejoin = %s\n",
- (ptr_server->autorejoin) ? "on" : "off");
- weechat_iconv_fprintf (file, "server_notify_levels = \"%s\"\n",
- (ptr_server->notify_levels) ? ptr_server->notify_levels : "");
- }
- }
-
- fclose (file);
- chmod (filename2, 0600);
- unlink (filename);
- rc = rename (filename2, filename);
- free (filename);
- free (filename2);
- if (rc != 0)
- return -1;
- return 0;
-}