diff options
author | Timo Sirainen <cras@irssi.org> | 2001-08-13 13:51:49 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2001-08-13 13:51:49 +0000 |
commit | 4e3b1bba6290a4e5efb19a25b45b251628edff8d (patch) | |
tree | 6b320e804167c6bfe743c79f60db9b31c6d1a828 /src/fe-common/core | |
parent | 08b906202805f0cb6358e1ab0c057eaa5d8082dc (diff) | |
download | irssi-4e3b1bba6290a4e5efb19a25b45b251628edff8d.zip |
/LOG OPEN -color, /SET awaylog_colors - specifies that the color codes
should be written to log file.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1742 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-common/core')
-rw-r--r-- | src/fe-common/core/fe-log.c | 54 | ||||
-rw-r--r-- | src/fe-common/core/formats.c | 24 |
2 files changed, 60 insertions, 18 deletions
diff --git a/src/fe-common/core/fe-log.c b/src/fe-common/core/fe-log.c index eb7f9bec..0ee94a01 100644 --- a/src/fe-common/core/fe-log.c +++ b/src/fe-common/core/fe-log.c @@ -28,6 +28,7 @@ #include "log.h" #include "special-vars.h" #include "settings.h" +#include "lib-config/iconfig.h" #include "fe-windows.h" #include "window-items.h" @@ -48,6 +49,11 @@ static THEME_REC *log_theme; static int skip_next_printtext; static const char *log_theme_name; +static char *log_colorizer_strip(const char *str) +{ + return strip_codes(str); +} + static void log_add_targets(LOG_REC *log, const char *targets, const char *tag) { char **tmp, **items; @@ -64,7 +70,8 @@ static void log_add_targets(LOG_REC *log, const char *targets, const char *tag) } /* SYNTAX: LOG OPEN [-noopen] [-autoopen] [-window] [-<server tag>] - [-targets <targets>] <fname> [<levels>] */ + [-targets <targets>] [-mirccolors | -ansicolors] + <fname> [<levels>] */ static void cmd_log_open(const char *data) { SERVER_REC *server; @@ -102,6 +109,9 @@ static void cmd_log_open(const char *data) if (g_hash_table_lookup(optlist, "autoopen")) log->autoopen = TRUE; + if (g_hash_table_lookup(optlist, "colors") == NULL) + log->colorizer = log_colorizer_strip; + log_update(log); if (log->handle == -1 && g_hash_table_lookup(optlist, "noopen") == NULL) { @@ -448,7 +458,9 @@ static void log_single_line(WINDOW_REC *window, void *server, ltoa(windownum, window->refnum); log = logs_find_item(LOG_ITEM_WINDOW_REFNUM, windownum, NULL, NULL); - if (log != NULL) log_write_rec(log, text, level); + if (log != NULL) { + log_write_rec(log, text, level); + } if (target == NULL) log_file_write(server, NULL, level, text, FALSE); @@ -492,13 +504,13 @@ static void sig_printtext(TEXT_DEST_REC *dest, const char *text, } log_line(dest->window, dest->server, dest->target, - dest->level, stripped); + dest->level, text); } static void sig_print_format(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest, void *formatnum, char **args) { - char *str, *stripped, *linestart, *tmp; + char *str, *linestart, *tmp; if (log_theme == NULL) { /* theme isn't loaded for some reason (/reload destroys it), @@ -523,10 +535,8 @@ static void sig_print_format(THEME_REC *theme, const char *module, g_free(tmp); /* strip colors from text, log it. */ - stripped = strip_codes(str); log_line(dest->window, dest->server, dest->target, - dest->level, stripped); - g_free(stripped); + dest->level, str); } g_free(str); @@ -584,6 +594,27 @@ static void sig_log_create_failed(LOG_REC *log) TXT_LOG_CREATE_FAILED, log->fname, g_strerror(errno)); } +static void sig_log_new(LOG_REC *log) +{ + if (!settings_get_bool("awaylog_colors") && + strcmp(log->fname, settings_get_str("awaylog_file")) == 0) + log->colorizer = log_colorizer_strip; +} + +static void sig_log_config_read(LOG_REC *log, CONFIG_NODE *node) +{ + if (!config_node_get_bool(node, "colors", FALSE)) + log->colorizer = log_colorizer_strip; +} + +static void sig_log_config_save(LOG_REC *log, CONFIG_NODE *node) +{ + if (log->colorizer == NULL) + iconfig_node_set_bool(node, "colors", TRUE); + else + iconfig_node_set_str(node, "colors", NULL); +} + static void sig_awaylog_show(LOG_REC *log, gpointer pmsgs, gpointer pfilepos) { char *str; @@ -638,6 +669,7 @@ void fe_log_init(void) autoremove_tag = g_timeout_add(60000, (GSourceFunc) sig_autoremove, NULL); skip_next_printtext = FALSE; + settings_add_bool("log", "awaylog_colors", TRUE); settings_add_str("log", "autolog_path", "~/irclogs/$tag/$0.log"); settings_add_str("log", "autolog_level", "all -crap -clientcrap -ctcps"); settings_add_bool("log", "autolog", FALSE); @@ -660,11 +692,14 @@ void fe_log_init(void) signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected); signal_add("log locked", (SIGNAL_FUNC) sig_log_locked); signal_add("log create failed", (SIGNAL_FUNC) sig_log_create_failed); + signal_add("log new", (SIGNAL_FUNC) sig_log_new); + signal_add("log config read", (SIGNAL_FUNC) sig_log_config_read); + signal_add("log config save", (SIGNAL_FUNC) sig_log_config_save); signal_add("awaylog show", (SIGNAL_FUNC) sig_awaylog_show); signal_add("theme destroyed", (SIGNAL_FUNC) sig_theme_destroyed); signal_add("setup changed", (SIGNAL_FUNC) read_settings); - command_set_options("log open", "noopen autoopen -targets window"); + command_set_options("log open", "noopen autoopen -targets window colors"); } void fe_log_deinit(void) @@ -686,6 +721,9 @@ void fe_log_deinit(void) signal_remove("server disconnected", (SIGNAL_FUNC) sig_server_disconnected); signal_remove("log locked", (SIGNAL_FUNC) sig_log_locked); signal_remove("log create failed", (SIGNAL_FUNC) sig_log_create_failed); + signal_remove("log new", (SIGNAL_FUNC) sig_log_new); + signal_remove("log config read", (SIGNAL_FUNC) sig_log_config_read); + signal_remove("log config save", (SIGNAL_FUNC) sig_log_config_save); signal_remove("awaylog show", (SIGNAL_FUNC) sig_awaylog_show); signal_remove("theme destroyed", (SIGNAL_FUNC) sig_theme_destroyed); signal_remove("setup changed", (SIGNAL_FUNC) read_settings); diff --git a/src/fe-common/core/formats.c b/src/fe-common/core/formats.c index d5b9f3a4..cdc064d8 100644 --- a/src/fe-common/core/formats.c +++ b/src/fe-common/core/formats.c @@ -653,11 +653,11 @@ void format_newline(WINDOW_REC *window) } /* parse ANSI color string */ -static char *get_ansi_color(THEME_REC *theme, char *str, - int *fg_ret, int *bg_ret, int *flags_ret) +static const char *get_ansi_color(THEME_REC *theme, const char *str, + int *fg_ret, int *bg_ret, int *flags_ret) { static char ansitab[8] = { 0, 4, 2, 6, 1, 5, 3, 7 }; - char *start; + const char *start; int fg, bg, flags, num; if (*str != '[') @@ -844,7 +844,10 @@ char *strip_codes(const char *input) p += 2; continue; } - } + } + + if (*p == 27 && p[1] != '\0') + p = get_ansi_color(current_theme, p, NULL, NULL, NULL); if (!IS_COLOR_CODE(*p)) *out++ = *p; @@ -975,12 +978,13 @@ void format_send_to_gui(TEXT_DEST_REC *dest, const char *text) break; case 27: /* ansi color code */ - ptr = get_ansi_color(dest->window == NULL || dest->window->theme == NULL ? - current_theme : dest->window->theme, - ptr, - hide_text_style ? NULL : &fgcolor, - hide_text_style ? NULL : &bgcolor, - hide_text_style ? NULL : &flags); + ptr = (char *) + get_ansi_color(dest->window == NULL || dest->window->theme == NULL ? + current_theme : dest->window->theme, + ptr, + hide_text_style ? NULL : &fgcolor, + hide_text_style ? NULL : &bgcolor, + hide_text_style ? NULL : &flags); break; } |