logger: fix charset of lines displayed in backlog when terminal charset is different from UTF-8 (bug #36379)

This commit is contained in:
Sebastien Helleu 2012-05-03 12:36:27 +02:00
parent 3d73805198
commit dfbe7845ae
2 changed files with 26 additions and 15 deletions

View File

@ -1,7 +1,7 @@
WeeChat ChangeLog WeeChat ChangeLog
================= =================
Sébastien Helleu <flashcode@flashtux.org> Sébastien Helleu <flashcode@flashtux.org>
v0.3.8-dev, 2012-05-02 v0.3.8-dev, 2012-05-03
Version 0.3.8 (under dev!) Version 0.3.8 (under dev!)
@ -55,6 +55,8 @@ Version 0.3.8 (under dev!)
* irc: add support of "external" SASL mechanism (task #11864) * irc: add support of "external" SASL mechanism (task #11864)
* irc: close server buffer when server is deleted * irc: close server buffer when server is deleted
* irc: add search for lower case nicks in option irc.look.nick_color_force * irc: add search for lower case nicks in option irc.look.nick_color_force
* logger: fix charset of lines displayed in backlog when terminal charset is
different from UTF-8 (bug #36379)
* logger: add colors for backlog lines and end of backlog, new options: * logger: add colors for backlog lines and end of backlog, new options:
logger.color.backlog_line and logger.color.backlog_end (task #11966) logger.color.backlog_line and logger.color.backlog_end (task #11966)
* perl: fix compilation on OS X (bug #30701) * perl: fix compilation on OS X (bug #30701)

View File

@ -914,12 +914,15 @@ logger_buffer_renamed_signal_cb (void *data, const char *signal,
void void
logger_backlog (struct t_gui_buffer *buffer, const char *filename, int lines) logger_backlog (struct t_gui_buffer *buffer, const char *filename, int lines)
{ {
const char *charset;
struct t_logger_line *last_lines, *ptr_lines; struct t_logger_line *last_lines, *ptr_lines;
char *pos_message, *pos_tab, *error; char *pos_message, *pos_tab, *error, *message;
time_t datetime, time_now; time_t datetime, time_now;
struct tm tm_line; struct tm tm_line;
int num_lines; int num_lines;
charset = weechat_info_get ("charset_terminal", "");
weechat_buffer_set (buffer, "print_hooks_enabled", "0"); weechat_buffer_set (buffer, "print_hooks_enabled", "0");
num_lines = 0; num_lines = 0;
last_lines = logger_tail_file (filename, lines); last_lines = logger_tail_file (filename, lines);
@ -949,19 +952,25 @@ logger_backlog (struct t_gui_buffer *buffer, const char *filename, int lines)
} }
pos_message = (pos_message && (datetime != 0)) ? pos_message = (pos_message && (datetime != 0)) ?
pos_message + 1 : ptr_lines->data; pos_message + 1 : ptr_lines->data;
pos_tab = strchr (pos_message, '\t'); message = (charset) ?
if (pos_tab) weechat_iconv_to_internal (charset, pos_message) : strdup (pos_message);
pos_tab[0] = '\0'; if (message)
weechat_printf_date_tags (buffer, datetime, {
"no_highlight,notify_none", pos_tab = strchr (message, '\t');
"%s%s%s%s%s", if (pos_tab)
weechat_color (weechat_config_string (logger_config_color_backlog_line)), pos_tab[0] = '\0';
pos_message, weechat_printf_date_tags (buffer, datetime,
(pos_tab) ? "\t" : "", "no_highlight,notify_none",
(pos_tab) ? weechat_color (weechat_config_string (logger_config_color_backlog_line)) : "", "%s%s%s%s%s",
(pos_tab) ? pos_tab + 1 : ""); weechat_color (weechat_config_string (logger_config_color_backlog_line)),
if (pos_tab) message,
pos_tab[0] = '\t'; (pos_tab) ? "\t" : "",
(pos_tab) ? weechat_color (weechat_config_string (logger_config_color_backlog_line)) : "",
(pos_tab) ? pos_tab + 1 : "");
if (pos_tab)
pos_tab[0] = '\t';
free (message);
}
num_lines++; num_lines++;
ptr_lines = ptr_lines->next_line; ptr_lines = ptr_lines->next_line;
} }