1
0
mirror of https://github.com/irssi/irssi.git synced 2024-10-27 05:20:20 -04:00

Changed the behaviour of how to handle "send command" signal (text you

typed to entry field).


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@317 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2000-06-10 23:20:22 +00:00 committed by cras
parent fbb5cd6990
commit 89b47010b3
2 changed files with 45 additions and 42 deletions

View File

@ -419,41 +419,17 @@ void cmd_get_remove_func(CMD_GET_FUNC func)
cmdget_funcs = g_slist_prepend(cmdget_funcs, (void *) func);
}
static void parse_outgoing(const char *line, SERVER_REC *server, void *item)
static void parse_command(const char *command, int expand_aliases, SERVER_REC *server, void *item)
{
const char *alias;
char *cmd, *str, *args, *oldcmd, *cmdchar;
int use_alias = TRUE;
char *cmd, *str, *args, *oldcmd;
g_return_if_fail(line != NULL);
if (*line == '\0') {
/* empty line, forget it. */
signal_stop();
return;
}
cmdchar = strchr(settings_get_str("cmdchars"), *line);
if (cmdchar == NULL)
return; /* handle only /commands here */
line++;
if (*line == ' ') {
/* "/ text" = same as sending "text" to active channel. */
return;
}
/* same cmdchar twice ignores aliases ignores aliases */
if (*line == *cmdchar) {
line++;
use_alias = FALSE;
}
cmd = str = g_strconcat("command ", line, NULL);
cmd = str = g_strconcat("command ", command, NULL);
args = strchr(cmd+8, ' ');
if (args != NULL) *args++ = '\0'; else args = "";
/* check if there's an alias for command */
alias = use_alias ? alias_find(cmd+8) : NULL;
alias = expand_aliases ? alias_find(cmd+8) : NULL;
if (alias != NULL)
eval_special_string(alias, args, server, item);
else {
@ -464,13 +440,48 @@ static void parse_outgoing(const char *line, SERVER_REC *server, void *item)
oldcmd = current_command;
current_command = cmd+8;
if (!signal_emit(cmd, 3, args, server, item))
signal_emit_id(signal_default_command, 3, line, server, item);
signal_emit_id(signal_default_command, 3, command, server, item);
current_command = oldcmd;
}
g_free(str);
}
static void event_command(const char *line, SERVER_REC *server, void *item)
{
char *cmdchar;
int expand_aliases = TRUE;
g_return_if_fail(line != NULL);
if (*line == '\0') {
/* empty line, forget it. */
signal_stop();
return;
}
cmdchar = strchr(settings_get_str("cmdchars"), *line);
if (cmdchar != NULL && line[1] == ' ') {
/* "/ text" = same as sending "text" to active channel. */
line += 2;
cmdchar = NULL;
}
if (cmdchar == NULL) {
/* non-command - let someone else handle this */
signal_emit("send text", 3, line, server, item);
return;
}
/* same cmdchar twice ignores aliases ignores aliases */
line++;
if (*line == *cmdchar) {
line++;
expand_aliases = FALSE;
}
parse_command(line, expand_aliases, server, item);
}
static void cmd_eval(const char *data, SERVER_REC *server, void *item)
{
g_return_if_fail(data != NULL);
@ -514,7 +525,7 @@ void commands_init(void)
signal_default_command = module_get_uniq_id_str("signals", "default command");
settings_add_str("misc", "cmdchars", "/");
signal_add("send command", (SIGNAL_FUNC) parse_outgoing);
signal_add("send command", (SIGNAL_FUNC) event_command);
command_bind("eval", NULL, (SIGNAL_FUNC) cmd_eval);
command_bind("cd", NULL, (SIGNAL_FUNC) cmd_cd);
@ -527,7 +538,7 @@ void commands_deinit(void)
g_free_not_null(current_command);
g_slist_free(cmdget_funcs);
signal_remove("send command", (SIGNAL_FUNC) parse_outgoing);
signal_remove("send command", (SIGNAL_FUNC) event_command);
command_unbind("eval", (SIGNAL_FUNC) cmd_eval);
command_unbind("cd", (SIGNAL_FUNC) cmd_cd);

View File

@ -269,7 +269,7 @@ static GList *completion_getmsglist(IRC_SERVER_REC *server, gchar *nick)
return list;
}
static void event_command(gchar *line, IRC_SERVER_REC *server, WI_IRC_REC *item)
static void event_text(gchar *line, IRC_SERVER_REC *server, WI_IRC_REC *item)
{
CHANNEL_REC *channel;
GList *comp;
@ -280,14 +280,6 @@ static void event_command(gchar *line, IRC_SERVER_REC *server, WI_IRC_REC *item)
if (!irc_item_check(item))
return;
if (strchr(settings_get_str("cmdchars"), *line) != NULL) {
if (line[1] != ' ')
return;
/* "/ text" = same as sending "text" to active channel. */
line += 2;
}
line = g_strdup(line);
/* check for nick completion */
@ -584,7 +576,7 @@ void completion_init(void)
settings_add_int("completion", "completion_keep_privates", 10);
signal_add("event privmsg", (SIGNAL_FUNC) event_privmsg);
signal_add("send command", (SIGNAL_FUNC) event_command);
signal_add("send text", (SIGNAL_FUNC) event_text);
signal_add("server disconnected", (SIGNAL_FUNC) completion_deinit_server);
signal_add("channel destroyed", (SIGNAL_FUNC) completion_deinit_channel);
command_bind("msg", NULL, (SIGNAL_FUNC) cmd_msg);
@ -601,7 +593,7 @@ void completion_deinit(void)
g_source_remove(comptag);
signal_remove("event privmsg", (SIGNAL_FUNC) event_privmsg);
signal_remove("send command", (SIGNAL_FUNC) event_command);
signal_remove("send text", (SIGNAL_FUNC) event_text);
signal_remove("server disconnected", (SIGNAL_FUNC) completion_deinit_server);
signal_remove("channel destroyed", (SIGNAL_FUNC) completion_deinit_channel);
command_unbind("msg", (SIGNAL_FUNC) cmd_msg);