mirror of
https://github.com/weechat/weechat.git
synced 2026-07-10 19:53:13 +02:00
Added server/channel arg to /buffer command for jumping to buffer
This commit is contained in:
+23
-4
@@ -45,12 +45,13 @@ t_weechat_command weechat_commands[] =
|
||||
"or IRC command, without first '/')\n" "arguments: arguments for command"),
|
||||
0, MAX_ARGS, NULL, weechat_cmd_alias },
|
||||
{ "buffer", N_("manage buffers"),
|
||||
N_("[action | number]"),
|
||||
N_("[action | number | [[server] [channel]]]"),
|
||||
N_("action: action to do:\n"
|
||||
" move: move buffer in the list (may be relative, for example -1)\n"
|
||||
" close: close buffer (for channel: same as /part without part message)\n"
|
||||
" list: list opened buffers (no parameter implies this list)\n"
|
||||
" notify: set notify level for buffer (0=never, 1=highlight, 2=1+msg, 3=2+join/part)\n"
|
||||
"server,channel: jump to buffer by server and/or channel name\n"
|
||||
"number: jump to buffer by number"),
|
||||
0, MAX_ARGS, weechat_cmd_buffer, NULL },
|
||||
{ "clear", N_("clear window(s)"),
|
||||
@@ -143,7 +144,7 @@ t_weechat_command weechat_commands[] =
|
||||
"Without argument, /unignore command lists all defined ignore."),
|
||||
0, 4, weechat_cmd_unignore, NULL },
|
||||
{ "uptime", N_("show WeeChat uptime"),
|
||||
N_("-o"),
|
||||
N_("[-o]"),
|
||||
N_("-o: send uptime on current channel as an IRC message"),
|
||||
0, 1, weechat_cmd_uptime, NULL },
|
||||
{ "window", N_("manage windows"),
|
||||
@@ -1186,7 +1187,7 @@ weechat_cmd_buffer (int argc, char **argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* jump to buffer by number */
|
||||
/* jump to buffer by number or server/channel name */
|
||||
|
||||
if (argv[0][0] == '-')
|
||||
{
|
||||
@@ -1219,11 +1220,29 @@ weechat_cmd_buffer (int argc, char **argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* absolute jump by number */
|
||||
/* absolute jump by number, or by server/channel name */
|
||||
error = NULL;
|
||||
number = strtol (argv[0], &error, 10);
|
||||
if ((error) && (error[0] == '\0'))
|
||||
gui_buffer_switch_by_number (gui_current_window, (int) number);
|
||||
else
|
||||
{
|
||||
ptr_buffer = NULL;
|
||||
if (argc > 1)
|
||||
ptr_buffer = gui_buffer_search (argv[0], argv[1]);
|
||||
else
|
||||
{
|
||||
if (string_is_channel (argv[0]))
|
||||
ptr_buffer = gui_buffer_search (NULL, argv[0]);
|
||||
else
|
||||
ptr_buffer = gui_buffer_search (argv[0], NULL);
|
||||
}
|
||||
if (ptr_buffer)
|
||||
{
|
||||
gui_switch_to_buffer (gui_current_window, ptr_buffer);
|
||||
gui_redraw_buffer (ptr_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -191,7 +191,7 @@ t_config_option weechat_options_look[] =
|
||||
{ "look_nick_completion_ignore", N_("chars ignored for nick completion"),
|
||||
N_("chars ignored for nick completion"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"[]-", NULL, NULL, &cfg_look_nick_completion_ignore, config_change_noop },
|
||||
"[]-^", NULL, NULL, &cfg_look_nick_completion_ignore, config_change_noop },
|
||||
{ "look_infobar", N_("enable info bar"),
|
||||
N_("enable info bar"),
|
||||
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
|
||||
|
||||
@@ -264,6 +264,63 @@ gui_window_new (t_gui_window *parent, int x, int y, int width, int height,
|
||||
return new_window;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_search: search a buffer by server and channel name
|
||||
*/
|
||||
|
||||
t_gui_buffer *
|
||||
gui_buffer_search (char *server, char *channel)
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
t_irc_channel *ptr_channel;
|
||||
t_gui_buffer *ptr_buffer;
|
||||
|
||||
ptr_server = NULL;
|
||||
ptr_channel = NULL;
|
||||
ptr_buffer = NULL;
|
||||
|
||||
/* nothing given => print on current buffer */
|
||||
if ((!server || !server[0]) && (!channel || !channel[0]))
|
||||
ptr_buffer = gui_current_window->buffer;
|
||||
else
|
||||
{
|
||||
if (server && server[0])
|
||||
{
|
||||
ptr_server = server_search (server);
|
||||
if (!ptr_server)
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr_server = SERVER(gui_current_window->buffer);
|
||||
if (!ptr_server)
|
||||
ptr_server = SERVER(gui_buffers);
|
||||
}
|
||||
|
||||
if (channel && channel[0])
|
||||
{
|
||||
if (ptr_server)
|
||||
{
|
||||
ptr_channel = channel_search (ptr_server, channel);
|
||||
if (ptr_channel)
|
||||
ptr_buffer = ptr_channel->buffer;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ptr_server)
|
||||
ptr_buffer = ptr_server->buffer;
|
||||
else
|
||||
ptr_buffer = gui_current_window->buffer;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ptr_buffer)
|
||||
return NULL;
|
||||
|
||||
return (ptr_buffer->dcc) ? gui_buffers : ptr_buffer;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_servers_search: search servers buffer
|
||||
* (when same buffer is used for all servers)
|
||||
|
||||
@@ -401,6 +401,7 @@ extern int gui_window_tree_init (t_gui_window *);
|
||||
extern void gui_window_tree_node_to_leaf (t_gui_window_tree *, t_gui_window *);
|
||||
extern void gui_window_tree_free (t_gui_window_tree **);
|
||||
extern t_gui_window *gui_window_new (t_gui_window *, int, int, int, int, int, int);
|
||||
extern t_gui_buffer *gui_buffer_search (char *, char *);
|
||||
extern t_gui_buffer *gui_buffer_new (t_gui_window *, void *, void *, int, int);
|
||||
extern void gui_buffer_clear (t_gui_buffer *);
|
||||
extern void gui_buffer_clear_all ();
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "../common/command.h"
|
||||
#include "../common/weeconfig.h"
|
||||
#include "../irc/irc.h"
|
||||
#include "../gui/gui.h"
|
||||
|
||||
|
||||
/*
|
||||
@@ -165,7 +166,7 @@ weechat_plugin_printf (t_weechat_plugin *plugin,
|
||||
if (!plugin || !message)
|
||||
return;
|
||||
|
||||
ptr_buffer = plugin_find_buffer (server, channel);
|
||||
ptr_buffer = gui_buffer_search (server, channel);
|
||||
va_start (argptr, message);
|
||||
vsnprintf (buf, sizeof (buf) - 1, message, argptr);
|
||||
va_end (argptr);
|
||||
|
||||
@@ -47,63 +47,6 @@ t_weechat_plugin *weechat_plugins = NULL;
|
||||
t_weechat_plugin *last_weechat_plugin = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* plugin_find_buffer: find a buffer for text display
|
||||
*/
|
||||
|
||||
t_gui_buffer *
|
||||
plugin_find_buffer (char *server, char *channel)
|
||||
{
|
||||
t_irc_server *ptr_server;
|
||||
t_irc_channel *ptr_channel;
|
||||
t_gui_buffer *ptr_buffer;
|
||||
|
||||
ptr_server = NULL;
|
||||
ptr_channel = NULL;
|
||||
ptr_buffer = NULL;
|
||||
|
||||
/* nothing given => print on current buffer */
|
||||
if ((!server || !server[0]) && (!channel || !channel[0]))
|
||||
ptr_buffer = gui_current_window->buffer;
|
||||
else
|
||||
{
|
||||
if (server && server[0])
|
||||
{
|
||||
ptr_server = server_search (server);
|
||||
if (!ptr_server)
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr_server = SERVER(gui_current_window->buffer);
|
||||
if (!ptr_server)
|
||||
ptr_server = SERVER(gui_buffers);
|
||||
}
|
||||
|
||||
if (channel && channel[0])
|
||||
{
|
||||
if (ptr_server)
|
||||
{
|
||||
ptr_channel = channel_search (ptr_server, channel);
|
||||
if (ptr_channel)
|
||||
ptr_buffer = ptr_channel->buffer;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ptr_server)
|
||||
ptr_buffer = ptr_server->buffer;
|
||||
else
|
||||
ptr_buffer = gui_current_window->buffer;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ptr_buffer)
|
||||
return NULL;
|
||||
|
||||
return (ptr_buffer->dcc) ? gui_buffers : ptr_buffer;
|
||||
}
|
||||
|
||||
/*
|
||||
* plugin_find_server_channel: find server/channel for command execution
|
||||
*/
|
||||
|
||||
@@ -31,7 +31,6 @@ typedef void (t_weechat_end_func) (t_weechat_plugin *);
|
||||
extern t_weechat_plugin *weechat_plugins;
|
||||
extern t_weechat_plugin *last_weechat_plugin;
|
||||
|
||||
extern t_gui_buffer *plugin_find_buffer (char *, char *);
|
||||
extern void plugin_find_server_channel (char *, char *,
|
||||
t_irc_server **, t_irc_channel **);
|
||||
extern void plugin_exec_on_files (t_weechat_plugin *, char *,
|
||||
|
||||
Reference in New Issue
Block a user