int alias_config_completion_create_option_cb (void *data, struct t_config_file *config_file, struct t_config_section *section, const char *option_name, const char *value) { struct t_alias *ptr_alias; /* make C compiler happy */ (void) data; (void) config_file; (void) section; ptr_alias = alias_search (option_name); if (!ptr_alias) { weechat_printf (NULL, _("%s%s: error creating completion for alias \"%s\": " "alias not found"), weechat_prefix ("error"), ALIAS_PLUGIN_NAME, option_name); return WEECHAT_CONFIG_OPTION_SET_ERROR; } /* create configuration option */ alias_config_completion_new_option (option_name, value); /* create/update completion in alias */ alias_update_completion (ptr_alias, value); return WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; }
void alias_config_completion_delete_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 && ptr_alias->hook && ptr_alias->completion) { alias_update_completion (ptr_alias, NULL); } }
void alias_config_cmd_delete_cb (void *data, struct t_config_option *option) { struct t_config_option *ptr_option_completion; struct t_alias *ptr_alias; /* make C compiler happy */ (void) data; ptr_option_completion = weechat_config_search_option (alias_config_file, alias_config_section_completion, weechat_config_option_get_pointer (option, "name")); ptr_alias = alias_search (weechat_config_option_get_pointer (option, "name")); if (ptr_alias) alias_free (ptr_alias); if (ptr_option_completion) weechat_config_option_free (ptr_option_completion); }
int alias_config_cmd_create_option_cb (void *data, struct t_config_file *config_file, struct t_config_section *section, const char *option_name, const char *value) { struct t_alias *ptr_alias; int rc; /* make C compiler happy */ (void) data; (void) config_file; (void) section; /* create configuration option */ alias_config_cmd_new_option (option_name, value); /* create alias */ ptr_alias = alias_search (option_name); if (ptr_alias) alias_free (ptr_alias); if (value && value[0]) rc = (alias_new (option_name, value, NULL)) ? WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE : WEECHAT_CONFIG_OPTION_SET_ERROR; else rc = WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE; if (rc == WEECHAT_CONFIG_OPTION_SET_ERROR) { weechat_printf (NULL, _("%s%s: error creating alias \"%s\" => \"%s\""), weechat_prefix ("error"), ALIAS_PLUGIN_NAME, option_name, value); } return rc; }
cmd_t *find_func(const char *cmd, bool print_error) { cmd_t *c; alias *a; /* finds (abbreviated) command */ c = find_cmd(cmd); /* finds (abbreviated) alias */ a = alias_search(cmd); if(!c && !a) { if(print_error) fprintf(stderr, _("No such command '%s', try 'help'\n"), cmd); return 0; } if(a == ALIAS_AMBIGUOUS) { /* skip alias if exact command */ if(c && c != CMD_AMBIGUOUS && strlen(c->cmd) == strlen(cmd)) return c; else { if(print_error) fprintf(stderr, _("ambiguous alias '%s'\n"), cmd); return 0; } } if(c == CMD_AMBIGUOUS) { if(!a) { if(print_error) fprintf(stderr, _("ambiguous command '%s'\n"), cmd); return 0; } /* skip ambiguous command, run exact alias instead */ c = 0; } if(c && !a) return c; /* found both alias and command */ if(a && c) { if(strlen(a->name) == strlen(cmd)) /* skip exact command, run exact alias */ c = 0; else if(strlen(c->cmd) == strlen(cmd)) /* skip alias, run exact command */ return c; else { /* both alias and command are abbreviated * Q: which wins? A: no one!? */ if(print_error) fprintf(stderr, _("ambiguous alias/command '%s'\n"), cmd); return 0; } } /* now we should have the alias only */ c = find_cmd(a->value->argv[0]); if(!c) { if(print_error) fprintf(stderr, _("No such command '%s' (expanded alias '%s')\n"), a->value->argv[0], a->name); return 0; } if(c == CMD_AMBIGUOUS) { if(print_error) fprintf(stderr, _("ambiguous command '%s' (expanded alias '%s')\n"), a->value->argv[0], a->name); return 0; } /* expand_alias_parameters(args, a->value);*/ return c; }
struct t_alias * alias_new (const char *name, const char *command, const char *completion) { struct t_alias *new_alias, *ptr_alias, *pos_alias; if (!name || !name[0] || !command || !command[0]) return NULL; while (weechat_string_is_command_char (name)) { name = weechat_utf8_next_char (name); } ptr_alias = alias_search (name); if (ptr_alias) alias_free (ptr_alias); new_alias = malloc (sizeof (*new_alias)); if (new_alias) { new_alias->hook = NULL; new_alias->name = strdup (name); new_alias->command = strdup (command); new_alias->completion = (completion) ? strdup (completion) : NULL; new_alias->running = 0; alias_hook_command (new_alias); if (alias_list) { pos_alias = alias_find_pos (name); if (pos_alias) { /* insert alias into the list (before alias found) */ new_alias->prev_alias = pos_alias->prev_alias; new_alias->next_alias = pos_alias; if (pos_alias->prev_alias) (pos_alias->prev_alias)->next_alias = new_alias; else alias_list = new_alias; pos_alias->prev_alias = new_alias; } else { /* add alias to end of list */ new_alias->prev_alias = last_alias; new_alias->next_alias = NULL; last_alias->next_alias = new_alias; last_alias = new_alias; } } else { new_alias->prev_alias = NULL; new_alias->next_alias = NULL; alias_list = new_alias; last_alias = new_alias; } } return new_alias; }
struct t_alias * alias_new (const char *name, const char *command, const char *completion) { struct t_alias *new_alias, *ptr_alias, *pos_alias; if (!alias_name_valid (name)) { dogechat_printf (NULL, _("%s%s: invalid alias name: \"%s\""), dogechat_prefix ("error"), ALIAS_PLUGIN_NAME, name); return NULL; } if (!command || !command[0]) return NULL; while (dogechat_string_is_command_char (name)) { name = dogechat_utf8_next_char (name); } ptr_alias = alias_search (name); if (ptr_alias) alias_free (ptr_alias); new_alias = malloc (sizeof (*new_alias)); if (new_alias) { new_alias->hook = NULL; new_alias->name = strdup (name); new_alias->command = strdup (command); new_alias->completion = (completion) ? strdup (completion) : NULL; new_alias->running = 0; alias_hook_command (new_alias); if (alias_list) { pos_alias = alias_find_pos (name); if (pos_alias) { /* insert alias into the list (before alias found) */ new_alias->prev_alias = pos_alias->prev_alias; new_alias->next_alias = pos_alias; if (pos_alias->prev_alias) (pos_alias->prev_alias)->next_alias = new_alias; else alias_list = new_alias; pos_alias->prev_alias = new_alias; } else { /* add alias to end of list */ new_alias->prev_alias = last_alias; new_alias->next_alias = NULL; last_alias->next_alias = new_alias; last_alias = new_alias; } } else { new_alias->prev_alias = NULL; new_alias->next_alias = NULL; alias_list = new_alias; last_alias = new_alias; } } return new_alias; }