char * irc_message_replace_vars (struct t_irc_server *server, const char *channel_name, const char *string) { const char *var_nick, *var_channel, *var_server; char empty_string[1] = { '\0' }; char *res, *temp; var_nick = (server && server->nick) ? server->nick : empty_string; var_channel = (channel_name) ? channel_name : empty_string; var_server = (server) ? server->name : empty_string; /* replace nick */ temp = weechat_string_replace (string, "$nick", var_nick); if (!temp) return NULL; res = temp; /* replace channel */ temp = weechat_string_replace (res, "$channel", var_channel); free (res); if (!temp) return NULL; res = temp; /* replace server */ temp = weechat_string_replace (res, "$server", var_server); free (res); if (!temp) return NULL; res = temp; /* return result */ return res; }
char * script_config_get_dir () { const char *weechat_home; char *path, *path2; weechat_home = weechat_info_get ("weechat_dir", NULL); path = weechat_string_expand_home (weechat_config_string (script_config_scripts_dir)); path2 = weechat_string_replace ((path) ? path : weechat_config_string (script_config_scripts_dir), "%h", weechat_home); if (path && path2) { free (path); path = NULL; } if (path2) return path2; if (path) return path; return strdup (weechat_config_string (script_config_scripts_dir)); }
char * xfer_chat_color_for_tags (const char *color) { if (!color) return NULL; return weechat_string_replace (color, ",", ":"); }
void relay_network_set_ssl_cert_key (int verbose) { #ifdef HAVE_GNUTLS char *certkey_path, *certkey_path2; int ret; gnutls_certificate_free_credentials (relay_gnutls_x509_cred); gnutls_certificate_allocate_credentials (&relay_gnutls_x509_cred); relay_network_init_ssl_cert_key_ok = 0; certkey_path = weechat_string_expand_home (weechat_config_string (relay_config_network_ssl_cert_key)); if (certkey_path) { certkey_path2 = weechat_string_replace (certkey_path, "%h", weechat_info_get ("weechat_dir", NULL)); if (certkey_path2) { ret = gnutls_certificate_set_x509_key_file (relay_gnutls_x509_cred, certkey_path2, certkey_path2, GNUTLS_X509_FMT_PEM); if (ret >= 0) { relay_network_init_ssl_cert_key_ok = 1; if (verbose) { weechat_printf (NULL, _("%s: SSL certificate and key have been " "set"), RELAY_PLUGIN_NAME); } } else { if (verbose) { weechat_printf (NULL, _("%s%s: warning: no SSL certificate/key " "found (option relay.network.ssl_cert_key)"), weechat_prefix ("error"), RELAY_PLUGIN_NAME); } } free (certkey_path2); } free (certkey_path); } #else /* make C compiler happy */ (void) verbose; #endif }
char * buflist_config_add_eval_for_formats (const char *string) { char *formats[] = { "format_buffer", "format_number", "indent", "format_nick_prefix", "format_name", "format_hotlist", "hotlist", "format_lag", "color_hotlist", NULL }; char *result, *tmp, format[512], format_eval[512]; int i; result = strdup (string); for (i = 0; formats[i]; i++) { snprintf (format, sizeof (format), "${%s}", formats[i]); snprintf (format_eval, sizeof (format_eval), "${eval:${%s}}", formats[i]); tmp = weechat_string_replace (result, format, format_eval); free (result); result = tmp; } return result; }
char * irc_sasl_get_key_content (struct t_irc_server *server, const char *sasl_key) { const char *weechat_dir; char *key_path1, *key_path2, *content; if (!sasl_key) return NULL; content = NULL; weechat_dir = weechat_info_get ("weechat_dir", ""); key_path1 = weechat_string_replace (sasl_key, "%h", weechat_dir); key_path2 = (key_path1) ? weechat_string_expand_home (key_path1) : NULL; if (key_path2) content = weechat_file_get_content (key_path2); if (!content) { weechat_printf ( server->buffer, _("%s%s: unable to read private key in file \"%s\""), weechat_prefix ("error"), IRC_PLUGIN_NAME, (key_path2) ? key_path2 : ((key_path1) ? key_path1 : sasl_key)); } if (key_path1) free (key_path1); if (key_path2) free (key_path2); return content; }
char * logger_get_mask_expanded (struct t_gui_buffer *buffer, const char *mask) { char *mask2, *mask_decoded, *mask_decoded2, *mask_decoded3, *mask_decoded4; char *mask_decoded5; const char *dir_separator; int length; time_t seconds; struct tm *date_tmp; mask2 = NULL; mask_decoded = NULL; mask_decoded2 = NULL; mask_decoded3 = NULL; mask_decoded4 = NULL; mask_decoded5 = NULL; dir_separator = weechat_info_get ("dir_separator", ""); if (!dir_separator) return NULL; /* * we first replace directory separator (commonly '/') by \01 because * buffer mask can contain this char, and will be replaced by replacement * char ('_' by default) */ mask2 = weechat_string_replace (mask, dir_separator, "\01"); if (!mask2) goto end; mask_decoded = weechat_buffer_string_replace_local_var (buffer, mask2); if (!mask_decoded) goto end; mask_decoded2 = weechat_string_replace (mask_decoded, dir_separator, weechat_config_string (logger_config_file_replacement_char)); if (!mask_decoded2) goto end; #ifdef __CYGWIN__ mask_decoded3 = weechat_string_replace (mask_decoded2, "\\", weechat_config_string (logger_config_file_replacement_char)); #else mask_decoded3 = strdup (mask_decoded2); #endif /* __CYGWIN__ */ if (!mask_decoded3) goto end; /* restore directory separator */ mask_decoded4 = weechat_string_replace (mask_decoded3, "\01", dir_separator); if (!mask_decoded4) goto end; /* replace date/time specifiers in mask */ length = strlen (mask_decoded4) + 256 + 1; mask_decoded5 = malloc (length); if (!mask_decoded5) goto end; seconds = time (NULL); date_tmp = localtime (&seconds); mask_decoded5[0] = '\0'; strftime (mask_decoded5, length - 1, mask_decoded4, date_tmp); /* convert to lower case? */ if (weechat_config_boolean (logger_config_file_name_lower_case)) weechat_string_tolower (mask_decoded5); if (weechat_logger_plugin->debug) { weechat_printf_tags (NULL, "no_log", "%s: buffer = \"%s\", mask = \"%s\", " "decoded mask = \"%s\"", LOGGER_PLUGIN_NAME, weechat_buffer_get_string (buffer, "name"), mask, mask_decoded5); } end: if (mask2) free (mask2); if (mask_decoded) free (mask_decoded); if (mask_decoded2) free (mask_decoded2); if (mask_decoded3) free (mask_decoded3); if (mask_decoded4) free (mask_decoded4); return mask_decoded5; }
void exec_display_line (struct t_exec_cmd *exec_cmd, struct t_gui_buffer *buffer, int out, const char *line) { char *line_color, *line_color2, *line2, str_number[32], str_tags[1024]; const char *ptr_line_color; int length; if (!exec_cmd || !line) return; /* * if output is sent to the buffer, the buffer must exist * (we don't send output by default to core buffer) */ if (exec_cmd->output_to_buffer && !exec_cmd->pipe_command && !buffer) return; /* decode colors */ line_color = exec_decode_color (exec_cmd, line); if (!line_color) return; exec_cmd->output_line_nb++; if (exec_cmd->pipe_command) { if (strstr (exec_cmd->pipe_command, "$line")) { /* replace $line by line content */ line2 = weechat_string_replace (exec_cmd->pipe_command, "$line", line_color); if (line2) { weechat_command (buffer, line2); free (line2); } } else { /* add line at the end of command, after a space */ length = strlen (exec_cmd->pipe_command) + 1 + strlen (line_color) + 1; line2 = malloc (length); if (line2) { snprintf (line2, length, "%s %s", exec_cmd->pipe_command, line_color); weechat_command (buffer, line2); free (line2); } } } else if (exec_cmd->output_to_buffer) { if (exec_cmd->line_numbers) { length = 32 + strlen (line_color) + 1; line2 = malloc (length); if (line2) { snprintf (line2, length, "%d. %s", exec_cmd->output_line_nb, line_color); weechat_command (buffer, line2); free (line2); } } else { if (exec_cmd->output_to_buffer_exec_cmd) ptr_line_color = line_color; else ptr_line_color = weechat_string_input_for_buffer (line_color); if (ptr_line_color) { weechat_command (buffer, (ptr_line_color[0]) ? ptr_line_color : " "); } else { length = 1 + strlen (line_color) + 1; line_color2 = malloc (length); if (line_color2) { snprintf (line_color2, length, "%c%s", line_color[0], line_color); weechat_command (buffer, (line_color2[0]) ? line_color2 : " "); free (line_color2); } } } } else { snprintf (str_number, sizeof (str_number), "%d", exec_cmd->number); snprintf (str_tags, sizeof (str_tags), "exec_%s,exec_cmd_%s", (out == EXEC_STDOUT) ? "stdout" : "stderr", (exec_cmd->name) ? exec_cmd->name : str_number); if (weechat_buffer_get_integer (buffer, "type") == 1) { snprintf (str_number, sizeof (str_number), "%d. ", exec_cmd->output_line_nb); weechat_printf_y (buffer, -1, "%s%s", (exec_cmd->line_numbers) ? str_number : " ", line_color); } else { snprintf (str_number, sizeof (str_number), "%d\t", exec_cmd->output_line_nb); weechat_printf_date_tags ( buffer, 0, str_tags, "%s%s", (exec_cmd->line_numbers) ? str_number : " \t", line_color); } } free (line_color); }
int weechat_aspell_command_cb (void *data, struct t_gui_buffer *buffer, int argc, char **argv, char **argv_eol) { char *dicts; const char *default_dict; struct t_infolist *infolist; int number; /* make C compiler happy */ (void) data; if (argc == 1) { /* display aspell status */ weechat_printf (NULL, ""); weechat_printf (NULL, /* TRANSLATORS: second "%s" is "aspell" or "enchant" */ _("%s (using %s)"), (aspell_enabled) ? _("Spell checking is enabled") : _("Spell checking is disabled"), #ifdef USE_ENCHANT "enchant" #else "aspell" #endif ); default_dict = weechat_config_string (weechat_aspell_config_check_default_dict); weechat_printf (NULL, _("Default dictionary: %s"), (default_dict && default_dict[0]) ? default_dict : _("(not set)")); number = 0; infolist = weechat_infolist_get ("option", NULL, "aspell.dict.*"); if (infolist) { while (weechat_infolist_next (infolist)) { if (number == 0) weechat_printf (NULL, _("Specific dictionaries on buffers:")); number++; weechat_printf (NULL, " %s: %s", weechat_infolist_string (infolist, "option_name"), weechat_infolist_string (infolist, "value")); } weechat_infolist_free (infolist); } return WEECHAT_RC_OK; } /* enable aspell */ if (weechat_strcasecmp (argv[1], "enable") == 0) { weechat_config_option_set (weechat_aspell_config_check_enabled, "1", 1); weechat_printf (NULL, _("Aspell enabled")); return WEECHAT_RC_OK; } /* disable aspell */ if (weechat_strcasecmp (argv[1], "disable") == 0) { weechat_config_option_set (weechat_aspell_config_check_enabled, "0", 1); weechat_printf (NULL, _("Aspell disabled")); return WEECHAT_RC_OK; } /* toggle aspell */ if (weechat_strcasecmp (argv[1], "toggle") == 0) { if (aspell_enabled) { weechat_config_option_set (weechat_aspell_config_check_enabled, "0", 1); weechat_printf (NULL, _("Aspell disabled")); } else { weechat_config_option_set (weechat_aspell_config_check_enabled, "1", 1); weechat_printf (NULL, _("Aspell enabled")); } return WEECHAT_RC_OK; } /* list of dictionaries */ if (weechat_strcasecmp (argv[1], "listdict") == 0) { weechat_aspell_command_speller_list_dicts (); return WEECHAT_RC_OK; } /* set dictionary for current buffer */ if (weechat_strcasecmp (argv[1], "setdict") == 0) { if (argc < 3) return WEECHAT_RC_ERROR; dicts = weechat_string_replace (argv_eol[2], " ", ""); weechat_aspell_command_set_dict (buffer, (dicts) ? dicts : argv[2]); if (dicts) free (dicts); return WEECHAT_RC_OK; } /* delete dictionary used on current buffer */ if (weechat_strcasecmp (argv[1], "deldict") == 0) { weechat_aspell_command_set_dict (buffer, NULL); return WEECHAT_RC_OK; } /* add word to personal dictionary */ if (weechat_strcasecmp (argv[1], "addword") == 0) { if (argc < 3) return WEECHAT_RC_ERROR; if (argc > 3) { /* use a given dict */ weechat_aspell_command_add_word (buffer, argv[2], argv_eol[3]); } else { /* use default dict */ weechat_aspell_command_add_word (buffer, NULL, argv_eol[2]); } return WEECHAT_RC_OK; } return WEECHAT_RC_ERROR; }
int weechat_aspell_command_cb (void *data, struct t_gui_buffer *buffer, int argc, char **argv, char **argv_eol) { char *dicts; const char *default_dict; struct t_infolist *infolist; int number; /* make C compiler happy */ (void) data; if (argc == 1) { /* display aspell status */ weechat_printf (NULL, ""); weechat_printf (NULL, "%s", (aspell_enabled) ? _("Aspell is enabled") : _("Aspell is disabled")); default_dict = weechat_config_string (weechat_aspell_config_check_default_dict); weechat_printf (NULL, _("Default dictionary: %s"), (default_dict && default_dict[0]) ? default_dict : _("(not set)")); number = 0; infolist = weechat_infolist_get ("option", NULL, "aspell.dict.*"); if (infolist) { while (weechat_infolist_next (infolist)) { if (number == 0) weechat_printf (NULL, _("Specific dictionaries on buffers:")); number++; weechat_printf (NULL, " %s: %s", weechat_infolist_string (infolist, "option_name"), weechat_infolist_string (infolist, "value")); } weechat_infolist_free (infolist); } return WEECHAT_RC_OK; } /* enable aspell */ if (weechat_strcasecmp (argv[1], "enable") == 0) { weechat_config_option_set (weechat_aspell_config_check_enabled, "1", 1); weechat_printf (NULL, _("Aspell enabled")); return WEECHAT_RC_OK; } /* disable aspell */ if (weechat_strcasecmp (argv[1], "disable") == 0) { weechat_config_option_set (weechat_aspell_config_check_enabled, "0", 1); weechat_printf (NULL, _("Aspell disabled")); return WEECHAT_RC_OK; } /* toggle aspell */ if (weechat_strcasecmp (argv[1], "toggle") == 0) { if (aspell_enabled) { weechat_config_option_set (weechat_aspell_config_check_enabled, "0", 1); weechat_printf (NULL, _("Aspell disabled")); } else { weechat_config_option_set (weechat_aspell_config_check_enabled, "1", 1); weechat_printf (NULL, _("Aspell enabled")); } return WEECHAT_RC_OK; } /* list of dictionaries */ if (weechat_strcasecmp (argv[1], "listdict") == 0) { weechat_aspell_speller_list_dicts (); return WEECHAT_RC_OK; } /* set dictionary for current buffer */ if (weechat_strcasecmp (argv[1], "setdict") == 0) { if (argc > 2) { dicts = weechat_string_replace (argv_eol[2], " ", ""); weechat_aspell_set_dict (buffer, (dicts) ? dicts : argv[2]); if (dicts) free (dicts); } return WEECHAT_RC_OK; } /* delete dictionary used on current buffer */ if (weechat_strcasecmp (argv[1], "deldict") == 0) { weechat_aspell_set_dict (buffer, NULL); return WEECHAT_RC_OK; } /* add word to personal dictionary */ if (weechat_strcasecmp (argv[1], "addword") == 0) { if (argc > 3) weechat_aspell_add_word (argv[2], argv_eol[3]); else { if (!weechat_aspell_spellers) { weechat_printf (NULL, _("%s%s: no dictionary on this buffer for " "adding word"), weechat_prefix ("error"), ASPELL_PLUGIN_NAME); } else if (weechat_aspell_spellers->next_speller) { weechat_printf (NULL, _("%s%s: many dictionaries are defined for " "this buffer, please specify dictionary"), weechat_prefix ("error"), ASPELL_PLUGIN_NAME); } else weechat_aspell_add_word (weechat_aspell_spellers->lang, argv_eol[2]); } return WEECHAT_RC_OK; } return WEECHAT_RC_ERROR; }
char * irc_ctcp_replace_variables (struct t_irc_server *server, const char *format) { char *res, *temp; const char *info; time_t now; struct tm *local_time; char buf[1024]; struct utsname *buf_uname; /* * $clientinfo: supported CTCP, example: * ACTION DCC CLIENTINFO FINGER PING SOURCE TIME USERINFO VERSION */ temp = weechat_string_replace (format, "$clientinfo", "ACTION DCC CLIENTINFO FINGER PING SOURCE " "TIME USERINFO VERSION"); if (!temp) return NULL; res = temp; /* * $git: git version (output of "git describe" for a development version * only, empty string if unknown), example: * v0.3.9-104-g7eb5cc4 */ info = weechat_info_get ("version_git", ""); temp = weechat_string_replace (res, "$git", info); free (res); if (!temp) return NULL; res = temp; /* * $versiongit: WeeChat version + git version (if known), examples: * 0.3.9 * 0.4.0-dev * 0.4.0-dev (git: v0.3.9-104-g7eb5cc4) */ info = weechat_info_get ("version_git", ""); snprintf (buf, sizeof (buf), "%s%s%s%s", weechat_info_get ("version", ""), (info && info[0]) ? " (git: " : "", (info && info[0]) ? info : "", (info && info[0]) ? ")" : ""); temp = weechat_string_replace (res, "$versiongit", buf); free (res); if (!temp) return NULL; res = temp; /* * $version: WeeChat version, examples: * 0.3.9 * 0.4.0-dev */ info = weechat_info_get ("version", ""); temp = weechat_string_replace (res, "$version", info); free (res); if (!temp) return NULL; res = temp; /* * $compilation: compilation date, example: * Dec 16 2012 */ info = weechat_info_get ("date", ""); temp = weechat_string_replace (res, "$compilation", info); free (res); if (!temp) return NULL; res = temp; /* * $osinfo: info about OS, example: * Linux 2.6.32-5-amd64 / x86_64 */ buf_uname = (struct utsname *)malloc (sizeof (struct utsname)); if (buf_uname && (uname (buf_uname) >= 0)) { snprintf (buf, sizeof (buf), "%s %s / %s", buf_uname->sysname, buf_uname->release, buf_uname->machine); free (buf_uname); temp = weechat_string_replace (res, "$osinfo", buf); free (res); if (!temp) return NULL; res = temp; } /* * $site: WeeChat web site, example: * http://www.weechat.org/ */ info = weechat_info_get ("weechat_site", ""); temp = weechat_string_replace (res, "$site", info); free (res); if (!temp) return NULL; res = temp; /* * $download: WeeChat download page, example: * http://www.weechat.org/download */ info = weechat_info_get ("weechat_site_download", ""); temp = weechat_string_replace (res, "$download", info); free (res); if (!temp) return NULL; res = temp; /* $time: local date/time of user, example: * Sun, 16 Dec 2012 10:40:48 +0100 */ now = time (NULL); local_time = localtime (&now); setlocale (LC_ALL, "C"); strftime (buf, sizeof (buf), weechat_config_string (irc_config_look_ctcp_time_format), local_time); setlocale (LC_ALL, ""); temp = weechat_string_replace (res, "$time", buf); free (res); if (!temp) return NULL; res = temp; /* * $username: user name, example: * name */ temp = weechat_string_replace (res, "$username", IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_USERNAME)); free (res); if (!temp) return NULL; res = temp; /* * $realname: real name, example: * John doe */ temp = weechat_string_replace (res, "$realname", IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_REALNAME)); free (res); if (!temp) return NULL; res = temp; /* return result */ return res; }
void relay_raw_message_add (struct t_relay_client *client, int flags, const char *data, int data_size) { char *buf, *buf2, prefix[256], prefix_arrow[16]; const unsigned char *ptr_buf; const char *hexa = "0123456789ABCDEF"; int pos_buf, pos_buf2, char_size, i; struct t_relay_raw_message *new_raw_message; buf = NULL; buf2 = NULL; if (flags & RELAY_RAW_FLAG_BINARY) { /* binary message */ buf = weechat_string_hex_dump (data, data_size, 16, " > ", NULL); snprintf (prefix, sizeof (prefix), " "); } else { /* text message */ buf = weechat_iconv_to_internal (NULL, data); buf2 = weechat_string_replace (buf, "\r", ""); if (buf2) { free (buf); buf = buf2; buf2 = NULL; } buf2 = malloc ((strlen (buf) * 4) + 1); if (buf2) { ptr_buf = (buf) ? (unsigned char *)buf : (unsigned char *)data; pos_buf = 0; pos_buf2 = 0; while (ptr_buf[pos_buf]) { if ((ptr_buf[pos_buf] < 32) && (ptr_buf[pos_buf] != '\n')) { buf2[pos_buf2++] = '\\'; buf2[pos_buf2++] = 'x'; buf2[pos_buf2++] = hexa[ptr_buf[pos_buf] / 16]; buf2[pos_buf2++] = hexa[ptr_buf[pos_buf] % 16]; pos_buf++; } else { char_size = weechat_utf8_char_size ((const char *)(ptr_buf + pos_buf)); for (i = 0; i < char_size; i++) { buf2[pos_buf2++] = ptr_buf[pos_buf++]; } } } buf2[pos_buf2] = '\0'; } /* build prefix with arrow */ prefix_arrow[0] = '\0'; switch (flags & (RELAY_RAW_FLAG_RECV | RELAY_RAW_FLAG_SEND)) { case RELAY_RAW_FLAG_RECV: strcpy (prefix_arrow, RELAY_RAW_PREFIX_RECV); break; case RELAY_RAW_FLAG_SEND: strcpy (prefix_arrow, RELAY_RAW_PREFIX_SEND); break; default: if (flags & RELAY_RAW_FLAG_RECV) strcpy (prefix_arrow, RELAY_RAW_PREFIX_RECV); else strcpy (prefix_arrow, RELAY_RAW_PREFIX_SEND); break; } if (client) { snprintf (prefix, sizeof (prefix), "%s%s %s[%s%d%s] %s%s%s%s", (flags & RELAY_RAW_FLAG_SEND) ? weechat_color ("chat_prefix_quit") : weechat_color ("chat_prefix_join"), prefix_arrow, weechat_color ("chat_delimiters"), weechat_color ("chat"), client->id, weechat_color ("chat_delimiters"), weechat_color ("chat_server"), relay_protocol_string[client->protocol], (client->protocol_args) ? "." : "", (client->protocol_args) ? client->protocol_args : ""); } else { snprintf (prefix, sizeof (prefix), "%s%s", (flags & RELAY_RAW_FLAG_SEND) ? weechat_color ("chat_prefix_quit") : weechat_color ("chat_prefix_join"), prefix_arrow); } } new_raw_message = relay_raw_message_add_to_list ( time (NULL), prefix, (buf2) ? buf2 : ((buf) ? buf : data)); if (new_raw_message) { if (relay_raw_buffer) relay_raw_message_print (new_raw_message); if (weechat_config_integer (relay_config_look_raw_messages) == 0) relay_raw_message_free (new_raw_message); } if (buf) free (buf); if (buf2) free (buf2); }
char * irc_ctcp_replace_variables (struct t_irc_server *server, const char *format) { char *res, *temp; const char *info; time_t now; char buf[1024]; struct utsname *buf_uname; /* clientinfo */ temp = weechat_string_replace (format, "$clientinfo", "ACTION DCC CLIENTINFO FINGER PING SOURCE " "TIME USERINFO VERSION"); if (!temp) return NULL; res = temp; /* version */ info = weechat_info_get ("version", ""); temp = weechat_string_replace (res, "$version", info); free (res); if (!temp) return NULL; res = temp; /* compilation date */ info = weechat_info_get ("date", ""); temp = weechat_string_replace (res, "$compilation", info); free (res); if (!temp) return NULL; res = temp; /* info about OS */ buf_uname = (struct utsname *)malloc (sizeof (struct utsname)); if (buf_uname && (uname (buf_uname) >= 0)) { snprintf (buf, sizeof (buf), "%s %s / %s", buf_uname->sysname, buf_uname->release, buf_uname->machine); free (buf_uname); temp = weechat_string_replace (res, "$osinfo", buf); free (res); if (!temp) return NULL; res = temp; } /* site */ info = weechat_info_get ("weechat_site", ""); temp = weechat_string_replace (res, "$site", info); free (res); if (!temp) return NULL; res = temp; /* site (download page) */ info = weechat_info_get ("weechat_site_download", ""); temp = weechat_string_replace (res, "$download", info); free (res); if (!temp) return NULL; res = temp; /* time */ now = time (NULL); snprintf (buf, sizeof (buf), "%s", ctime (&now)); buf[strlen (buf) - 1] = '\0'; temp = weechat_string_replace (res, "$time", buf); free (res); if (!temp) return NULL; res = temp; /* username */ temp = weechat_string_replace (res, "$username", IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_USERNAME)); free (res); if (!temp) return NULL; res = temp; /* realname */ temp = weechat_string_replace (res, "$realname", IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_REALNAME)); free (res); if (!temp) return NULL; res = temp; /* return result */ return res; }
int weechat_aspell_command_cb (void *data, struct t_gui_buffer *buffer, int argc, char **argv, char **argv_eol) { char *dicts; /* make C compiler happy */ (void) data; if (argc > 1) { if (weechat_strcasecmp (argv[1], "dictlist") == 0) { weechat_aspell_speller_list_dicts (); return WEECHAT_RC_OK; } if (weechat_strcasecmp (argv[1], "addword") == 0) { if (argc > 3) weechat_aspell_add_word (argv[2], argv_eol[3]); else { if (!weechat_aspell_spellers) { weechat_printf (NULL, _("%s%s: no dictionary on this buffer for " "adding word"), weechat_prefix ("error"), ASPELL_PLUGIN_NAME); } else if (weechat_aspell_spellers->next_speller) { weechat_printf (NULL, _("%s%s: many dictionaries are defined for " "this buffer, please specify dictionary"), weechat_prefix ("error"), ASPELL_PLUGIN_NAME); } else weechat_aspell_add_word (weechat_aspell_spellers->lang, argv_eol[2]); } return WEECHAT_RC_OK; } if (weechat_strcasecmp (argv[1], "enable") == 0) { if (argc > 2) { dicts = weechat_string_replace (argv_eol[2], " ", ""); weechat_aspell_set_dict (buffer, (dicts) ? dicts : argv[2]); if (dicts) free (dicts); } return WEECHAT_RC_OK; } if (weechat_strcasecmp (argv[1], "disable") == 0) { weechat_aspell_set_dict (buffer, NULL); return WEECHAT_RC_OK; } } return WEECHAT_RC_ERROR; }
void script_buffer_display_line_script (int line, struct t_script_repo *script) { char str_line[16384], str_item[1024], str_color_name[256], str_color[32]; char str_format[256], str_date[64], str_key[2], utf_char[16], *tags; const char *columns, *ptr_col; int char_size, *ptr_max_length, max_length, num_spaces, unknown; struct tm *tm; snprintf (str_color_name, sizeof (str_color_name), "%s,%s", (line == script_buffer_selected_line) ? weechat_config_string (script_config_color_text_selected) : weechat_config_string (script_config_color_text), (line == script_buffer_selected_line) ? weechat_config_string (script_config_color_text_bg_selected) : weechat_config_string (script_config_color_text_bg)); snprintf (str_color, sizeof (str_color), "%s", weechat_color (str_color_name)); columns = weechat_config_string (script_config_look_columns); ptr_col = columns; str_line[0] = '\0'; while (ptr_col[0]) { unknown = 0; str_item[0] = '\0'; num_spaces = 0; char_size = weechat_utf8_char_size (ptr_col); memcpy (utf_char, ptr_col, char_size); utf_char[char_size] = '\0'; if (utf_char[0] == '%') { ptr_col += char_size; char_size = weechat_utf8_char_size (ptr_col); memcpy (utf_char, ptr_col, char_size); utf_char[char_size] = '\0'; str_key[0] = ptr_col[0]; str_key[1] = '\0'; ptr_max_length = weechat_hashtable_get (script_repo_max_length_field, str_key); max_length = (ptr_max_length) ? *ptr_max_length : 0; num_spaces = max_length; switch (utf_char[0]) { case 'a': /* author */ if (script->author) { num_spaces = max_length - weechat_utf8_strlen_screen (script->author); snprintf (str_item, sizeof (str_item), "%s", script->author); } break; case 'd': /* description */ if (script->description) { num_spaces = max_length - weechat_utf8_strlen_screen (script->description); snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_description_selected : script_config_color_text_description)), script->description); } break; case 'D': /* date added */ if (script->date_added > 0) { tm = localtime (&script->date_added); strftime (str_date, sizeof (str_date), "%Y-%m-%d", tm); snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_date_selected : script_config_color_text_date)), str_date); } else num_spaces = 10; break; case 'e': /* file extension */ if (script->language >= 0) { num_spaces = max_length - weechat_utf8_strlen_screen (script_extension[script->language]); snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_extension_selected : script_config_color_text_extension)), script_extension[script->language]); } break; case 'l': /* language */ if (script->language >= 0) { num_spaces = max_length - weechat_utf8_strlen_screen (script_language[script->language]); snprintf (str_item, sizeof (str_item), "%s", script_language[script->language]); } break; case 'L': /* license */ if (script->license) { num_spaces = max_length - weechat_utf8_strlen_screen (script->license); snprintf (str_item, sizeof (str_item), "%s", script->license); } break; case 'n': /* name + extension */ if (script->name_with_extension) { num_spaces = max_length - weechat_utf8_strlen_screen (script->name_with_extension); snprintf (str_item, sizeof (str_item), "%s%s%s.%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_name_selected : script_config_color_text_name)), script->name, weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_extension_selected : script_config_color_text_extension)), script_extension[script->language]); } break; case 'N': /* name (without extension) */ if (script->name) { num_spaces = max_length - weechat_utf8_strlen_screen (script->name); snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_name_selected : script_config_color_text_name)), script->name); } break; case 'r': /* requirements */ if (script->requirements) { num_spaces = max_length - weechat_utf8_strlen_screen (script->requirements); snprintf (str_item, sizeof (str_item), "%s", script->requirements); } break; case 's': /* status */ snprintf (str_item, sizeof (str_item), "%s", script_repo_get_status_for_display (script, "*iaHrN", 0)); break; case 't': /* tags */ if (script->tags) { num_spaces = max_length - weechat_utf8_strlen_screen (script->tags); tags = weechat_string_replace (script->tags, ",", " "); if (tags) { snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_tags_selected : script_config_color_text_tags)), tags); free (tags); } } break; case 'u': /* date updated */ if (script->date_updated > 0) { tm = localtime (&script->date_updated); strftime (str_date, sizeof (str_date), "%Y-%m-%d", tm); snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_date_selected : script_config_color_text_date)), str_date); } else num_spaces = 10; break; case 'v': /* version */ if (script->version) { num_spaces = max_length - weechat_utf8_strlen_screen (script->version); snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_version_selected : script_config_color_text_version)), script->version); } break; case 'V': /* version loaded */ if (script->version_loaded) { num_spaces = max_length - weechat_utf8_strlen_screen (script->version_loaded); snprintf (str_item, sizeof (str_item), "%s%s", weechat_color ( weechat_config_string ( (line == script_buffer_selected_line) ? script_config_color_text_version_loaded_selected : script_config_color_text_version_loaded)), script->version_loaded); } break; case 'w': /* min_weechat */ if (script->min_weechat) { num_spaces = max_length - weechat_utf8_strlen_screen (script->min_weechat); snprintf (str_item, sizeof (str_item), "%s", script->min_weechat); } break; case 'W': /* max_weechat */ if (script->max_weechat) { num_spaces = max_length - weechat_utf8_strlen_screen (script->max_weechat); snprintf (str_item, sizeof (str_item), "%s", script->max_weechat); } break; case '%': /* "%%" will display a single "%" */ snprintf (str_item, sizeof (str_item), "%s%%", weechat_color (weechat_config_string (script_config_color_text_delimiters))); break; default: unknown = 1; break; } } else { snprintf (str_item, sizeof (str_item), "%s%s", weechat_color (weechat_config_string (script_config_color_text_delimiters)), utf_char); } if (!unknown) { if (str_item[0]) { strcat (str_line, str_color); strcat (str_line, str_item); } if (num_spaces > 0) { snprintf (str_format, sizeof (str_format), "%%-%ds", num_spaces); snprintf (str_item, sizeof (str_item), str_format, " "); strcat (str_line, str_item); } } ptr_col += char_size; } weechat_printf_y (script_buffer, line, "%s", str_line); }
/** * Return the full path to our SQLite database file. Must be freed. */ char * twc_sqlite_db_path() { const char *weechat_dir = weechat_info_get("weechat_dir", NULL); return weechat_string_replace("%h/tox/data.db", "%h", weechat_dir); }
void xfer_file_find_filename (struct t_xfer *xfer) { const char *weechat_home, *dir_separator; char *dir1, *dir2, *filename2; if (!XFER_IS_FILE(xfer->type)) return; dir1 = weechat_string_expand_home (weechat_config_string (xfer_config_file_download_path)); if (!dir1) return; weechat_home = weechat_info_get ("weechat_dir", ""); if (!weechat_home) { free (dir1); return; } dir2 = weechat_string_replace (dir1, "%h", weechat_home); if (!dir2) { free (dir1); return; } xfer->local_filename = malloc (strlen (dir2) + strlen (xfer->remote_nick) + strlen (xfer->filename) + 4); if (!xfer->local_filename) return; strcpy (xfer->local_filename, dir2); dir_separator = weechat_info_get("dir_separator", ""); if (dir_separator && (xfer->local_filename[strlen (xfer->local_filename) - 1] != dir_separator[0])) strcat (xfer->local_filename, dir_separator); if (weechat_config_boolean (xfer_config_file_use_nick_in_filename)) { strcat (xfer->local_filename, xfer->remote_nick); strcat (xfer->local_filename, "."); } strcat (xfer->local_filename, xfer->filename); if (dir1) free (dir1); if (dir2 ) free (dir2); /* file already exists? */ if (access (xfer->local_filename, F_OK) == 0) { if (xfer_file_resume (xfer, xfer->local_filename)) return; /* if auto rename is not set, then abort xfer */ if (!xfer_config_file_auto_rename) { xfer_close (xfer, XFER_STATUS_FAILED); xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); return; } filename2 = malloc (strlen (xfer->local_filename) + 16); if (!filename2) { xfer_close (xfer, XFER_STATUS_FAILED); xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE); return; } xfer->filename_suffix = 0; do { xfer->filename_suffix++; sprintf (filename2, "%s.%d", xfer->local_filename, xfer->filename_suffix); if (access (filename2, F_OK) == 0) { if (xfer_file_resume (xfer, filename2)) break; } else break; } while (1); free (xfer->local_filename); xfer->local_filename = strdup (filename2); free (filename2); } }