diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e8e30cde..5e499e27b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,7 @@ option(ENABLE_LARGEFILE "Enable Large File Support" ON) option(ENABLE_ALIAS "Enable Alias plugin" ON) option(ENABLE_ASPELL "Enable Aspell plugin" ON) option(ENABLE_ENCHANT "Enable Enchant lib for Aspell plugin" OFF) +option(ENABLE_BUFLIST "Enable Buflist plugin" ON) option(ENABLE_CHARSET "Enable Charset plugin" ON) option(ENABLE_EXEC "Enable Exec plugin" ON) option(ENABLE_FIFO "Enable FIFO plugin" ON) diff --git a/configure.ac b/configure.ac index f4a8cf257..4408856bf 100644 --- a/configure.ac +++ b/configure.ac @@ -109,6 +109,7 @@ AH_VERBATIM([HAVE_ENCHANT_GET_VERSION], [#undef HAVE_ENCHANT_GET_VERSION]) AH_VERBATIM([HAVE_GUILE_GMP_MEMORY_FUNCTIONS], [#undef HAVE_GUILE_GMP_MEMORY_FUNCTIONS]) AH_VERBATIM([PLUGIN_ALIAS], [#undef PLUGIN_ALIAS]) AH_VERBATIM([PLUGIN_ASPELL], [#undef PLUGIN_ASPELL]) +AH_VERBATIM([PLUGIN_BUFLIST], [#undef PLUGIN_BUFLIST]) AH_VERBATIM([PLUGIN_CHARSET], [#undef PLUGIN_CHARSET]) AH_VERBATIM([PLUGIN_EXEC], [#undef PLUGIN_EXEC]) AH_VERBATIM([PLUGIN_FIFO], [#undef PLUGIN_FIFO]) @@ -139,6 +140,7 @@ AC_ARG_ENABLE(largefile, [ --disable-largefile turn off Large File Suppo AC_ARG_ENABLE(alias, [ --disable-alias turn off Alias plugin (default=compiled)],enable_alias=$enableval,enable_alias=yes) AC_ARG_ENABLE(aspell, [ --disable-aspell turn off Aspell plugin (default=compiled)],enable_aspell=$enableval,enable_aspell=yes) AC_ARG_ENABLE(enchant, [ --enable-enchant turn on Enchant lib for Aspell plugin (default=off)],enable_enchant=$enableval,enable_enchant=no) +AC_ARG_ENABLE(buflist, [ --disable-buflist turn off Buflist plugin (default=compiled if found)],enable_buflist=$enableval,enable_buflist=yes) AC_ARG_ENABLE(charset, [ --disable-charset turn off Charset plugin (default=compiled if found)],enable_charset=$enableval,enable_charset=yes) AC_ARG_ENABLE(exec, [ --disable-exec turn off Exec plugin (default=compiled)],enable_exec=$enableval,enable_exec=yes) AC_ARG_ENABLE(fifo, [ --disable-fifo turn off Fifo plugin (default=compiled)],enable_fifo=$enableval,enable_fifo=yes) @@ -375,6 +377,14 @@ if test "x$enable_aspell" = "xyes" ; then AC_DEFINE(PLUGIN_ASPELL) fi +# --------------------------------- buflist ------------------------------------ + +if test "x$enable_buflist" = "xyes" ; then + AC_DEFINE(PLUGIN_BUFLIST) +else + not_asked="$not_asked buflist" +fi + # --------------------------------- charset ------------------------------------ if test "x$enable_charset" = "xyes" ; then @@ -1245,6 +1255,7 @@ AM_CONDITIONAL(HAVE_EAT_NEWLINE_GLITCH, test "$enable_eatnewlineglitch" = "yes") AM_CONDITIONAL(GUI_NCURSES, test "$enable_ncurses" = "yes") AM_CONDITIONAL(PLUGIN_ALIAS, test "$enable_alias" = "yes") AM_CONDITIONAL(PLUGIN_ASPELL, test "$enable_aspell" = "yes") +AM_CONDITIONAL(PLUGIN_BUFLIST, test "$enable_buflist" = "yes") AM_CONDITIONAL(PLUGIN_CHARSET, test "$enable_charset" = "yes") AM_CONDITIONAL(PLUGIN_EXEC, test "$enable_exec" = "yes") AM_CONDITIONAL(PLUGIN_FIFO, test "$enable_fifo" = "yes") @@ -1281,6 +1292,7 @@ AC_OUTPUT([Makefile src/plugins/Makefile src/plugins/alias/Makefile src/plugins/aspell/Makefile + src/plugins/buflist/Makefile src/plugins/charset/Makefile src/plugins/exec/Makefile src/plugins/fifo/Makefile @@ -1325,6 +1337,9 @@ fi if test "x$enable_aspell" = "xyes"; then listplugins="$listplugins aspell($ASPELL_LIB_USED)" fi +if test "x$enable_buflist" = "xyes"; then + listplugins="$listplugins buflist" +fi if test "x$enable_charset" = "xyes"; then listplugins="$listplugins charset" fi diff --git a/debian-devel/control b/debian-devel/control index 809e05935..f5b4d747d 100644 --- a/debian-devel/control +++ b/debian-devel/control @@ -88,8 +88,8 @@ Description: Fast, light and extensible chat client - core files for many operating systems. Everything can be done with a keyboard. . This package provides core plugins and locales files for WeeChat. It - currently ships the following plugins: alias, xfer, irc, charset and - logger. It is useless without weechat-curses. + currently ships the following plugins: alias, buflist, charset, irc, logger + and xfer. It is useless without weechat-curses. Package: weechat-devel-plugins Architecture: any diff --git a/debian-stable/control b/debian-stable/control index 74d134cdf..3661a013a 100644 --- a/debian-stable/control +++ b/debian-stable/control @@ -88,8 +88,8 @@ Description: Fast, light and extensible chat client - core files for many operating systems. Everything can be done with a keyboard. . This package provides core plugins and locales files for WeeChat. It - currently ships the following plugins: alias, xfer, irc, charset and - logger. It is useless without weechat-curses. + currently ships the following plugins: alias, buflist, charset, irc, logger + and xfer. It is useless without weechat-curses. Package: weechat-plugins Architecture: any diff --git a/debian-stable/weechat-core.install b/debian-stable/weechat-core.install index 952ee7353..42cc3a3da 100644 --- a/debian-stable/weechat-core.install +++ b/debian-stable/weechat-core.install @@ -1,6 +1,7 @@ usr/share/locale/ usr/lib/weechat/plugins/alias.so -usr/lib/weechat/plugins/xfer.so -usr/lib/weechat/plugins/irc.so +usr/lib/weechat/plugins/buflist.so usr/lib/weechat/plugins/charset.so +usr/lib/weechat/plugins/irc.so usr/lib/weechat/plugins/logger.so +usr/lib/weechat/plugins/xfer.so diff --git a/po/POTFILES.in b/po/POTFILES.in index 6e616cfe3..f957e2522 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -121,6 +121,12 @@ ./src/plugins/aspell/weechat-aspell-info.h ./src/plugins/aspell/weechat-aspell-speller.c ./src/plugins/aspell/weechat-aspell-speller.h +./src/plugins/buflist/buflist-bar-item.c +./src/plugins/buflist/buflist-bar-item.h +./src/plugins/buflist/buflist.c +./src/plugins/buflist/buflist-config.c +./src/plugins/buflist/buflist-config.h +./src/plugins/buflist/buflist.h ./src/plugins/charset/charset.c ./src/plugins/exec/exec.c ./src/plugins/exec/exec-buffer.c diff --git a/po/srcfiles.cmake b/po/srcfiles.cmake index e798b5fb9..d6bfb273b 100644 --- a/po/srcfiles.cmake +++ b/po/srcfiles.cmake @@ -122,6 +122,12 @@ SET(WEECHAT_SOURCES ./src/plugins/aspell/weechat-aspell-info.h ./src/plugins/aspell/weechat-aspell-speller.c ./src/plugins/aspell/weechat-aspell-speller.h +./src/plugins/buflist/buflist-bar-item.c +./src/plugins/buflist/buflist-bar-item.h +./src/plugins/buflist/buflist.c +./src/plugins/buflist/buflist-config.c +./src/plugins/buflist/buflist-config.h +./src/plugins/buflist/buflist.h ./src/plugins/charset/charset.c ./src/plugins/exec/exec.c ./src/plugins/exec/exec-buffer.c diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index bfbdf01a1..cbb0fd58a 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -67,6 +67,10 @@ if(ENABLE_ASPELL) endif() endif() +if(ENABLE_BUFLIST) + add_subdirectory(buflist) +endif() + if(ENABLE_CHARSET) # Check for iconv support. if(ICONV_FOUND) diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am index 5f77c7217..3c959b74e 100644 --- a/src/plugins/Makefile.am +++ b/src/plugins/Makefile.am @@ -45,6 +45,10 @@ if PLUGIN_ASPELL aspell_dir = aspell endif +if PLUGIN_BUFLIST +buflist_dir = buflist +endif + if PLUGIN_CHARSET charset_dir = charset endif @@ -109,10 +113,26 @@ if PLUGIN_XFER xfer_dir = xfer endif -SUBDIRS = . $(alias_dir) $(aspell_dir) $(charset_dir) $(exec_dir) $(fifo_dir) \ - $(irc_dir) $(logger_dir) $(relay_dir) $(script_dir) $(perl_dir) \ - $(python_dir) $(ruby_dir) $(lua_dir) $(tcl_dir) $(guile_dir) \ - $(javascript_dir) $(trigger_dir) $(xfer_dir) +SUBDIRS = . \ + $(alias_dir) \ + $(aspell_dir) \ + $(buflist_dir) \ + $(charset_dir) \ + $(exec_dir) \ + $(fifo_dir) \ + $(irc_dir) \ + $(logger_dir) \ + $(relay_dir) \ + $(script_dir) \ + $(perl_dir) \ + $(python_dir) \ + $(ruby_dir) \ + $(lua_dir) \ + $(tcl_dir) \ + $(guile_dir) \ + $(javascript_dir) \ + $(trigger_dir) \ + $(xfer_dir) EXTRA_DIST = CMakeLists.txt diff --git a/src/plugins/buflist/CMakeLists.txt b/src/plugins/buflist/CMakeLists.txt new file mode 100644 index 000000000..5f15447f3 --- /dev/null +++ b/src/plugins/buflist/CMakeLists.txt @@ -0,0 +1,28 @@ +# +# Copyright (C) 2003-2017 Sébastien Helleu +# +# 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 . +# + +add_library(buflist MODULE +buflist.c buflist.h +buflist-bar-item.c buflist-bar-item.h +buflist-config.c buflist-config.h) +set_target_properties(buflist PROPERTIES PREFIX "") + +target_link_libraries(buflist) + +install(TARGETS buflist LIBRARY DESTINATION ${LIBDIR}/plugins) diff --git a/src/plugins/buflist/Makefile.am b/src/plugins/buflist/Makefile.am new file mode 100644 index 000000000..72453f803 --- /dev/null +++ b/src/plugins/buflist/Makefile.am @@ -0,0 +1,36 @@ +# +# Copyright (C) 2003-2017 Sébastien Helleu +# +# 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 . +# + +AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\" $(BUFLIST_CFLAGS) + +libdir = ${weechat_libdir}/plugins + +lib_LTLIBRARIES = buflist.la + +buflist_la_SOURCES = buflist.c \ + buflist.h \ + buflist-bar-item.c \ + buflist-bar-item.h \ + buflist-config.c \ + buflist-config.h + +buflist_la_LDFLAGS = -module -no-undefined +buflist_la_LIBADD = $(BUFLIST_LFLAGS) + +EXTRA_DIST = CMakeLists.txt diff --git a/src/plugins/buflist/buflist-bar-item.c b/src/plugins/buflist/buflist-bar-item.c new file mode 100644 index 000000000..ac15a8d49 --- /dev/null +++ b/src/plugins/buflist/buflist-bar-item.c @@ -0,0 +1,181 @@ +/* + * buflist-bar-item.c - bar item for buflist plugin + * + * Copyright (C) 2003-2017 Sébastien Helleu + * + * 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 . + */ + +#include +#include +#include + +#include "../weechat-plugin.h" +#include "buflist.h" +#include "buflist-config.h" + + +/* + * Returns content of bar item "buffer_plugin": bar item with buffer plugin. + */ + +char * +buflist_bar_item_buflist (const void *pointer, void *data, + struct t_gui_bar_item *item, + struct t_gui_window *window, + struct t_gui_buffer *buffer, + struct t_hashtable *extra_info) +{ + struct t_hdata *hdata_buffer; + struct t_gui_buffer *ptr_buffer, *ptr_next_buffer, *ptr_current_buffer; + char **buflist, *str_buflist; + char str_format_number[32], str_format_number_empty[32]; + char str_number[32], str_indent_name[4], *line; + const char *ptr_format, *ptr_format_current, *ptr_name, *ptr_type; + int length_max_number, current_buffer, number, prev_number; + struct t_hashtable *pointers, *extra_vars; + + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) item; + (void) window; + (void) buffer; + (void) extra_info; + + prev_number = -1; + + pointers = weechat_hashtable_new (8, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_POINTER, + NULL, + NULL); + if (!pointers) + return NULL; + extra_vars = weechat_hashtable_new (32, + WEECHAT_HASHTABLE_STRING, + WEECHAT_HASHTABLE_POINTER, + NULL, + NULL); + if (!extra_vars) + { + weechat_hashtable_free (pointers); + return NULL; + } + + buflist = weechat_string_dyn_alloc (1); + + ptr_format = weechat_config_string (buflist_config_format_buffer); + ptr_format_current = weechat_config_string (buflist_config_format_buffer_current); + + ptr_current_buffer = weechat_current_buffer (); + + hdata_buffer = weechat_hdata_get ("buffer"); + ptr_buffer = weechat_hdata_get_list (hdata_buffer, "last_gui_buffer"); + + length_max_number = snprintf ( + str_number, sizeof (str_number), + "%d", weechat_hdata_integer (hdata_buffer, ptr_buffer, "number")); + snprintf (str_format_number, sizeof (str_format_number), + "%%%dd", length_max_number); + snprintf (str_format_number_empty, sizeof (str_format_number_empty), + "%%-%ds", length_max_number); + + ptr_buffer = weechat_hdata_get_list (hdata_buffer, "gui_buffers"); + + while (ptr_buffer) + { + ptr_next_buffer = weechat_hdata_move (hdata_buffer, ptr_buffer, 1); + + current_buffer = (ptr_buffer == ptr_current_buffer); + + ptr_name = weechat_hdata_string (hdata_buffer, ptr_buffer, + "short_name"); + if (!ptr_name) + ptr_name = weechat_hdata_string (hdata_buffer, ptr_buffer, "name"); + + if (*buflist[0]) + { + if (!weechat_string_dyn_concat (buflist, "\n")) + return NULL; + } + + /* buffer number */ + number = weechat_hdata_integer (hdata_buffer, ptr_buffer, "number"); + if (number != prev_number) + { + snprintf (str_number, sizeof (str_number), + str_format_number, number); + } + else + { + snprintf (str_number, sizeof (str_number), + str_format_number_empty, " "); + } + prev_number = number; + + /* buffer name */ + str_indent_name[0] = '\0'; + ptr_type = weechat_buffer_get_string (ptr_buffer, "localvar_type"); + if (ptr_type + && ((strcmp (ptr_type, "channel") == 0) + || (strcmp (ptr_type, "private") == 0))) + { + snprintf (str_indent_name, sizeof (str_indent_name), " "); + } + + /* set pointers */ + weechat_hashtable_set (pointers, "buffer", ptr_buffer); + + /* set extra variables */ + weechat_hashtable_set (extra_vars, "number", str_number); + weechat_hashtable_set (extra_vars, "indent", str_indent_name); + weechat_hashtable_set (extra_vars, "name", ptr_name); + + /* build string */ + line = weechat_string_eval_expression ( + (current_buffer) ? ptr_format_current : ptr_format, + pointers, extra_vars, NULL); + if (!weechat_string_dyn_concat (buflist, line)) + { + free (line); + weechat_hashtable_free (extra_vars); + return NULL; + } + free (line); + + ptr_buffer = ptr_next_buffer; + } + + weechat_hashtable_free (pointers); + weechat_hashtable_free (extra_vars); + + str_buflist = *buflist; + weechat_string_dyn_free (buflist, 0); + + return str_buflist; +} + +/* + * Initializes buflist bar items. + */ + +void +buflist_bar_item_init () +{ + weechat_bar_item_new ("buflist", + &buflist_bar_item_buflist, NULL, NULL); +} diff --git a/src/plugins/buflist/buflist-bar-item.h b/src/plugins/buflist/buflist-bar-item.h new file mode 100644 index 000000000..2eaaa2fca --- /dev/null +++ b/src/plugins/buflist/buflist-bar-item.h @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2003-2017 Sébastien Helleu + * + * 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 . + */ + +#ifndef WEECHAT_BUFLIST_BAR_ITEM_H +#define WEECHAT_BUFLIST_BAR_ITEM_H 1 + +#define BUFLIST_BAR_ITEM_NAME "buflist" + +extern void buflist_bar_item_init (); + +#endif /* WEECHAT_BUFLIST_BAR_ITEM_H */ diff --git a/src/plugins/buflist/buflist-config.c b/src/plugins/buflist/buflist-config.c new file mode 100644 index 000000000..daceed1cf --- /dev/null +++ b/src/plugins/buflist/buflist-config.c @@ -0,0 +1,137 @@ +/* + * buflist-config.c - buflist configuration options (file buflist.conf) + * + * Copyright (C) 2003-2017 Sébastien Helleu + * + * 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 . + */ + +#include + +#include "../weechat-plugin.h" +#include "buflist.h" +#include "buflist-config.h" + + +struct t_config_file *buflist_config_file = NULL; + +/* buflist config, format section */ + +struct t_config_option *buflist_config_format_buffer; +struct t_config_option *buflist_config_format_buffer_current; + + +/* + * Callback for changes on option "irc.network.lag_min_show". + */ + +void +buflist_config_change_buflist (const void *pointer, void *data, + struct t_config_option *option) +{ + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) option; + + weechat_bar_item_update ("buflist"); +} + +/* + * Initializes buflist configuration file. + * + * Returns: + * 1: OK + * 0: error + */ + +int +buflist_config_init () +{ + struct t_config_section *ptr_section; + + buflist_config_file = weechat_config_new (BUFLIST_CONFIG_NAME, + NULL, NULL, NULL); + if (!buflist_config_file) + return 0; + + /* format */ + ptr_section = weechat_config_new_section (buflist_config_file, "format", + 0, 0, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL, + NULL, NULL, NULL); + if (!ptr_section) + { + weechat_config_free (buflist_config_file); + return 0; + } + + buflist_config_format_buffer = weechat_config_new_option ( + buflist_config_file, ptr_section, + "buffer", "string", + N_("format of each line with a buffer"), + NULL, 0, 0, + "${color:green}${number}.${indent}${color:default}${name}", + NULL, 0, + NULL, NULL, NULL, + &buflist_config_change_buflist, NULL, NULL, + NULL, NULL, NULL); + buflist_config_format_buffer_current = weechat_config_new_option ( + buflist_config_file, ptr_section, + "buffer_current", "string", + N_("format for the line with current buffer"), + NULL, 0, 0, + "${color:lightgreen,blue}${number}.${indent}${color:*white}${name}", + NULL, 0, + NULL, NULL, NULL, + &buflist_config_change_buflist, NULL, NULL, + NULL, NULL, NULL); + + return 1; +} + +/* + * Reads buflist configuration file. + */ + +int +buflist_config_read () +{ + return weechat_config_read (buflist_config_file); +} + +/* + * Writes buflist configuration file. + */ + +int +buflist_config_write () +{ + return weechat_config_write (buflist_config_file); +} + +/* + * Frees buflist configuration. + */ + +void +buflist_config_free () +{ + weechat_config_free (buflist_config_file); +} diff --git a/src/plugins/buflist/buflist-config.h b/src/plugins/buflist/buflist-config.h new file mode 100644 index 000000000..d69737196 --- /dev/null +++ b/src/plugins/buflist/buflist-config.h @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2003-2017 Sébastien Helleu + * + * 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 . + */ + +#ifndef WEECHAT_BUFLIST_CONFIG_H +#define WEECHAT_BUFLIST_CONFIG_H 1 + +#define BUFLIST_CONFIG_NAME "buflist" + +extern struct t_config_file *buflist_config_file; + +extern struct t_config_option *buflist_config_format_buffer; +extern struct t_config_option *buflist_config_format_buffer_current; + +extern int buflist_config_init (); +extern int buflist_config_read (); +extern int buflist_config_write (); +extern void buflist_config_free (); + +#endif /* WEECHAT_BUFLIST_CONFIG_H */ diff --git a/src/plugins/buflist/buflist.c b/src/plugins/buflist/buflist.c new file mode 100644 index 000000000..90f453ee2 --- /dev/null +++ b/src/plugins/buflist/buflist.c @@ -0,0 +1,118 @@ +/* + * buflist.c - Bar with list of buffers + * + * Copyright (C) 2003-2017 Sébastien Helleu + * + * 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 . + */ + +#include + +#include "../weechat-plugin.h" +#include "buflist.h" +#include "buflist-bar-item.h" +#include "buflist-config.h" + + +WEECHAT_PLUGIN_NAME(BUFLIST_PLUGIN_NAME); +WEECHAT_PLUGIN_DESCRIPTION(N_("Buffers list")); +WEECHAT_PLUGIN_AUTHOR("Sébastien Helleu "); +WEECHAT_PLUGIN_VERSION(WEECHAT_VERSION); +WEECHAT_PLUGIN_LICENSE(WEECHAT_LICENSE); +WEECHAT_PLUGIN_PRIORITY(14000); + +struct t_weechat_plugin *weechat_buflist_plugin = NULL; + + +/* + * Callback for a signal on a buffer. + */ + +int +buflist_signal_buffer_cb (const void *pointer, void *data, + const char *signal, const char *type_data, + void *signal_data) +{ + /* make C compiler happy */ + (void) pointer; + (void) data; + (void) signal; + (void) type_data; + (void) signal_data; + + weechat_bar_item_update ("buflist"); + + return WEECHAT_RC_OK; +} + +/* + * Initializes buflist plugin. + */ + +int +weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[]) +{ + char *signals_buffers[] = + { "buffer_opened", "buffer_closed", "buffer_merged", "buffer_unmerged", + "buffer_moved", "buffer_renamed", "buffer_switch", "buffer_hidden", + "buffer_unhidden", "buffer_localvar_added", "buffer_localvar_changed", + "window_switch", NULL + }; + int i; + + /* make C compiler happy */ + (void) argc; + (void) argv; + + weechat_plugin = plugin; + + if (!buflist_config_init ()) + return WEECHAT_RC_ERROR; + + buflist_config_read (); + + /* hook some signals */ + for (i = 0; signals_buffers[i]; i++) + { + weechat_hook_signal (signals_buffers[i], + &buflist_signal_buffer_cb, NULL, NULL); + } + + buflist_bar_item_init (); + + weechat_bar_new (BUFLIST_BAR_NAME, "off", "0", "root", "", "left", + "columns_vertical", "vertical", "0", "0", + "default", "default", "default", "on", + BUFLIST_BAR_ITEM_NAME); + + return WEECHAT_RC_OK; +} + +/* + * Ends buflist plugin. + */ + +int +weechat_plugin_end (struct t_weechat_plugin *plugin) +{ + /* make C compiler happy */ + (void) plugin; + + buflist_config_write (); + buflist_config_free (); + + return WEECHAT_RC_OK; +} diff --git a/src/plugins/buflist/buflist.h b/src/plugins/buflist/buflist.h new file mode 100644 index 000000000..bc63c527e --- /dev/null +++ b/src/plugins/buflist/buflist.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2003-2017 Sébastien Helleu + * Copyright (C) 2006 Emmanuel Bouthenot + * + * 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 . + */ + +#ifndef WEECHAT_BUFLIST_H +#define WEECHAT_BUFLIST_H 1 + +#define weechat_plugin weechat_buflist_plugin +#define BUFLIST_PLUGIN_NAME "buflist" + +#define BUFLIST_BAR_NAME "buflist" + +extern struct t_weechat_plugin *weechat_buflist_plugin; + +#endif /* WEECHAT_BUFLIST_H */ diff --git a/tests/unit/test-plugins.cpp b/tests/unit/test-plugins.cpp index cd28aef5f..ffbe2d858 100644 --- a/tests/unit/test-plugins.cpp +++ b/tests/unit/test-plugins.cpp @@ -53,6 +53,7 @@ TEST(Plugins, Loaded) /* check that all plugins are properly loaded */ CHECK(hdata_search (hdata, plugins, "${plugin.name} == alias", 1)); CHECK(hdata_search (hdata, plugins, "${plugin.name} == aspell", 1)); + CHECK(hdata_search (hdata, plugins, "${plugin.name} == buflist", 1)); CHECK(hdata_search (hdata, plugins, "${plugin.name} == charset", 1)); CHECK(hdata_search (hdata, plugins, "${plugin.name} == exec", 1)); CHECK(hdata_search (hdata, plugins, "${plugin.name} == fifo", 1)); diff --git a/weechat.cygport.in b/weechat.cygport.in index 1646eb4c0..639c4223e 100644 --- a/weechat.cygport.in +++ b/weechat.cygport.in @@ -93,6 +93,7 @@ weechat_CONTENTS=" usr/bin/ usr/lib/weechat/plugins/alias.dll usr/lib/weechat/plugins/aspell.dll + usr/lib/weechat/plugins/buflist.dll usr/lib/weechat/plugins/charset.dll usr/lib/weechat/plugins/exec.dll usr/lib/weechat/plugins/fifo.dll