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

Option irc.look.one_server_buffer reintroduced (all IRC servers in one buffer)

This commit is contained in:
Sebastien Helleu
2008-09-24 18:59:24 +02:00
parent 6555ff5c7b
commit 0fd3f8b6eb
18 changed files with 800 additions and 504 deletions
+108 -102
View File
@@ -28,9 +28,14 @@
#include "irc-buffer.h"
#include "irc-channel.h"
#include "irc-command.h"
#include "irc-config.h"
#include "irc-server.h"
/* buffer for all servers (if using one buffer for all servers) */
struct t_gui_buffer *irc_buffer_servers = NULL;
/*
* irc_buffer_get_server_channel: get IRC server and channel pointers with a
* buffer pointer
@@ -44,7 +49,7 @@ irc_buffer_get_server_channel (struct t_gui_buffer *buffer,
{
struct t_irc_server *ptr_server;
struct t_irc_channel *ptr_channel;
if (server)
*server = NULL;
if (channel)
@@ -60,7 +65,12 @@ irc_buffer_get_server_channel (struct t_gui_buffer *buffer,
if (ptr_server->buffer == buffer)
{
if (server)
*server = ptr_server;
{
if (weechat_config_boolean (irc_config_look_one_server_buffer))
*server = irc_current_server;
else
*server = ptr_server;
}
return;
}
@@ -104,132 +114,123 @@ irc_buffer_build_name (const char *server, const char *channel)
return buffer;
}
/*
* irc_buffer_get_server_prefix: return prefix, with server name if server
* buffers are displayed in only one buffer
*/
char *
irc_buffer_get_server_prefix (struct t_irc_server *server, char *prefix_code)
{
static char buf[256];
char *prefix;
prefix = (prefix_code && prefix_code[0]) ?
weechat_prefix (prefix_code) : NULL;
if (weechat_config_boolean (irc_config_look_one_server_buffer) && server)
{
snprintf (buf, sizeof (buf), "%s%s[%s%s%s]%s ",
(prefix) ? prefix : "",
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_CHAT_SERVER,
server->name,
IRC_COLOR_CHAT_DELIMITERS,
IRC_COLOR_CHAT);
}
else
{
snprintf (buf, sizeof (buf), "%s",
(prefix) ? prefix : "");
}
return buf;
}
/*
* irc_buffer_merge_servers: merge server buffers in one buffer
*/
/*
void
irc_buffer_merge_servers (t_gui_window *window)
irc_buffer_merge_servers ()
{
t_gui_buffer *ptr_buffer_server, *ptr_buffer, *new_ptr_buffer;
t_irc_server *ptr_server;
struct t_irc_server *ptr_server;
struct t_gui_buffer *ptr_buffer;
int number, number_selected;
// new server buffer is the first server buffer found
for (ptr_buffer_server = gui_buffers; ptr_buffer_server;
ptr_buffer_server = ptr_buffer_server->next_buffer)
irc_buffer_servers = NULL;
irc_current_server = NULL;
/* choose server buffer with lower number (should be first created) */
number_selected = -1;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if ((ptr_buffer_server->protocol == irc_protocol)
&& (IRC_BUFFER_SERVER(ptr_buffer_server))
&& (!IRC_BUFFER_CHANNEL(ptr_buffer_server)))
break;
}
// no server buffer found
if (!ptr_buffer_server)
return;
ptr_buffer = gui_buffers;
while (ptr_buffer)
{
if ((ptr_buffer->protocol == irc_protocol)
&& (ptr_buffer != ptr_buffer_server)
&& (IRC_BUFFER_SERVER(ptr_buffer))
&& (!IRC_BUFFER_CHANNEL(ptr_buffer)))
if (ptr_server->buffer)
{
ptr_server = IRC_BUFFER_SERVER(ptr_buffer);
// add (by pointer artefact) lines from buffer found to server buffer
if (ptr_buffer->lines)
number = weechat_buffer_get_integer (ptr_server->buffer, "number");
if ((number_selected == -1) || (number < number_selected))
{
if (ptr_buffer_server->lines)
{
ptr_buffer->lines->prev_line =
ptr_buffer_server->last_line;
ptr_buffer_server->last_line->next_line =
ptr_buffer->lines;
ptr_buffer_server->last_line =
ptr_buffer->last_line;
}
else
{
ptr_buffer_server->lines = ptr_buffer->lines;
ptr_buffer_server->last_line = ptr_buffer->last_line;
}
irc_buffer_servers = ptr_server->buffer;
irc_current_server = ptr_server;
number_selected = number;
}
// free buffer but not lines, because they're now used by
// our unique server buffer
new_ptr_buffer = ptr_buffer->next_buffer;
ptr_buffer->lines = NULL;
gui_buffer_free (ptr_buffer, 1);
ptr_buffer = new_ptr_buffer;
// asociate server with new server buffer
ptr_server->buffer = ptr_buffer_server;
}
else
ptr_buffer = ptr_buffer->next_buffer;
}
IRC_BUFFER_ALL_SERVERS(ptr_buffer_server) = 1;
gui_window_redraw_buffer (window->buffer);
if (irc_buffer_servers)
{
weechat_buffer_set (irc_buffer_servers, "name", "servers");
weechat_buffer_set (irc_buffer_servers, "key_bind_meta-s",
"/command irc /server switch");
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (ptr_server->buffer
&& (ptr_server->buffer != irc_buffer_servers))
{
ptr_buffer = ptr_server->buffer;
ptr_server->buffer = irc_buffer_servers;
weechat_buffer_close (ptr_buffer, 1);
}
}
}
}
*/
/*
* irc_buffer_split_server: split the server buffer into many buffers (one by server)
*/
/*
void
irc_buffer_split_server (t_gui_window *window)
irc_buffer_split_server ()
{
t_gui_buffer *ptr_buffer;
t_irc_server *ptr_server;
char *log_filename;
struct t_irc_server *ptr_server;
char buffer_name[256];
ptr_buffer = gui_buffer_servers_search ();
if (ptr_buffer)
if (irc_buffer_servers)
{
if (IRC_BUFFER_SERVER(ptr_buffer))
{
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (ptr_server->buffer
&& (ptr_server != IRC_BUFFER_SERVER(ptr_buffer))
&& (ptr_server->buffer == ptr_buffer))
{
ptr_server->buffer = NULL;
log_filename = irc_log_get_filename (ptr_server->name,
NULL,
0);
gui_buffer_new (window, 0,
ptr_server->name,
ptr_server->name,
GUI_BUFFER_ATTRIB_TEXT |
GUI_BUFFER_ATTRIB_INPUT |
GUI_BUFFER_ATTRIB_NICKS,
irc_protocol,
irc_buffer_data_create (ptr_server),
&irc_buffer_data_free,
GUI_NOTIFY_LEVEL_DEFAULT,
NULL, ptr_server->nick,
irc_cfg_log_auto_server, log_filename,
0);
if (log_filename)
free (log_filename);
}
}
}
IRC_BUFFER_ALL_SERVERS(ptr_buffer) = 0;
gui_status_draw (window->buffer, 1);
gui_input_draw (window->buffer, 1);
weechat_buffer_set (irc_buffer_servers, "key_unbind_meta-s", NULL);
}
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
if (ptr_server->buffer && (ptr_server != irc_current_server))
{
irc_server_create_buffer (ptr_server, 0);
}
}
if (irc_current_server)
{
snprintf (buffer_name, sizeof (buffer_name),
"server.%s", irc_current_server->name);
weechat_buffer_set (irc_current_server->buffer, "name", buffer_name);
}
irc_buffer_servers = NULL;
irc_current_server = NULL;
}
*/
/*
* irc_buffer_close_cb: callback called when a buffer is closed
@@ -271,6 +272,11 @@ irc_buffer_close_cb (void *data, struct t_gui_buffer *buffer)
ptr_server->buffer = NULL;
}
}
if (irc_buffer_servers == buffer)
irc_buffer_servers = NULL;
if (ptr_server && (irc_current_server == ptr_server))
irc_current_server = NULL;
return WEECHAT_RC_OK;
}