summaryrefslogtreecommitdiff
path: root/src/plugins/alias/alias.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/alias/alias.c')
-rw-r--r--src/plugins/alias/alias.c108
1 files changed, 49 insertions, 59 deletions
diff --git a/src/plugins/alias/alias.c b/src/plugins/alias/alias.c
index 22b084732..d0aa7ca0a 100644
--- a/src/plugins/alias/alias.c
+++ b/src/plugins/alias/alias.c
@@ -325,6 +325,53 @@ alias_cb (void *data, struct t_gui_buffer *buffer, int argc, char **argv,
}
/*
+ * alias_free: free an alias and remove it from list
+ */
+
+void
+alias_free (struct t_alias *alias)
+{
+ struct t_alias *new_alias_list;
+
+ /* remove alias from list */
+ if (last_alias == alias)
+ last_alias = alias->prev_alias;
+ if (alias->prev_alias)
+ {
+ (alias->prev_alias)->next_alias = alias->next_alias;
+ new_alias_list = alias_list;
+ }
+ else
+ new_alias_list = alias->next_alias;
+ if (alias->next_alias)
+ (alias->next_alias)->prev_alias = alias->prev_alias;
+
+ /* free data */
+ if (alias->hook)
+ weechat_unhook (alias->hook);
+ if (alias->name)
+ free (alias->name);
+ if (alias->command)
+ free (alias->command);
+ free (alias);
+
+ alias_list = new_alias_list;
+}
+
+/*
+ * alias_free_all: free all alias
+ */
+
+void
+alias_free_all ()
+{
+ while (alias_list)
+ {
+ alias_free (alias_list);
+ }
+}
+
+/*
* alias_find_pos: find position for an alias (for sorting aliases)
*/
@@ -365,12 +412,7 @@ alias_new (const char *name, const char *command)
ptr_alias = alias_search (name);
if (ptr_alias)
- {
- if (ptr_alias->command)
- free (ptr_alias->command);
- ptr_alias->command = strdup (command);
- return ptr_alias;
- }
+ alias_free (ptr_alias);
new_alias = malloc (sizeof (*new_alias));
if (new_alias)
@@ -382,7 +424,7 @@ alias_new (const char *name, const char *command)
snprintf (str_completion, length, "%%%%%s",
(command[0] == '/') ? command + 1 : command);
}
- new_hook = weechat_hook_command (name, "[alias]", NULL, NULL,
+ new_hook = weechat_hook_command (name, command, NULL, NULL,
(str_completion) ? str_completion : NULL,
alias_cb, new_alias);
if (str_completion)
@@ -467,67 +509,15 @@ alias_get_final_command (struct t_alias *alias)
}
/*
- * alias_free: free an alias and remove it from list
- */
-
-void
-alias_free (struct t_alias *alias)
-{
- struct t_alias *new_alias_list;
-
- /* remove alias from list */
- if (last_alias == alias)
- last_alias = alias->prev_alias;
- if (alias->prev_alias)
- {
- (alias->prev_alias)->next_alias = alias->next_alias;
- new_alias_list = alias_list;
- }
- else
- new_alias_list = alias->next_alias;
- if (alias->next_alias)
- (alias->next_alias)->prev_alias = alias->prev_alias;
-
- /* free data */
- if (alias->hook)
- weechat_unhook (alias->hook);
- if (alias->name)
- free (alias->name);
- if (alias->command)
- free (alias->command);
- free (alias);
-
- alias_list = new_alias_list;
-}
-
-/*
- * alias_free_all: free all alias
- */
-
-void
-alias_free_all ()
-{
- while (alias_list)
- {
- alias_free (alias_list);
- }
-}
-
-/*
* alias_config_change_cb: callback called when alias option is modified
*/
void
alias_config_change_cb (void *data, struct t_config_option *option)
{
- struct t_alias *ptr_alias;
-
/* make C compiler happy */
(void) data;
- ptr_alias = alias_search (weechat_config_option_get_pointer (option, "name"));
- if (ptr_alias)
- alias_free (ptr_alias);
alias_new (weechat_config_option_get_pointer (option, "name"),
weechat_config_option_get_pointer (option, "value"));
}