diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2006-02-20 17:01:18 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2006-02-20 17:01:18 +0000 |
commit | 9373a7a47e4711e8db0549cec49da19db45330ae (patch) | |
tree | 5940281d9c986998fe96daebbca9fd04fcf1f589 /src | |
parent | e0c97562a596bcfde406fb26dbc8f9d5f0cde111 (diff) | |
download | weechat-9373a7a47e4711e8db0549cec49da19db45330ae.zip |
Added new plugin API function: remove_infobar
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/gui-common.c | 15 | ||||
-rw-r--r-- | src/gui/gui.h | 3 | ||||
-rw-r--r-- | src/plugins/plugins-interface.c | 23 | ||||
-rw-r--r-- | src/plugins/plugins.c | 1 | ||||
-rw-r--r-- | src/plugins/scripts/lua/weechat-lua.c | 34 | ||||
-rw-r--r-- | src/plugins/scripts/perl/weechat-perl.c | 26 | ||||
-rw-r--r-- | src/plugins/scripts/python/weechat-python.c | 36 | ||||
-rw-r--r-- | src/plugins/scripts/ruby/weechat-ruby.c | 39 | ||||
-rw-r--r-- | src/plugins/weechat-plugin.h | 2 |
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 *, ...); |