diff --git a/Changelog b/Changelog index 70b99ef..86ce78c 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,9 @@ [Changes 1.2c01 ] +* Rework /SCAN and /NAMES formatting. This removes the /FSETs NAMES_BOTCOLOR, + NAMES_FRIENDCOLOR, NAMES_NICKCOLOR, NAMES_OPCOLOR, NAMES_SHITCOLOR and + NAMES_VOICECOLOR and replaces them with new /FSETs. (caf) + * Add $ishalfop( NAMES_NICK_BOT > NAMES_NICK_FRIEND > NAMES_NICK_SHIT > +NAMES_NICK). The NAMES_USER formats control how the overall entry appears in +the /NAMES or /SCAN line, depending on the channel status of the nick (the +priority order is NAMES_USER_CHANOP > NAMES_USER_VOICE > NAMES_USER_IRCOP > +NAMES_USER). + +You'll need to update any scripts or custom formats that altered the old +formats. If you just use the defaults, the main difference you'll see is +that your own nick is now shown in white, and voiced users are shown with +the '+' sent by the server instead of the 'v'. You can go back to the old +look by setting these formats: + +/FSET NAMES_NICK_ME %B$[10]0 +/FSET NAMES_USER_VOICE %K[%Mv%n$1-%K] + diff --git a/include/color.h b/include/color.h index 5c11c35..385f899 100644 --- a/include/color.h +++ b/include/color.h @@ -144,21 +144,25 @@ /* Done NAMES */ #define DEFAULT_FORMAT_NAMES_BANNER_FSET "$G " #define DEFAULT_FORMAT_NAMES_FSET "$G %K[%cUsers%K(%W$1%K:%W$2%K)]%c $3" -#define DEFAULT_FORMAT_NAMES_NICKCOLOR_FSET "%K[%w $[10]1%K]" #define DEFAULT_FORMAT_NAMES_NONOP_FSET "$G %K[%cNonChanOps%K(%W$1%K:%W$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_OP_FSET "$G %K[%cChanOps%K(%W$1%K:%W$2%K)]%c $3" -#define DEFAULT_FORMAT_NAMES_OPCOLOR_FSET "%K[%c$0%w$[10]1%K]" #define DEFAULT_FORMAT_NAMES_PROMPT_FSET "$G $0-" #define DEFAULT_FORMAT_NAMES_VOICE_FSET "$G %K[%cVoiceUsers%K(%W$1%K:%W$2%K)]%c $3" -#define DEFAULT_FORMAT_NAMES_VOICECOLOR_FSET "%K[%M$0%w$[10]1%K]" +#define DEFAULT_FORMAT_NAMES_NICK_FSET "%B$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_BOT_FSET "%G$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET "%Y$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_ME_FSET "%W$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_SHIT_FSET "%R$[10]0" + +#define DEFAULT_FORMAT_NAMES_USER_FSET "%K[ %n$1-%K]" +#define DEFAULT_FORMAT_NAMES_USER_CHANOP_FSET "%K[%C$0%n$1-%K]" +#define DEFAULT_FORMAT_NAMES_USER_IRCOP_FSET "%K[%R$0%n$1-%K]" +#define DEFAULT_FORMAT_NAMES_USER_VOICE_FSET "%K[%M$0%n$1-%K]" /* In bx but not hades*/ #define DEFAULT_FORMAT_NAMES_BOT_FSET "$G %K[%GBots%K(%g$1%K:%g$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_FRIEND_FSET "$G %K[%GFriends%K(%g$1%K:%g$2%K)]%c $3" -#define DEFAULT_FORMAT_NAMES_BOTCOLOR_FSET "%K[%C$0%G$[10]1%K]" -#define DEFAULT_FORMAT_NAMES_FRIENDCOLOR_FSET "%K[%C$0%Y$[10]1%K]" #define DEFAULT_FORMAT_NAMES_IRCOP_FSET "$G %K[%GIrcOps%K(%g$1%K:%g$2%K)]%c $3" #define DEFAULT_FORMAT_NAMES_SHIT_FSET "$G %K[%MShitUsers%K(%m$1%K:%m$2%K)]%c $3" -#define DEFAULT_FORMAT_NAMES_SHITCOLOR_FSET "%K[%C$0%n%R$[10]1%K]" #define DEFAULT_FORMAT_NETADD_FSET "$G %nAdded: %W$1 $2" #define DEFAULT_FORMAT_NETSPLIT_FSET "$G %nNetsplit detected%K: %W$1%n split from %W$2 %K[%c$0%K]" @@ -566,17 +570,21 @@ #define DEFAULT_FORMAT_NAMES_FSET ansi?"$G %K[%GUsers%K(%g$1%K:%g$2%K)]%c $3":"$G [Users($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_BOT_FSET ansi?"$G %K[%GBots%K(%g$1%K:%g$2%K)]%c $3":"$G [Bots($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_FRIEND_FSET ansi?"$G %K[%GFriends%K(%g$1%K:%g$2%K)]%c $3":"$G [Friends($1:$2)] $3" -#define DEFAULT_FORMAT_NAMES_BOTCOLOR_FSET ansi?"%K[%C$0%G$[10]1%K]":"[$0$[10]1]" -#define DEFAULT_FORMAT_NAMES_FRIENDCOLOR_FSET ansi?"%K[%C$0%Y$[10]1%K]":"[$0$[10]1]" -#define DEFAULT_FORMAT_NAMES_NICKCOLOR_FSET ansi?"%K[%B $[10]1%K]":"[ $[10]1]" #define DEFAULT_FORMAT_NAMES_NONOP_FSET ansi?"$G %K[%GNonChanOps%K(%g$1%K:%g$2%K)]%c $3":"$G [NonChanOps($1:$2)] $3" -#define DEFAULT_FORMAT_NAMES_VOICECOLOR_FSET ansi?"%K[%Mv%B$[10]1%K]":"[v$[10]1]" #define DEFAULT_FORMAT_NAMES_OP_FSET ansi?"$G %K[%GChanOps%K(%g$1%K:%g$2%K)]%c $3":"$G [ChanOps($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_IRCOP_FSET ansi?"$G %K[%GIrcOps%K(%g$1%K:%g$2%K)]%c $3":"$G [IrcOps($1:$2)] $3" #define DEFAULT_FORMAT_NAMES_SHIT_FSET ansi?"$G %K[%MShitUsers%K(%m$1%K:%m$2%K)]%c $3":"$G [ShitUsers(_$1:$2_)] $3" -#define DEFAULT_FORMAT_NAMES_SHITCOLOR_FSET ansi?"%K[%C$0%n%R$[10]1%K]":"[_$0$[10]1_]" #define DEFAULT_FORMAT_NAMES_VOICE_FSET ansi?"$G %K[%MVoiceUsers%K(%m$1%K:%m$2%K)]%c $3":"$G [VoiceUsers($1:$2)] $3" -#define DEFAULT_FORMAT_NAMES_OPCOLOR_FSET ansi?"%K[%C$0%n%B$[10]1%K]":"[$0$[10]1]" +#define DEFAULT_FORMAT_NAMES_NICK_FSET ansi?"%B$[10]0":"$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_BOT_FSET ansi?"%G$[10]0":"$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET ansi?"%Y$[10]0":"$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_ME_FSET ansi?"%W$[10]0":"$[10]0" +#define DEFAULT_FORMAT_NAMES_NICK_SHIT_FSET ansi?"%R$[10]0":"$[10]0" + +#define DEFAULT_FORMAT_NAMES_USER_FSET ansi?"%K[ %n$1-%K]":"[ $1-]" +#define DEFAULT_FORMAT_NAMES_USER_CHANOP_FSET ansi?"%K[%C$0%n$1-%K]":"[$0$1-]" +#define DEFAULT_FORMAT_NAMES_USER_IRCOP_FSET ansi?"%K[%R$0%n$1-%K]":"[$0$1-]" +#define DEFAULT_FORMAT_NAMES_USER_VOICE_FSET ansi?"%K[%M$0%n$1-%K]":"[$0$1-]" #define DEFAULT_FORMAT_NETADD_FSET "$G %nAdded: %W$1 $2" #define DEFAULT_FORMAT_NETJOIN_FSET "$G %nNetjoined: %W$1 $2" diff --git a/include/cset.h b/include/cset.h index 644f157..53dc679 100644 --- a/include/cset.h +++ b/include/cset.h @@ -227,19 +227,22 @@ FORMAT_MSG_GROUP_FSET, FORMAT_NAMES_FSET, FORMAT_NAMES_BANNER_FSET, FORMAT_NAMES_BOT_FSET, -FORMAT_NAMES_BOTCOLOR_FSET, FORMAT_NAMES_FOOTER_FSET, FORMAT_NAMES_FRIEND_FSET, -FORMAT_NAMES_FRIENDCOLOR_FSET, FORMAT_NAMES_IRCOP_FSET, -FORMAT_NAMES_NICKCOLOR_FSET, +FORMAT_NAMES_NICK_FSET, +FORMAT_NAMES_NICK_BOT_FSET, +FORMAT_NAMES_NICK_FRIEND_FSET, +FORMAT_NAMES_NICK_ME_FSET, +FORMAT_NAMES_NICK_SHIT_FSET, FORMAT_NAMES_NONOP_FSET, FORMAT_NAMES_OP_FSET, -FORMAT_NAMES_OPCOLOR_FSET, FORMAT_NAMES_SHIT_FSET, -FORMAT_NAMES_SHITCOLOR_FSET, +FORMAT_NAMES_USER_FSET, +FORMAT_NAMES_USER_CHANOP_FSET, +FORMAT_NAMES_USER_IRCOP_FSET, +FORMAT_NAMES_USER_VOICE_FSET, FORMAT_NAMES_VOICE_FSET, -FORMAT_NAMES_VOICECOLOR_FSET, FORMAT_NETADD_FSET, FORMAT_NETJOIN_FSET, diff --git a/source/commands.c b/source/commands.c index bb9c27c..5549324 100644 --- a/source/commands.c +++ b/source/commands.c @@ -1414,6 +1414,8 @@ int cols = get_int_var(NAMES_COLUMNS_VAR); for (nick = snick; nick; nick = nick->next) { char *nick_format; + char *user_format; + char *nick_buffer = NULL; char nick_sym; if (match_host) @@ -1435,36 +1437,54 @@ int cols = get_int_var(NAMES_COLUMNS_VAR); || (shit && !nick->shitlist)) continue; - /* Determine the format string to use */ - if (nick->userlist) - nick_format = fget_string_var(FORMAT_NAMES_FRIENDCOLOR_FSET); + /* Determine the nick format string to use */ + if (my_stricmp(nick->nick, get_server_nickname(server)) == 0) + nick_format = fget_string_var(FORMAT_NAMES_NICK_ME_FSET); + else if (nick->userlist && (nick->userlist->flags & ADD_BOT)) + nick_format = fget_string_var(FORMAT_NAMES_NICK_BOT_FSET); + else if (nick->userlist) + nick_format = fget_string_var(FORMAT_NAMES_NICK_FRIEND_FSET); else if (nick->shitlist) - nick_format = fget_string_var(FORMAT_NAMES_SHITCOLOR_FSET); - else if (nick_isop(nick) || nick_ishalfop(nick)) - nick_format = fget_string_var(FORMAT_NAMES_OPCOLOR_FSET); - else if (nick_isvoice(nick)) - nick_format = fget_string_var(FORMAT_NAMES_VOICECOLOR_FSET); - else if (nick_isircop(nick)) - nick_format = fget_string_var(FORMAT_NAMES_OPCOLOR_FSET); + nick_format = fget_string_var(FORMAT_NAMES_NICK_SHIT_FSET); else - nick_format = fget_string_var(FORMAT_NAMES_NICKCOLOR_FSET); + nick_format = fget_string_var(FORMAT_NAMES_NICK_FSET); - /* Determine the special symbol, if any, to use. */ + /* Determine the user format and indicator symbol to use. */ if (nick_isop(nick)) + { + user_format = fget_string_var(FORMAT_NAMES_USER_CHANOP_FSET); nick_sym = '@'; + } else if (nick_ishalfop(nick)) + { + user_format = fget_string_var(FORMAT_NAMES_USER_CHANOP_FSET); nick_sym = '%'; + } else if (nick_isvoice(nick)) + { + user_format = fget_string_var(FORMAT_NAMES_USER_VOICE_FSET); nick_sym = '+'; + } else if (nick_isircop(nick)) + { + user_format = fget_string_var(FORMAT_NAMES_USER_IRCOP_FSET); nick_sym = '*'; + } else + { + user_format = fget_string_var(FORMAT_NAMES_USER_FSET); nick_sym = '.'; + } + /* Construct the string */ + malloc_strcpy(&nick_buffer, convert_output_format(nick_format, + "%s", nick->nick)); malloc_strcat(&buffer, - convert_output_format(nick_format, "%c %s", nick_sym, - nick->nick)); + convert_output_format(user_format, "%c %s", nick_sym, + nick_buffer)); malloc_strcat(&buffer, space); + new_free(&nick_buffer); + if (count++ >= (cols - 1)) { if (fget_string_var(FORMAT_NAMES_BANNER_FSET)) diff --git a/source/fset.c b/source/fset.c index 6c4ee4d..48b2863 100644 --- a/source/fset.c +++ b/source/fset.c @@ -108,21 +108,23 @@ IrcVariable fset_array[] = { "MSG_GROUP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_BANNER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, - { "NAMES_BOT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, - { "NAMES_BOTCOLOR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_FOOTER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_FRIEND", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, - { "NAMES_FRIENDCOLOR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_IRCOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, - { "NAMES_NICKCOLOR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_NICK", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_NICK_BOT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_NICK_FRIEND", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_NICK_ME", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_NICK_SHIT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_NONOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_OP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, - { "NAMES_OPCOLOR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_SHIT", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, - { "NAMES_SHITCOLOR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_USER", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_USER_CHANOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_USER_IRCOP", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, + { "NAMES_USER_VOICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NAMES_VOICE", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, - { "NAMES_VOICECOLOR", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NETADD", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, { "NETJOIN", 0,STR_TYPE_VAR, 0, NULL, NULL, 0, 0}, @@ -629,17 +631,20 @@ void create_fsets(Window *win, int ansi) fset_string_var(FORMAT_NAMES_FSET, DEFAULT_FORMAT_NAMES_FSET); fset_string_var(FORMAT_NAMES_BOT_FSET, DEFAULT_FORMAT_NAMES_BOT_FSET); fset_string_var(FORMAT_NAMES_FRIEND_FSET, DEFAULT_FORMAT_NAMES_FRIEND_FSET); - fset_string_var(FORMAT_NAMES_BOTCOLOR_FSET, DEFAULT_FORMAT_NAMES_BOTCOLOR_FSET); - fset_string_var(FORMAT_NAMES_FRIENDCOLOR_FSET, DEFAULT_FORMAT_NAMES_FRIENDCOLOR_FSET); - fset_string_var(FORMAT_NAMES_NICKCOLOR_FSET, DEFAULT_FORMAT_NAMES_NICKCOLOR_FSET); + fset_string_var(FORMAT_NAMES_NICK_FSET, DEFAULT_FORMAT_NAMES_NICK_FSET); + fset_string_var(FORMAT_NAMES_NICK_BOT_FSET, DEFAULT_FORMAT_NAMES_NICK_BOT_FSET); + fset_string_var(FORMAT_NAMES_NICK_FRIEND_FSET, DEFAULT_FORMAT_NAMES_NICK_FRIEND_FSET); + fset_string_var(FORMAT_NAMES_NICK_ME_FSET, DEFAULT_FORMAT_NAMES_NICK_ME_FSET); + fset_string_var(FORMAT_NAMES_NICK_SHIT_FSET, DEFAULT_FORMAT_NAMES_NICK_SHIT_FSET); fset_string_var(FORMAT_NAMES_NONOP_FSET, DEFAULT_FORMAT_NAMES_NONOP_FSET); - fset_string_var(FORMAT_NAMES_VOICECOLOR_FSET, DEFAULT_FORMAT_NAMES_VOICECOLOR_FSET); fset_string_var(FORMAT_NAMES_OP_FSET, DEFAULT_FORMAT_NAMES_OP_FSET); fset_string_var(FORMAT_NAMES_IRCOP_FSET, DEFAULT_FORMAT_NAMES_IRCOP_FSET); fset_string_var(FORMAT_NAMES_SHIT_FSET, DEFAULT_FORMAT_NAMES_SHIT_FSET); - fset_string_var(FORMAT_NAMES_SHITCOLOR_FSET, DEFAULT_FORMAT_NAMES_SHITCOLOR_FSET); + fset_string_var(FORMAT_NAMES_USER_FSET, DEFAULT_FORMAT_NAMES_USER_FSET); + fset_string_var(FORMAT_NAMES_USER_CHANOP_FSET, DEFAULT_FORMAT_NAMES_USER_CHANOP_FSET); + fset_string_var(FORMAT_NAMES_USER_IRCOP_FSET, DEFAULT_FORMAT_NAMES_USER_IRCOP_FSET); + fset_string_var(FORMAT_NAMES_USER_VOICE_FSET, DEFAULT_FORMAT_NAMES_USER_VOICE_FSET); fset_string_var(FORMAT_NAMES_VOICE_FSET, DEFAULT_FORMAT_NAMES_VOICE_FSET); - fset_string_var(FORMAT_NAMES_OPCOLOR_FSET, DEFAULT_FORMAT_NAMES_OPCOLOR_FSET); fset_string_var(FORMAT_NETADD_FSET, DEFAULT_FORMAT_NETADD_FSET); fset_string_var(FORMAT_NETJOIN_FSET, DEFAULT_FORMAT_NETJOIN_FSET); fset_string_var(FORMAT_NETSPLIT_FSET, DEFAULT_FORMAT_NETSPLIT_FSET); diff --git a/source/funny.c b/source/funny.c index a295fc7..4fb23de 100644 --- a/source/funny.c +++ b/source/funny.c @@ -206,42 +206,76 @@ void funny_list(char *from, char **ArgList) reset_display_target(); } +/* print_funny_names + * + * This handles presenting the output of a NAMES reply. It is a cut-down + * version of the /SCAN output formatting. + */ void print_funny_names(char *line) { -register char *t; -int count = 0; -char buffer[BIG_BUFFER_SIZE+1]; -char special = '\0'; -int cols = get_int_var(NAMES_COLUMNS_VAR); + char *t; + int count = 0; + char buffer[BIG_BUFFER_SIZE]; + int cols = get_int_var(NAMES_COLUMNS_VAR); + if (!cols) cols = 1; + if (line && *line) { *buffer = 0; - t = next_arg(line, &line); - do { + + while (t = next_arg(line, &line)) { + char *nick; + char *nick_format; + char nick_buffer[BIG_BUFFER_SIZE]; + if (!count && fget_string_var(FORMAT_NAMES_BANNER_FSET)) - strcpy(buffer, convert_output_format(fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL)); - if (*t == '@' || *t == '+' || *t == '~' || *t == '-' || *t == '%') - { - special = *t; - if (special == '+') - strcat(buffer, convert_output_format(fget_string_var(FORMAT_NAMES_VOICECOLOR_FSET),"%c %s", special, ++t)); - else - strcat(buffer, convert_output_format(fget_string_var(FORMAT_NAMES_OPCOLOR_FSET),"%c %s", special, ++t)); - } + strlcat(buffer, convert_output_format( + fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), + sizeof buffer); + + /* Seperate the nick and the possible status presets that might + * preceede it. */ + nick = t + strspn(t, "@%+~-"); + nick_format = fget_string_var(isme(nick) ? + FORMAT_NAMES_NICK_ME_FSET : FORMAT_NAMES_NICK_FSET); + strlcpy(nick_buffer, + convert_output_format(nick_format, "%s", nick), + sizeof nick_buffer); + + if (nick != t) + { + char special = *t; + + if (special == '+') + strlcat(buffer, + convert_output_format( + fget_string_var(FORMAT_NAMES_USER_VOICE_FSET), + "%c %s", special, nick_buffer), sizeof buffer); + else + strlcat(buffer, + convert_output_format( + fget_string_var(FORMAT_NAMES_USER_CHANOP_FSET), + "%c %s", special, nick_buffer), sizeof buffer); + } else - strcat(buffer, convert_output_format(fget_string_var(FORMAT_NAMES_NICKCOLOR_FSET), "$ %s", t)); - strcat(buffer, space); - if (count++ >= (cols - 1)) + strlcat(buffer, + convert_output_format( + fget_string_var(FORMAT_NAMES_USER_FSET), ". %s", + nick_buffer), sizeof buffer); + + strlcat(buffer, space, sizeof buffer); + + if (++count >= cols) { put_it("%s", buffer); *buffer = 0; count = 0; } - } while ((t = next_arg(line, &line))); + } - if (buffer) + if (count) put_it("%s", buffer); } }