diff --git a/src/fe-common/irc/fe-whois.c b/src/fe-common/irc/fe-whois.c index b0eeb19a..fd118ec1 100644 --- a/src/fe-common/irc/fe-whois.c +++ b/src/fe-common/irc/fe-whois.c @@ -12,6 +12,16 @@ #include +/* When enabled, prints WHOIS replies into active window while preserving + * formatting and theming. */ +#define WHOIS_PRINT(server, nick, level, formatnum, ...) \ + do { \ + if (settings_get_bool("print_whois_rpl_in_active_window") && active_win != NULL) \ + printformat_window(active_win, level, formatnum, __VA_ARGS__); \ + else \ + printformat(server, nick, level, formatnum, __VA_ARGS__); \ + } while (0) + static void event_whois(IRC_SERVER_REC *server, const char *data) { char *params, *nick, *user, *host, *realname, *recoded; @@ -21,7 +31,7 @@ static void event_whois(IRC_SERVER_REC *server, const char *data) params = event_get_params(data, 6, NULL, &nick, &user, &host, NULL, &realname); recoded = recode_in(SERVER(server), realname, nick); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS, nick, user, host, recoded); g_free(params); g_free(recoded); @@ -34,7 +44,7 @@ static void event_whois_special(IRC_SERVER_REC *server, const char *data) g_return_if_fail(data != NULL); params = event_get_params(data, 3 | PARAM_FLAG_GETREST, NULL, &nick, &str); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_SPECIAL, nick, str); g_free(params); } @@ -60,11 +70,11 @@ static void event_whois_idle(IRC_SERVER_REC *server, const char *data) secs %= 60; if (signon == 0) - printformat(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_IDLE, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_IDLE, nick, days, hours, mins, secs); else { timestr = my_asctime(signon); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_IDLE_SIGNON, nick, days, hours, mins, secs, timestr); g_free(timestr); @@ -79,7 +89,7 @@ static void event_whois_server(IRC_SERVER_REC *server, const char *data) g_return_if_fail(data != NULL); params = event_get_params(data, 4, NULL, &nick, &whoserver, &desc); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_SERVER, nick, whoserver, desc); g_free(params); } @@ -105,7 +115,7 @@ static void event_whois_oper(IRC_SERVER_REC *server, const char *data) if (*type == '\0') type = "IRC Operator"; - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_OPER, nick, type); g_free(params); } @@ -120,7 +130,7 @@ static void event_whois_modes(IRC_SERVER_REC *server, const char *data) NULL, &nick, &modes); if (!strncmp(modes, "is using modes ", 15)) modes += 15; - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_MODES, nick, modes); g_free(params); } @@ -147,7 +157,7 @@ static void event_whois_realhost(IRC_SERVER_REC *server, const char *data) if (hostname != NULL) { if (!strncmp(hostname, "*@", 2)) hostname += 2; - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_REALHOST, nick, hostname, ""); } else { event_whois_special(server, data); @@ -163,7 +173,7 @@ static void event_whois_usermode326(IRC_SERVER_REC *server, const char *data) /* :has oper privs: */ params = event_get_params(data, 3, NULL, &nick, &usermode); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_USERMODE, nick, usermode); g_free(params); } @@ -177,7 +187,7 @@ static void event_whois_realhost327(IRC_SERVER_REC *server, const char *data) /* :Real hostname/IP */ params = event_get_params(data, 5, NULL, &nick, &hostname, &ip, &text); if (*text != '\0') { - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_REALHOST, nick, hostname, ip); } else { event_whois_special(server, data); @@ -199,10 +209,10 @@ static void event_whois_realhost338(IRC_SERVER_REC *server, const char *data) */ params = event_get_params(data, 5, NULL, &nick, &arg1, &arg2, &arg3); if (*arg3 != '\0') { - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_REALHOST, nick, arg1, arg2); } else if (*arg2 != '\0') { - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_REALHOST, nick, arg1, ""); } else { event_whois_special(server, data); @@ -221,7 +231,7 @@ static void event_whois_usermode(IRC_SERVER_REC *server, const char *data) if (g_strcmp0(txt_usermodes, "usermodes") == 0) { /* usermodes usermode */ - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_USERMODE, nick, usermode); } else { event_whois_special(server, data); @@ -292,7 +302,7 @@ static void event_whois_channels(IRC_SERVER_REC *server, const char *data) if (settings_get_bool("whois_hide_safe_channel_id")) hide_safe_channel_id(server, chans); recoded = recode_in(SERVER(server), chans, nick); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_CHANNELS, nick, recoded); g_free(chans); @@ -308,7 +318,7 @@ static void event_whois_away(IRC_SERVER_REC *server, const char *data) params = event_get_params(data, 3, NULL, &nick, &awaymsg); recoded = recode_in(SERVER(server), awaymsg, nick); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_AWAY, nick, recoded); g_free(params); g_free(recoded); @@ -322,7 +332,7 @@ static void event_end_of_whois(IRC_SERVER_REC *server, const char *data) params = event_get_params(data, 2, NULL, &nick); if (server->whois_found) { - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_END_OF_WHOIS, nick); } g_free(params); @@ -335,7 +345,7 @@ static void event_whois_auth(IRC_SERVER_REC *server, const char *data) g_return_if_fail(data != NULL); params = event_get_params(data, 3, NULL, &nick, &text); - printformat(server, nick, MSGLEVEL_CRAP, + WHOIS_PRINT(server, nick, MSGLEVEL_CRAP, IRCTXT_WHOIS_EXTRA, nick, text); g_free(params); } @@ -406,6 +416,7 @@ static void event_whois_default(IRC_SERVER_REC *server, const char *data) void fe_whois_init(void) { settings_add_bool("lookandfeel", "whois_hide_safe_channel_id", TRUE); + settings_add_bool("lookandfeel", "whois_reply_active_window", FALSE); signal_add("event 311", (SIGNAL_FUNC) event_whois); signal_add("event 312", (SIGNAL_FUNC) event_whois_server);