1
0
mirror of https://github.com/irssi/irssi.git synced 2025-02-02 15:08:01 -05:00

/EXEC -out now sends /msg -nick | -channel so it works properly with silc

channels.


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2668 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Timo Sirainen 2002-04-12 19:45:59 +00:00 committed by cras
parent dfed19a3c8
commit d5c15a8ee3
2 changed files with 15 additions and 3 deletions

View File

@ -28,6 +28,9 @@
#include "misc.h" #include "misc.h"
#include "levels.h" #include "levels.h"
#include "channels.h"
#include "queries.h"
#include "printtext.h" #include "printtext.h"
#include "fe-exec.h" #include "fe-exec.h"
#include "fe-windows.h" #include "fe-windows.h"
@ -370,7 +373,7 @@ static void handle_exec(const char *args, GHashTable *optlist,
{ {
PROCESS_REC *rec; PROCESS_REC *rec;
char *target, *level; char *target, *level;
int notice, signum, interactive; int notice, signum, interactive, target_nick, target_channel;
/* check that there's no unknown options. we allowed them /* check that there's no unknown options. we allowed them
because signals can be used as options, but there should be because signals can be used as options, but there should be
@ -403,11 +406,14 @@ static void handle_exec(const char *args, GHashTable *optlist,
return; return;
/* common options */ /* common options */
target_channel = target_nick = FALSE;
if (g_hash_table_lookup(optlist, "out") != NULL) { if (g_hash_table_lookup(optlist, "out") != NULL) {
/* redirect output to active channel/query */ /* redirect output to active channel/query */
if (item == NULL) if (item == NULL)
cmd_return_error(CMDERR_NOT_JOINED); cmd_return_error(CMDERR_NOT_JOINED);
target = item->name; target = item->name;
target_channel = IS_CHANNEL(item);
target_nick = IS_QUERY(item);
} else if (g_hash_table_lookup(optlist, "msg") != NULL) { } else if (g_hash_table_lookup(optlist, "msg") != NULL) {
/* redirect output to /msg <nick> */ /* redirect output to /msg <nick> */
target = g_hash_table_lookup(optlist, "msg"); target = g_hash_table_lookup(optlist, "msg");
@ -487,6 +493,8 @@ static void handle_exec(const char *args, GHashTable *optlist,
rec->id = process_get_new_id(); rec->id = process_get_new_id();
rec->target = g_strdup(target); rec->target = g_strdup(target);
rec->target_win = active_win; rec->target_win = active_win;
rec->target_channel = target_channel;
rec->target_nick = target_nick;
rec->args = g_strdup(args); rec->args = g_strdup(args);
rec->notice = notice; rec->notice = notice;
rec->silent = g_hash_table_lookup(optlist, "-") != NULL; rec->silent = g_hash_table_lookup(optlist, "-") != NULL;
@ -572,7 +580,9 @@ static void sig_exec_input(PROCESS_REC *rec, const char *text)
server = item != NULL ? item->server : server = item != NULL ? item->server :
active_win->active_server; active_win->active_server;
str = g_strconcat(rec->target, " ", text, NULL); str = g_strconcat(rec->target_nick ? "-nick " :
rec->target_channel ? "-channel " : "",
rec->target, " ", text, NULL);
signal_emit(rec->notice ? "command notice" : "command msg", signal_emit(rec->notice ? "command notice" : "command msg",
3, str, server, item); 3, str, server, item);
g_free(str); g_free(str);

View File

@ -38,6 +38,8 @@ struct PROCESS_REC {
unsigned int shell:1; /* start the program via /bin/sh */ unsigned int shell:1; /* start the program via /bin/sh */
unsigned int notice:1; /* send text with /notice, not /msg if target is set */ unsigned int notice:1; /* send text with /notice, not /msg if target is set */
unsigned int silent:1; /* don't print "process exited with level xx" */ unsigned int silent:1; /* don't print "process exited with level xx" */
unsigned int target_channel:1; /* target is a channel */
unsigned int target_nick:1; /* target is a nick */
}; };
extern GSList *processes; extern GSList *processes;