diff options
author | Timo Sirainen <cras@irssi.org> | 2000-11-30 22:58:45 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2000-11-30 22:58:45 +0000 |
commit | a01275959deb5c8936bf90a3c51e4f9771a59819 (patch) | |
tree | 34f04f6583ecf932f0c7f83d3d2cea6958c57ebb /src/core | |
parent | 2ea411093ad0e6808cac86caf9dffd6f36d36c0f (diff) | |
download | irssi-a01275959deb5c8936bf90a3c51e4f9771a59819.zip |
cmd_options_get_server() : allow NULL cmd argument
eval_special_string() : if any of the commands separated with ; used
the arguments ($0, $1, etc.) don't anymore append all the arguments
after other commands.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@903 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/servers.c | 12 | ||||
-rw-r--r-- | src/core/special-vars.c | 28 |
2 files changed, 28 insertions, 12 deletions
diff --git a/src/core/servers.c b/src/core/servers.c index 9ec53902..fa9e6666 100644 --- a/src/core/servers.c +++ b/src/core/servers.c @@ -429,12 +429,14 @@ SERVER_REC *cmd_options_get_server(const char *cmd, /* get all the options, then remove the known ones. there should be only one left - the server tag. */ list = hashtable_get_keys(optlist); - for (tmp = list; tmp != NULL; tmp = next) { - char *option = tmp->data; - next = tmp->next; + if (cmd != NULL) { + for (tmp = list; tmp != NULL; tmp = next) { + char *option = tmp->data; + next = tmp->next; - if (command_have_option(cmd, option)) - list = g_slist_remove(list, option); + if (command_have_option(cmd, option)) + list = g_slist_remove(list, option); + } } if (list == NULL) diff --git a/src/core/special-vars.c b/src/core/special-vars.c index 0b83658f..72949c18 100644 --- a/src/core/special-vars.c +++ b/src/core/special-vars.c @@ -476,9 +476,14 @@ void eval_special_string(const char *cmd, const char *data, { const char *cmdchars; char *orig, *str, *start, *ret; - int arg_used; + int arg_used, arg_used_ever; + GSList *commands; + commands = NULL; + arg_used_ever = FALSE; cmdchars = settings_get_str("cmdchars"); + + /* get a list of all the commands to run */ orig = start = str = g_strdup(cmd); do { if (is_split_char(str, start)) @@ -490,6 +495,8 @@ void eval_special_string(const char *cmd, const char *data, ret = parse_special_string(start, server, item, data, &arg_used); + if (arg_used) arg_used_ever = TRUE; + if (strchr(cmdchars, *ret) == NULL) { /* no command char - let's put it there.. */ char *old = ret; @@ -497,19 +504,26 @@ void eval_special_string(const char *cmd, const char *data, ret = g_strdup_printf("%c%s", *cmdchars, old); g_free(old); } - if (!arg_used && *data != '\0') { - /* append the string with all the arguments */ + commands = g_slist_append(commands, ret); + start = str; + } while (*start != '\0'); + + /* run the command, if no arguments were ever used, append all of them + after each command */ + while (commands != NULL) { + ret = commands->data; + + if (!arg_used_ever && *data != '\0') { char *old = ret; ret = g_strconcat(old, " ", data, NULL); g_free(old); } signal_emit("send command", 3, ret, server, item); - g_free(ret); - - start = str; - } while (*start != '\0'); + g_free(ret); + commands = g_slist_remove(commands, commands->data); + } g_free(orig); } |