This commit is contained in:
kofany 2026-01-29 00:17:51 -08:00 committed by GitHub
commit 91dbbb68a5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -12,6 +12,16 @@
#include <irssi/src/fe-common/core/printtext.h> #include <irssi/src/fe-common/core/printtext.h>
/* 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) static void event_whois(IRC_SERVER_REC *server, const char *data)
{ {
char *params, *nick, *user, *host, *realname, *recoded; 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, params = event_get_params(data, 6, NULL, &nick, &user,
&host, NULL, &realname); &host, NULL, &realname);
recoded = recode_in(SERVER(server), realname, nick); recoded = recode_in(SERVER(server), realname, nick);
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS, nick, user, host, recoded); IRCTXT_WHOIS, nick, user, host, recoded);
g_free(params); g_free(params);
g_free(recoded); 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); g_return_if_fail(data != NULL);
params = event_get_params(data, 3 | PARAM_FLAG_GETREST, NULL, &nick, &str); 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); IRCTXT_WHOIS_SPECIAL, nick, str);
g_free(params); g_free(params);
} }
@ -60,11 +70,11 @@ static void event_whois_idle(IRC_SERVER_REC *server, const char *data)
secs %= 60; secs %= 60;
if (signon == 0) 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); nick, days, hours, mins, secs);
else { else {
timestr = my_asctime(signon); timestr = my_asctime(signon);
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_IDLE_SIGNON, IRCTXT_WHOIS_IDLE_SIGNON,
nick, days, hours, mins, secs, timestr); nick, days, hours, mins, secs, timestr);
g_free(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); g_return_if_fail(data != NULL);
params = event_get_params(data, 4, NULL, &nick, &whoserver, &desc); 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); IRCTXT_WHOIS_SERVER, nick, whoserver, desc);
g_free(params); g_free(params);
} }
@ -105,7 +115,7 @@ static void event_whois_oper(IRC_SERVER_REC *server, const char *data)
if (*type == '\0') if (*type == '\0')
type = "IRC Operator"; type = "IRC Operator";
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_OPER, nick, type); IRCTXT_WHOIS_OPER, nick, type);
g_free(params); g_free(params);
} }
@ -120,7 +130,7 @@ static void event_whois_modes(IRC_SERVER_REC *server, const char *data)
NULL, &nick, &modes); NULL, &nick, &modes);
if (!strncmp(modes, "is using modes ", 15)) if (!strncmp(modes, "is using modes ", 15))
modes += 15; modes += 15;
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_MODES, nick, modes); IRCTXT_WHOIS_MODES, nick, modes);
g_free(params); g_free(params);
} }
@ -147,7 +157,7 @@ static void event_whois_realhost(IRC_SERVER_REC *server, const char *data)
if (hostname != NULL) { if (hostname != NULL) {
if (!strncmp(hostname, "*@", 2)) if (!strncmp(hostname, "*@", 2))
hostname += 2; hostname += 2;
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_REALHOST, nick, hostname, ""); IRCTXT_WHOIS_REALHOST, nick, hostname, "");
} else { } else {
event_whois_special(server, data); event_whois_special(server, data);
@ -163,7 +173,7 @@ static void event_whois_usermode326(IRC_SERVER_REC *server, const char *data)
/* <yournick> <nick> :has oper privs: <mode> */ /* <yournick> <nick> :has oper privs: <mode> */
params = event_get_params(data, 3, NULL, &nick, &usermode); 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); IRCTXT_WHOIS_USERMODE, nick, usermode);
g_free(params); g_free(params);
} }
@ -177,7 +187,7 @@ static void event_whois_realhost327(IRC_SERVER_REC *server, const char *data)
/* <yournick> <hostname> <ip> :Real hostname/IP */ /* <yournick> <hostname> <ip> :Real hostname/IP */
params = event_get_params(data, 5, NULL, &nick, &hostname, &ip, &text); params = event_get_params(data, 5, NULL, &nick, &hostname, &ip, &text);
if (*text != '\0') { if (*text != '\0') {
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_REALHOST, nick, hostname, ip); IRCTXT_WHOIS_REALHOST, nick, hostname, ip);
} else { } else {
event_whois_special(server, data); 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); params = event_get_params(data, 5, NULL, &nick, &arg1, &arg2, &arg3);
if (*arg3 != '\0') { if (*arg3 != '\0') {
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_REALHOST, nick, arg1, arg2); IRCTXT_WHOIS_REALHOST, nick, arg1, arg2);
} else if (*arg2 != '\0') { } else if (*arg2 != '\0') {
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_REALHOST, nick, arg1, ""); IRCTXT_WHOIS_REALHOST, nick, arg1, "");
} else { } else {
event_whois_special(server, data); 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) { if (g_strcmp0(txt_usermodes, "usermodes") == 0) {
/* <yournick> usermodes <nick> usermode */ /* <yournick> usermodes <nick> usermode */
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_USERMODE, nick, usermode); IRCTXT_WHOIS_USERMODE, nick, usermode);
} else { } else {
event_whois_special(server, data); 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")) if (settings_get_bool("whois_hide_safe_channel_id"))
hide_safe_channel_id(server, chans); hide_safe_channel_id(server, chans);
recoded = recode_in(SERVER(server), chans, nick); recoded = recode_in(SERVER(server), chans, nick);
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_CHANNELS, nick, recoded); IRCTXT_WHOIS_CHANNELS, nick, recoded);
g_free(chans); 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); params = event_get_params(data, 3, NULL, &nick, &awaymsg);
recoded = recode_in(SERVER(server), awaymsg, nick); recoded = recode_in(SERVER(server), awaymsg, nick);
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_WHOIS_AWAY, nick, recoded); IRCTXT_WHOIS_AWAY, nick, recoded);
g_free(params); g_free(params);
g_free(recoded); 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); params = event_get_params(data, 2, NULL, &nick);
if (server->whois_found) { if (server->whois_found) {
printformat(server, nick, MSGLEVEL_CRAP, WHOIS_PRINT(server, nick, MSGLEVEL_CRAP,
IRCTXT_END_OF_WHOIS, nick); IRCTXT_END_OF_WHOIS, nick);
} }
g_free(params); 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); g_return_if_fail(data != NULL);
params = event_get_params(data, 3, NULL, &nick, &text); 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); IRCTXT_WHOIS_EXTRA, nick, text);
g_free(params); g_free(params);
} }
@ -406,6 +416,7 @@ static void event_whois_default(IRC_SERVER_REC *server, const char *data)
void fe_whois_init(void) void fe_whois_init(void)
{ {
settings_add_bool("lookandfeel", "whois_hide_safe_channel_id", TRUE); 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 311", (SIGNAL_FUNC) event_whois);
signal_add("event 312", (SIGNAL_FUNC) event_whois_server); signal_add("event 312", (SIGNAL_FUNC) event_whois_server);