summaryrefslogtreecommitdiff
path: root/src/core/wee-command.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/wee-command.c')
-rw-r--r--src/core/wee-command.c225
1 files changed, 225 insertions, 0 deletions
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index f5cab35cc..bc72efa76 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -66,6 +66,7 @@
#include "wee-version.h"
#include "../gui/gui-bar.h"
#include "../gui/gui-bar-item.h"
+#include "../gui/gui-bar-item-custom.h"
#include "../gui/gui-buffer.h"
#include "../gui/gui-chat.h"
#include "../gui/gui-color.h"
@@ -3388,6 +3389,195 @@ COMMAND_CALLBACK(input)
}
/*
+ * Callback for command "/item": manages custom bar items
+ */
+
+COMMAND_CALLBACK(item)
+{
+ struct t_gui_bar_item_custom *ptr_bar_item_custom;
+ char str_command[4096], str_pos[16];
+ int i, update;
+
+ /* make C compiler happy */
+ (void) pointer;
+ (void) data;
+
+ if ((argc == 1)
+ || ((argc == 2) && (string_strcasecmp (argv[1], "list") == 0)))
+ {
+ /* display all custom bar items */
+ if (gui_custom_bar_items)
+ {
+ gui_chat_printf (NULL, "");
+ gui_chat_printf (NULL,
+ _("Custom bar items:"));
+ for (ptr_bar_item_custom = gui_custom_bar_items; ptr_bar_item_custom;
+ ptr_bar_item_custom = ptr_bar_item_custom->next_item)
+ {
+ gui_chat_printf (
+ NULL, " %s -> \"%s\"",
+ ptr_bar_item_custom->bar_item->name,
+ CONFIG_STRING(ptr_bar_item_custom->options[GUI_BAR_ITEM_CUSTOM_OPTION_CONTENT]));
+ }
+ }
+ else
+ {
+ gui_chat_printf (NULL, _("No custom bar item defined"));
+ }
+
+ return WEECHAT_RC_OK;
+ }
+
+ /* add (or add/replace) a custom bar item */
+ if ((string_strcasecmp (argv[1], "add") == 0)
+ || (string_strcasecmp (argv[1], "addreplace") == 0))
+ {
+ COMMAND_MIN_ARGS(4, argv[1]);
+
+ update = 0;
+ if (string_strcasecmp (argv[1], "addreplace") == 0)
+ {
+ ptr_bar_item_custom = gui_bar_item_custom_search (argv[2]);
+ if (ptr_bar_item_custom)
+ {
+ gui_bar_item_custom_free (ptr_bar_item_custom);
+ update = 1;
+ }
+ }
+
+ ptr_bar_item_custom = gui_bar_item_custom_new (argv[2], argv_eol[3]);
+ if (ptr_bar_item_custom)
+ {
+ gui_chat_printf (NULL,
+ (update) ?
+ _("Custom bar item \"%s\" updated") :
+ _("Custom bar item \"%s\" added"),
+ argv[2]);
+ }
+ else
+ {
+ gui_chat_printf (NULL,
+ _("%sUnable to add custom bar item \"%s\""),
+ gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
+ argv[2]);
+ }
+
+ return WEECHAT_RC_OK;
+ }
+
+ /* refresh bar items */
+ if (string_strcasecmp (argv[1], "refresh") == 0)
+ {
+ for (i = 2; i < argc; i++)
+ {
+ gui_bar_item_update (argv[i]);
+ }
+ return WEECHAT_RC_OK;
+ }
+
+ /* recreate a custom bar item */
+ if (string_strcasecmp (argv[1], "recreate") == 0)
+ {
+ COMMAND_MIN_ARGS(3, "recreate");
+ ptr_bar_item_custom = gui_bar_item_custom_search (argv[2]);
+ if (ptr_bar_item_custom)
+ {
+ snprintf (str_command, sizeof (str_command),
+ "/item addreplace %s %s",
+ ptr_bar_item_custom->bar_item->name,
+ CONFIG_STRING(ptr_bar_item_custom->options[GUI_BAR_ITEM_CUSTOM_OPTION_CONTENT]));
+ gui_buffer_set (buffer, "input", str_command);
+ snprintf (str_pos, sizeof (str_pos),
+ "%d", utf8_strlen (str_command));
+ gui_buffer_set (buffer, "input_pos", str_pos);
+ }
+ else
+ {
+ gui_chat_printf (NULL,
+ _("%sCustom bar item \"%s\" not found"),
+ gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
+ argv[2]);
+ }
+ return WEECHAT_RC_OK;
+ }
+
+ /* rename a custom bar item */
+ if (string_strcasecmp (argv[1], "rename") == 0)
+ {
+ COMMAND_MIN_ARGS(4, "rename");
+ ptr_bar_item_custom = gui_bar_item_custom_search (argv[2]);
+ if (ptr_bar_item_custom)
+ {
+ if (gui_bar_item_custom_rename (ptr_bar_item_custom, argv[3]))
+ {
+ gui_chat_printf (NULL,
+ _("Custom bar item \"%s\" renamed to \"%s\""),
+ argv[2], argv[3]);
+ }
+ else
+ {
+ gui_chat_printf (NULL,
+ _("%sUnable to rename custom bar item "
+ "\"%s\" to \"%s\""),
+ gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
+ argv[2], argv[3]);
+ }
+ }
+ else
+ {
+ gui_chat_printf (NULL,
+ _("%sCustom bar item \"%s\" not found"),
+ gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
+ argv[2]);
+ }
+ return WEECHAT_RC_OK;
+ }
+
+ /* delete a custom bar item */
+ if (string_strcasecmp (argv[1], "del") == 0)
+ {
+ COMMAND_MIN_ARGS(3, "del");
+ if (string_strcasecmp (argv[2], "-all") == 0)
+ {
+ if (gui_custom_bar_items)
+ {
+ gui_bar_item_custom_free_all ();
+ gui_chat_printf (NULL,
+ _("All custom bar items have been deleted"));
+ }
+ else
+ {
+ gui_chat_printf (NULL, _("No custom bar item defined"));
+ }
+ }
+ else
+ {
+ for (i = 2; i < argc; i++)
+ {
+ ptr_bar_item_custom = gui_bar_item_custom_search (argv[i]);
+ if (ptr_bar_item_custom)
+ {
+ gui_bar_item_custom_free (ptr_bar_item_custom);
+ gui_chat_printf (NULL,
+ _("Custom bar item \"%s\" deleted"),
+ argv[i]);
+ }
+ else
+ {
+ gui_chat_printf (NULL,
+ _("%sCustom bar item \"%s\" not found"),
+ gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
+ argv[i]);
+ }
+ }
+ }
+ return WEECHAT_RC_OK;
+ }
+
+ COMMAND_ERROR;
+}
+
+/*
* Displays a key binding.
*/
@@ -7828,6 +8018,41 @@ command_init ()
"zoom_merged_buffer || insert || send || paste_start || paste_stop",
&command_input, NULL, NULL);
hook_command (
+ NULL, "item",
+ N_("manage custom bar items"),
+ N_("list"
+ " || add|addreplace <name> <content>"
+ " || rename <name> <new_name>"
+ " || refresh <name> [<name>...]"
+ " || recreate <name>"
+ " || del <name>|-all"),
+ N_(" list: list all custom bar items\n"
+ " add: add a custom bar item\n"
+ "addreplace: add or replace an existing custom bar item\n"
+ " name: custom bar item name\n"
+ " content: content (evaluated, see /help eval)\n"
+ " rename: rename a custom bar item\n"
+ " refresh: update content of item in all bars where the item is "
+ "displayed; any item can be refreshed: default/plugin/custom "
+ "bar items\n"
+ " recreate: set input with the command used to edit the custom "
+ "bar item\n"
+ " del: delete a custom bar item\n"
+ " -all: delete all custom bar items\n"
+ "\n"
+ "Examples:\n"
+ " /item add terminfo term:${info:term_width}x${info:term_height}\n"
+ " /item add bufinfo ${buffer.number}:${buffer.name}"
+ "${if:${buffer.zoomed}?(Z)}"),
+ "list"
+ " || add %(custom_bar_items_names)"
+ " || addreplace %(custom_bar_items_names) %(custom_bar_item_content)"
+ " || rename %(custom_bar_items_names) %(custom_bar_items_names)"
+ " || refresh %(custom_bar_items_names)|%*"
+ " || recreate %(custom_bar_items_names)"
+ " || del %(custom_bar_items_names)|-all",
+ &command_item, NULL, NULL);
+ hook_command (
NULL, "key",
N_("bind/unbind keys"),
N_("list|listdefault|listdiff [<context>]"