diff options
Diffstat (limited to 'src/plugins/buflist')
-rw-r--r-- | src/plugins/buflist/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/plugins/buflist/Makefile.am | 2 | ||||
-rw-r--r-- | src/plugins/buflist/buflist-info.c | 114 | ||||
-rw-r--r-- | src/plugins/buflist/buflist-info.h | 25 | ||||
-rw-r--r-- | src/plugins/buflist/buflist.c | 3 |
5 files changed, 145 insertions, 0 deletions
diff --git a/src/plugins/buflist/CMakeLists.txt b/src/plugins/buflist/CMakeLists.txt index c92d635fb..4478e2dfc 100644 --- a/src/plugins/buflist/CMakeLists.txt +++ b/src/plugins/buflist/CMakeLists.txt @@ -22,6 +22,7 @@ buflist.c buflist.h buflist-bar-item.c buflist-bar-item.h buflist-command.c buflist-command.h buflist-config.c buflist-config.h +buflist-info.c buflist-info.h buflist-mouse.c buflist-mouse.h) set_target_properties(buflist PROPERTIES PREFIX "") diff --git a/src/plugins/buflist/Makefile.am b/src/plugins/buflist/Makefile.am index 2f34da2e3..b48028d15 100644 --- a/src/plugins/buflist/Makefile.am +++ b/src/plugins/buflist/Makefile.am @@ -31,6 +31,8 @@ buflist_la_SOURCES = buflist.c \ buflist-command.h \ buflist-config.c \ buflist-config.h \ + buflist-info.c \ + buflist-info.h \ buflist-mouse.c \ buflist-mouse.h diff --git a/src/plugins/buflist/buflist-info.c b/src/plugins/buflist/buflist-info.c new file mode 100644 index 000000000..014353886 --- /dev/null +++ b/src/plugins/buflist/buflist-info.c @@ -0,0 +1,114 @@ +/* + * buflist-info.c - infolist hook for buflist plugin + * + * Copyright (C) 2019 Simmo Saan <simmo.saan@gmail.com> + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * WeeChat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WeeChat. If not, see <https://www.gnu.org/licenses/>. + */ + +#include "../weechat-plugin.h" +#include "buflist.h" +#include "buflist-bar-item.h" + + +/* + * Adds a buffer in an infolist. + * + * Returns: + * 1: OK + * 0: error + */ + +int +buflist_buffer_add_to_infolist (struct t_infolist *infolist, struct t_gui_buffer *buffer) +{ + struct t_infolist_item *ptr_item; + + if (!infolist || !buffer) + return 0; + + ptr_item = weechat_infolist_new_item (infolist); + if (!ptr_item) + return 0; + + if (!weechat_infolist_new_var_pointer (ptr_item, "buffer", buffer)) + return 0; + + return 1; +} + +/* + * Returns infolist "buflist". + */ + +struct t_infolist * +buflist_info_infolist_buflist_cb (const void *pointer, void *data, + const char *infolist_name, + void *obj_pointer, const char *arguments) +{ + int item_index, i, size; + struct t_infolist *ptr_infolist; + struct t_gui_buffer *ptr_buffer; + + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) infolist_name; + (void) obj_pointer; + + if (arguments && arguments[0]) + { + item_index = buflist_bar_item_get_index (arguments); + if (item_index < 0) + return NULL; + } + else + item_index = 0; + + if (!buflist_list_buffers[item_index]) + return NULL; + + ptr_infolist = weechat_infolist_new (); + if (!ptr_infolist) + return NULL; + + /* build list with all buffers in buflist */ + size = weechat_arraylist_size (buflist_list_buffers[item_index]); + for (i = 0; i < size; i++) + { + ptr_buffer = weechat_arraylist_get (buflist_list_buffers[item_index], i); + if (!buflist_buffer_add_to_infolist (ptr_infolist, ptr_buffer)) + { + weechat_infolist_free (ptr_infolist); + return NULL; + } + } + return ptr_infolist; +} + +/* + * Hooks infolist for buflist plugin. + */ + +void +buflist_info_init () +{ + weechat_hook_infolist ( + "buflist", N_("list of buffers in a buflist"), + NULL, + N_("buflist item name (optional)"), + &buflist_info_infolist_buflist_cb, NULL, NULL); +} diff --git a/src/plugins/buflist/buflist-info.h b/src/plugins/buflist/buflist-info.h new file mode 100644 index 000000000..6dc6de7ba --- /dev/null +++ b/src/plugins/buflist/buflist-info.h @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2019 Simmo Saan <simmo.saan@gmail.com> + * + * This file is part of WeeChat, the extensible chat client. + * + * WeeChat is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * WeeChat is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with WeeChat. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef WEECHAT_PLUGIN_BUFLIST_INFO_H +#define WEECHAT_PLUGIN_BUFLIST_INFO_H + +extern void buflist_info_init (); + +#endif /* WEECHAT_PLUGIN_BUFLIST_INFO_H */ diff --git a/src/plugins/buflist/buflist.c b/src/plugins/buflist/buflist.c index f4ccb820a..edeeb5444 100644 --- a/src/plugins/buflist/buflist.c +++ b/src/plugins/buflist/buflist.c @@ -29,6 +29,7 @@ #include "buflist-bar-item.h" #include "buflist-command.h" #include "buflist-config.h" +#include "buflist-info.h" #include "buflist-mouse.h" @@ -506,6 +507,8 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) weechat_hook_signal ("perl_script_loaded", &buflist_script_loaded_cb, NULL, NULL); + buflist_info_init (); + return WEECHAT_RC_OK; } |