1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-29 22:36:38 +02:00

Many improvements on IRC raw buffer

New features:
- key alt-j alt-r is reintroduced to open IRC raw buffer
- command "/server raw" opens IRC raw buffer
- new option irc.look.raw_messages, which is number of lines to keep in memory
to display when user will open raw buffer (to see last messages received before
opening raw buffer)
This commit is contained in:
Sebastien Helleu
2009-03-19 17:25:36 +01:00
parent cefb8a50f2
commit a0f6b6eda6
22 changed files with 475 additions and 199 deletions
-108
View File
@@ -28,114 +28,6 @@
#include "irc-server.h"
struct t_gui_buffer *irc_debug_buffer = NULL;
/*
* irc_debug_buffer_close_cb: callback called when IRC debug buffer is closed
*/
int
irc_debug_buffer_close_cb (void *data, struct t_gui_buffer *buffer)
{
/* make C compiler happy */
(void) data;
(void) buffer;
irc_debug_buffer = NULL;
return WEECHAT_RC_OK;
}
/*
* irc_debug_printf: print a message on IRC debug buffer
*/
void
irc_debug_printf (struct t_irc_server *server, int send, int modified,
const char *message)
{
char *buf, *buf2;
const unsigned char *ptr_buf;
const char *hexa = "0123456789ABCDEF";
int pos_buf, pos_buf2, char_size, i;
if (!weechat_irc_plugin->debug || !message)
return;
if (!irc_debug_buffer)
{
irc_debug_buffer = weechat_buffer_search ("irc", IRC_DEBUG_BUFFER_NAME);
if (!irc_debug_buffer)
{
irc_debug_buffer = weechat_buffer_new (IRC_DEBUG_BUFFER_NAME,
NULL, NULL,
&irc_debug_buffer_close_cb, NULL);
/* failed to create buffer ? then return */
if (!irc_debug_buffer)
return;
weechat_buffer_set (irc_debug_buffer,
"title", _("IRC debug messages"));
weechat_buffer_set (irc_debug_buffer, "short_name", IRC_DEBUG_BUFFER_NAME);
weechat_buffer_set (irc_debug_buffer, "localvar_set_type", "debug");
weechat_buffer_set (irc_debug_buffer, "localvar_set_server", IRC_DEBUG_BUFFER_NAME);
weechat_buffer_set (irc_debug_buffer, "localvar_set_channel", IRC_DEBUG_BUFFER_NAME);
weechat_buffer_set (irc_debug_buffer, "localvar_set_no_log", "1");
/* disabled all highlights on this debug buffer */
weechat_buffer_set (irc_debug_buffer, "highlight_words", "-");
}
}
buf = weechat_iconv_to_internal (NULL, message);
buf2 = malloc ((strlen (buf) * 3) + 1);
if (buf2)
{
ptr_buf = (buf) ? (unsigned char *)buf : (unsigned char *)message;
pos_buf = 0;
pos_buf2 = 0;
while (ptr_buf[pos_buf])
{
if (ptr_buf[pos_buf] < 32)
{
buf2[pos_buf2++] = '\\';
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';
}
weechat_printf (irc_debug_buffer,
"%s%s%s%s%s\t%s",
(server) ? weechat_color ("chat_server") : "",
(server) ? server->name : "",
(server) ? " " : "",
(send) ?
weechat_color ("chat_prefix_quit") :
weechat_color ("chat_prefix_join"),
(send) ?
((modified) ? IRC_DEBUG_PREFIX_SEND_MOD : IRC_DEBUG_PREFIX_SEND) :
((modified) ? IRC_DEBUG_PREFIX_RECV_MOD : IRC_DEBUG_PREFIX_RECV),
(buf2) ? buf2 : ((buf) ? buf : message));
if (buf)
free (buf);
if (buf2)
free (buf2);
}
/*
* irc_debug_signal_debug_dump_cb: dump IRC data in WeeChat log file
*/