summaryrefslogtreecommitdiff
path: root/src/plugins/buflist
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/buflist')
-rw-r--r--src/plugins/buflist/CMakeLists.txt1
-rw-r--r--src/plugins/buflist/Makefile.am2
-rw-r--r--src/plugins/buflist/buflist-info.c114
-rw-r--r--src/plugins/buflist/buflist-info.h25
-rw-r--r--src/plugins/buflist/buflist.c3
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;
}