summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2006-02-20 17:01:18 +0000
committerSebastien Helleu <flashcode@flashtux.org>2006-02-20 17:01:18 +0000
commit9373a7a47e4711e8db0549cec49da19db45330ae (patch)
tree5940281d9c986998fe96daebbca9fd04fcf1f589 /src
parente0c97562a596bcfde406fb26dbc8f9d5f0cde111 (diff)
downloadweechat-9373a7a47e4711e8db0549cec49da19db45330ae.zip
Added new plugin API function: remove_infobar
Diffstat (limited to 'src')
-rw-r--r--src/gui/gui-common.c15
-rw-r--r--src/gui/gui.h3
-rw-r--r--src/plugins/plugins-interface.c23
-rw-r--r--src/plugins/plugins.c1
-rw-r--r--src/plugins/scripts/lua/weechat-lua.c34
-rw-r--r--src/plugins/scripts/perl/weechat-perl.c26
-rw-r--r--src/plugins/scripts/python/weechat-python.c36
-rw-r--r--src/plugins/scripts/ruby/weechat-ruby.c39
-rw-r--r--src/plugins/weechat-plugin.h2
9 files changed, 176 insertions, 3 deletions
diff --git a/src/gui/gui-common.c b/src/gui/gui-common.c
index 52545c3ac..719ad340a 100644
--- a/src/gui/gui-common.c
+++ b/src/gui/gui-common.c
@@ -1103,12 +1103,10 @@ gui_infobar_printf_from_buffer (t_gui_buffer *buffer, int time_displayed,
buf2 = (char *)gui_color_decode ((unsigned char *)buf, 0);
- weechat_log_printf ("avant decodage: %s\n", buf);
if (buf2)
buf3 = channel_iconv_decode (SERVER(buffer), CHANNEL(buffer), buf2);
else
buf3 = NULL;
- weechat_log_printf ("apres decodage: %s\n", buf3);
gui_infobar_printf (time_displayed, color,
"%s%s", message1,
@@ -1140,6 +1138,19 @@ gui_infobar_remove ()
}
/*
+ * gui_infobar_remove_all: remove last displayed message in infobar
+ */
+
+void
+gui_infobar_remove_all ()
+{
+ while (gui_infobar)
+ {
+ gui_infobar_remove ();
+ }
+}
+
+/*
* gui_optimize_input_buffer_size: optimize input buffer size by adding
* or deleting data block (predefined size)
*/
diff --git a/src/gui/gui.h b/src/gui/gui.h
index f05ee22f6..e9fa66dc4 100644
--- a/src/gui/gui.h
+++ b/src/gui/gui.h
@@ -408,10 +408,11 @@ extern t_gui_buffer *gui_get_dcc_buffer (t_gui_window *);
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 ();
+extern void gui_window_free (t_gui_window *);
extern void gui_infobar_printf (int, int, char *, ...);
extern void gui_infobar_printf_from_buffer (t_gui_buffer *, int, int, char *, char *, ...);
-extern void gui_window_free (t_gui_window *);
extern void gui_infobar_remove ();
+extern void gui_infobar_remove_all ();
extern void gui_buffer_free (t_gui_buffer *, int);
extern t_gui_line *gui_line_new (t_gui_buffer *);
extern int gui_word_strlen (t_gui_window *, char *);
diff --git a/src/plugins/plugins-interface.c b/src/plugins/plugins-interface.c
index e7f88712f..ab2d677bc 100644
--- a/src/plugins/plugins-interface.c
+++ b/src/plugins/plugins-interface.c
@@ -215,6 +215,29 @@ weechat_plugin_print_infobar (t_weechat_plugin *plugin, int time_displayed, char
}
/*
+ * weechat_plugin_infobar_remove: remove message(s) in infobar
+ */
+
+void
+weechat_plugin_infobar_remove (t_weechat_plugin *plugin, int how_many)
+{
+ if (!plugin)
+ return;
+
+ if (how_many <= 0)
+ gui_infobar_remove_all ();
+ else
+ {
+ while ((gui_infobar) && (how_many > 0))
+ {
+ gui_infobar_remove ();
+ how_many--;
+ }
+ }
+ gui_draw_buffer_infobar (gui_current_window->buffer, 1);
+}
+
+/*
* weechat_plugin_log: add a message on logs
*/
diff --git a/src/plugins/plugins.c b/src/plugins/plugins.c
index 440034650..305a64af3 100644
--- a/src/plugins/plugins.c
+++ b/src/plugins/plugins.c
@@ -731,6 +731,7 @@ plugin_load (char *filename)
new_plugin->print = &weechat_plugin_print;
new_plugin->print_server = &weechat_plugin_print_server;
new_plugin->print_infobar = &weechat_plugin_print_infobar;
+ new_plugin->infobar_remove = &weechat_plugin_infobar_remove;
new_plugin->log = &weechat_plugin_log;
new_plugin->exec_command = &weechat_plugin_exec_command;
new_plugin->get_info = &weechat_plugin_get_info;
diff --git a/src/plugins/scripts/lua/weechat-lua.c b/src/plugins/scripts/lua/weechat-lua.c
index bd85daf68..798433c12 100644
--- a/src/plugins/scripts/lua/weechat-lua.c
+++ b/src/plugins/scripts/lua/weechat-lua.c
@@ -273,6 +273,39 @@ weechat_lua_print_infobar (lua_State *L)
}
/*
+ * weechat_lua_remove_infobar: remove message(s) in infobar
+ */
+
+static int
+weechat_lua_remove_infobar (lua_State *L)
+{
+ int n, how_many;
+ /* make gcc happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ lua_plugin->print_server (lua_plugin,
+ "Lua error: unable to remove infobar message(s), "
+ "script not initialized");
+ lua_pushnumber (lua_current_interpreter, 0);
+ return 1;
+ }
+
+ how_many = 0;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n == 1)
+ how_many = lua_tonumber (lua_current_interpreter, -1);
+
+ lua_plugin->infobar_remove (lua_plugin, how_many);
+
+ lua_pushnumber (lua_current_interpreter, 1);
+ return 1;
+}
+
+/*
* weechat_lua_print: log message in server/channel (current or specified ones)
*/
@@ -1365,6 +1398,7 @@ const struct luaL_reg weechat_lua_funcs[] = {
{ "register", weechat_lua_register},
{ "print", weechat_lua_print},
{ "print_infobar", weechat_lua_print_infobar},
+ { "remove_infobar", weechat_lua_remove_infobar},
{ "log", weechat_lua_log},
{ "command", weechat_lua_command},
{ "add_message_handler", weechat_lua_add_message_handler},
diff --git a/src/plugins/scripts/perl/weechat-perl.c b/src/plugins/scripts/perl/weechat-perl.c
index d6eaa27f4..f8c581480 100644
--- a/src/plugins/scripts/perl/weechat-perl.c
+++ b/src/plugins/scripts/perl/weechat-perl.c
@@ -337,6 +337,31 @@ static XS (XS_weechat_print_infobar)
}
/*
+ * weechat::remove_infobar: remove message(s) from infobar
+ */
+
+static XS (XS_weechat_remove_infobar)
+{
+ dXSARGS;
+
+ /* make gcc happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ perl_plugin->print_server (perl_plugin,
+ "Perl error: unable to remove infobar message(s), "
+ "script not initialized");
+ XSRETURN_NO;
+ }
+
+ perl_plugin->infobar_remove (perl_plugin,
+ (items >= 1) ? SvIV (ST (0)) : 0);
+
+ XSRETURN_YES;
+}
+
+/*
* weechat::log: log message in server/channel (current or specified ones)
*/
@@ -1160,6 +1185,7 @@ weechat_perl_xs_init (pTHX)
newXS ("weechat::register", XS_weechat_register, "weechat");
newXS ("weechat::print", XS_weechat_print, "weechat");
newXS ("weechat::print_infobar", XS_weechat_print_infobar, "weechat");
+ newXS ("weechat::remove_infobar", XS_weechat_remove_infobar, "weechat");
newXS ("weechat::log", XS_weechat_log, "weechat");
newXS ("weechat::command", XS_weechat_command, "weechat");
newXS ("weechat::add_message_handler", XS_weechat_add_message_handler, "weechat");
diff --git a/src/plugins/scripts/python/weechat-python.c b/src/plugins/scripts/python/weechat-python.c
index 07576f1a0..b7afb327a 100644
--- a/src/plugins/scripts/python/weechat-python.c
+++ b/src/plugins/scripts/python/weechat-python.c
@@ -248,6 +248,41 @@ weechat_python_print_infobar (PyObject *self, PyObject *args)
}
/*
+ * weechat_python_remove_infobar: remove message(s) from infobar
+ */
+
+static PyObject *
+weechat_python_remove_infobar (PyObject *self, PyObject *args)
+{
+ int how_many;
+
+ /* make gcc happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ python_plugin->print_server (python_plugin,
+ "Python error: unable to remove infobar message(s), "
+ "script not initialized");
+ return Py_BuildValue ("i", 0);
+ }
+
+ how_many = 0;
+
+ if (!PyArg_ParseTuple (args, "|is", &how_many))
+ {
+ python_plugin->print_server (python_plugin,
+ "Python error: wrong parameters for "
+ "\"infobar_remove\" function");
+ return Py_BuildValue ("i", 0);
+ }
+
+ python_plugin->infobar_remove (python_plugin, how_many);
+
+ return Py_BuildValue ("i", 1);
+}
+
+/*
* weechat_python_log: log message in server/channel (current or specified ones)
*/
@@ -1091,6 +1126,7 @@ PyMethodDef weechat_python_funcs[] = {
{ "register", weechat_python_register, METH_VARARGS, "" },
{ "prnt", weechat_python_print, METH_VARARGS, "" },
{ "print_infobar", weechat_python_print_infobar, METH_VARARGS, "" },
+ { "remove_infobar", weechat_python_remove_infobar, METH_VARARGS, "" },
{ "log", weechat_python_log, METH_VARARGS, "" },
{ "command", weechat_python_command, METH_VARARGS, "" },
{ "add_message_handler", weechat_python_add_message_handler, METH_VARARGS, "" },
diff --git a/src/plugins/scripts/ruby/weechat-ruby.c b/src/plugins/scripts/ruby/weechat-ruby.c
index 11b3f8efd..19b7ccce6 100644
--- a/src/plugins/scripts/ruby/weechat-ruby.c
+++ b/src/plugins/scripts/ruby/weechat-ruby.c
@@ -320,6 +320,44 @@ weechat_ruby_print_infobar (VALUE class, VALUE delay, VALUE message)
}
/*
+ * weechat_ruby_remove_infobar: remove message(s) from infobar
+ */
+
+static VALUE
+weechat_ruby_remove_infobar (int argc, VALUE *argv, VALUE class)
+{
+ VALUE how_many;
+ int c_how_many;
+
+ /* make gcc happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ ruby_plugin->print_server (ruby_plugin,
+ "Ruby error: unable to remove infobar message(s), "
+ "script not initialized");
+ return INT2FIX (0);
+ }
+
+ how_many = Qnil;
+
+ rb_scan_args (argc, argv, "01", &how_many);
+
+ if (!NIL_P (how_many))
+ {
+ Check_Type (how_many, T_FIXNUM);
+ c_how_many = FIX2INT (how_many);
+ }
+ else
+ c_how_many = 0;
+
+ ruby_plugin->infobar_remove (ruby_plugin, c_how_many);
+
+ return INT2FIX (1);
+}
+
+/*
* weechat_ruby_log: log message in server/channel (current or specified ones)
*/
@@ -1713,6 +1751,7 @@ weechat_plugin_init (t_weechat_plugin *plugin)
rb_define_module_function (mWeechat, "register", weechat_ruby_register, 4);
rb_define_module_function (mWeechat, "print", weechat_ruby_print, -1);
rb_define_module_function (mWeechat, "print_infobar", weechat_ruby_print_infobar, 2);
+ rb_define_module_function (mWeechat, "remove_infobar", weechat_ruby_remove_infobar, -1);
rb_define_module_function (mWeechat, "log", weechat_ruby_log, -1);
rb_define_module_function (mWeechat, "command", weechat_ruby_command, -1);
rb_define_module_function (mWeechat, "add_message_handler", weechat_ruby_add_message_handler, 2);
diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h
index 5d980675f..57c01644c 100644
--- a/src/plugins/weechat-plugin.h
+++ b/src/plugins/weechat-plugin.h
@@ -206,6 +206,7 @@ struct t_weechat_plugin
void (*print) (t_weechat_plugin *, char *, char *, char *, ...);
void (*print_server) (t_weechat_plugin *, char *, ...);
void (*print_infobar) (t_weechat_plugin *, int, char *, ...);
+ void (*infobar_remove) (t_weechat_plugin *, int);
t_plugin_handler *(*msg_handler_add) (t_weechat_plugin *, char *,
t_plugin_handler_func *,
@@ -254,6 +255,7 @@ extern void weechat_plugin_exec_on_files (t_weechat_plugin *, char *,
extern void weechat_plugin_print (t_weechat_plugin *, char *, char *, char *, ...);
extern void weechat_plugin_print_server (t_weechat_plugin *, char *, ...);
extern void weechat_plugin_print_infobar (t_weechat_plugin *, int, char *, ...);
+extern void weechat_plugin_infobar_remove (t_weechat_plugin *, int);
/* log functions */
extern void weechat_plugin_log (t_weechat_plugin *, char *, char *, char *, ...);