degesch: make showing all prefixes optional
This commit is contained in:
parent
e631803387
commit
74c9759932
89
degesch.c
89
degesch.c
|
@ -1323,6 +1323,7 @@ struct app_context
|
||||||
bool isolate_buffers; ///< Isolate global/server buffers
|
bool isolate_buffers; ///< Isolate global/server buffers
|
||||||
bool beep_on_highlight; ///< Beep on highlight
|
bool beep_on_highlight; ///< Beep on highlight
|
||||||
bool logging; ///< Logging to file enabled
|
bool logging; ///< Logging to file enabled
|
||||||
|
bool show_all_prefixes; ///< Show all prefixes before nicks
|
||||||
|
|
||||||
struct str_map servers; ///< Our servers
|
struct str_map servers; ///< Our servers
|
||||||
|
|
||||||
|
@ -1444,6 +1445,14 @@ on_config_debug_mode_change (struct config_item_ *item)
|
||||||
g_debug_mode = item->value.boolean;
|
g_debug_mode = item->value.boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_config_show_all_prefixes_change (struct config_item_ *item)
|
||||||
|
{
|
||||||
|
struct app_context *ctx = item->user_data;
|
||||||
|
ctx->show_all_prefixes = item->value.boolean;
|
||||||
|
refresh_prompt (ctx);
|
||||||
|
}
|
||||||
|
|
||||||
static void on_config_attribute_change (struct config_item_ *item);
|
static void on_config_attribute_change (struct config_item_ *item);
|
||||||
static void on_config_logging_change (struct config_item_ *item);
|
static void on_config_logging_change (struct config_item_ *item);
|
||||||
|
|
||||||
|
@ -1621,6 +1630,11 @@ static struct config_schema g_config_behaviour[] =
|
||||||
.type = CONFIG_ITEM_BOOLEAN,
|
.type = CONFIG_ITEM_BOOLEAN,
|
||||||
.default_ = "on",
|
.default_ = "on",
|
||||||
.on_change = on_config_beep_on_highlight_change },
|
.on_change = on_config_beep_on_highlight_change },
|
||||||
|
{ .name = "show_all_prefixes",
|
||||||
|
.comment = "Show all prefixes in front of nicknames",
|
||||||
|
.type = CONFIG_ITEM_BOOLEAN,
|
||||||
|
.default_ = "off",
|
||||||
|
.on_change = on_config_show_all_prefixes_change },
|
||||||
{ .name = "logging",
|
{ .name = "logging",
|
||||||
.comment = "Log buffer contents to file",
|
.comment = "Log buffer contents to file",
|
||||||
.type = CONFIG_ITEM_BOOLEAN,
|
.type = CONFIG_ITEM_BOOLEAN,
|
||||||
|
@ -3257,6 +3271,16 @@ irc_get_or_make_user_buffer (struct server *s, const char *nickname)
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
irc_get_channel_user_prefix (struct server *s,
|
||||||
|
struct channel_user *channel_user, struct str *output)
|
||||||
|
{
|
||||||
|
if (s->ctx->show_all_prefixes)
|
||||||
|
str_append (output, channel_user->prefixes.str);
|
||||||
|
else if (channel_user->prefixes.len)
|
||||||
|
str_append_c (output, channel_user->prefixes.str[0]);
|
||||||
|
}
|
||||||
|
|
||||||
// Note that this eats the user reference
|
// Note that this eats the user reference
|
||||||
static void
|
static void
|
||||||
irc_channel_link_user (struct channel *channel, struct user *user,
|
irc_channel_link_user (struct channel *channel, struct user *user,
|
||||||
|
@ -4571,6 +4595,23 @@ make_chanmode_postfix (struct channel *channel, struct str *modes)
|
||||||
str_append_c (modes, iter.link->key[0]);
|
str_append_c (modes, iter.link->key[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
make_server_postfix_registered (struct buffer *buffer, struct str *output)
|
||||||
|
{
|
||||||
|
struct server *s = buffer->server;
|
||||||
|
if (buffer->type == BUFFER_CHANNEL)
|
||||||
|
{
|
||||||
|
struct server *s = buffer->server;
|
||||||
|
struct channel_user *channel_user =
|
||||||
|
irc_channel_get_user (buffer->channel, s->irc_user);
|
||||||
|
if (channel_user)
|
||||||
|
irc_get_channel_user_prefix (s, channel_user, output);
|
||||||
|
}
|
||||||
|
str_append (output, s->irc_user->nickname);
|
||||||
|
if (s->irc_user_mode.len)
|
||||||
|
str_append_printf (output, "(%s)", s->irc_user_mode.str);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
make_server_postfix (struct buffer *buffer, struct str *output)
|
make_server_postfix (struct buffer *buffer, struct str *output)
|
||||||
{
|
{
|
||||||
|
@ -4581,18 +4622,7 @@ make_server_postfix (struct buffer *buffer, struct str *output)
|
||||||
else if (s->state != IRC_REGISTERED)
|
else if (s->state != IRC_REGISTERED)
|
||||||
str_append (output, "(unregistered)");
|
str_append (output, "(unregistered)");
|
||||||
else
|
else
|
||||||
{
|
make_server_postfix_registered (buffer, output);
|
||||||
if (buffer->type == BUFFER_CHANNEL)
|
|
||||||
{
|
|
||||||
struct channel_user *channel_user =
|
|
||||||
irc_channel_get_user (buffer->channel, s->irc_user);
|
|
||||||
if (channel_user)
|
|
||||||
str_append (output, channel_user->prefixes.str);
|
|
||||||
}
|
|
||||||
str_append (output, s->irc_user->nickname);
|
|
||||||
if (s->irc_user_mode.len)
|
|
||||||
str_append_printf (output, "(%s)", s->irc_user_mode.str);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
static void
|
static void
|
||||||
make_prompt (struct app_context *ctx, struct str *output)
|
make_prompt (struct app_context *ctx, struct str *output)
|
||||||
|
@ -4724,18 +4754,20 @@ irc_is_highlight (struct server *s, const char *message)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *
|
static char *
|
||||||
irc_get_privmsg_prefix (struct server *s, struct user *user, const char *target)
|
irc_get_privmsg_prefix (struct server *s, struct user *user, const char *target)
|
||||||
{
|
{
|
||||||
|
struct str prefix;
|
||||||
|
str_init (&prefix);
|
||||||
if (user && irc_is_channel (s, target))
|
if (user && irc_is_channel (s, target))
|
||||||
{
|
{
|
||||||
struct channel *channel;
|
struct channel *channel;
|
||||||
struct channel_user *channel_user;
|
struct channel_user *channel_user;
|
||||||
if ((channel = str_map_find (&s->irc_channels, target))
|
if ((channel = str_map_find (&s->irc_channels, target))
|
||||||
&& (channel_user = irc_channel_get_user (channel, user)))
|
&& (channel_user = irc_channel_get_user (channel, user)))
|
||||||
return channel_user->prefixes.str;
|
irc_get_channel_user_prefix (s, channel_user, &prefix);
|
||||||
}
|
}
|
||||||
return "";
|
return str_steal (&prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Mode processor ----------------------------------------------------------
|
// --- Mode processor ----------------------------------------------------------
|
||||||
|
@ -5770,6 +5802,24 @@ irc_sync_channel_user (struct server *s, struct channel *channel,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *
|
||||||
|
make_channel_users_list (struct server *s, struct channel *channel)
|
||||||
|
{
|
||||||
|
struct str_vector v;
|
||||||
|
str_vector_init (&v);
|
||||||
|
LIST_FOR_EACH (struct channel_user, iter, channel->users)
|
||||||
|
{
|
||||||
|
struct str item;
|
||||||
|
str_init (&item);
|
||||||
|
irc_get_channel_user_prefix (s, iter, &item);
|
||||||
|
str_append (&item, iter->user->nickname);
|
||||||
|
str_vector_add_owned (&v, str_steal (&item));
|
||||||
|
}
|
||||||
|
char *result = join_str_vector (&v, ' ');
|
||||||
|
str_vector_free (&v);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
irc_process_names (struct server *s, struct channel *channel)
|
irc_process_names (struct server *s, struct channel *channel)
|
||||||
{
|
{
|
||||||
|
@ -5800,14 +5850,7 @@ irc_process_names (struct server *s, struct channel *channel)
|
||||||
str_map_free (&present);
|
str_map_free (&present);
|
||||||
str_vector_reset (&channel->names_buf);
|
str_vector_reset (&channel->names_buf);
|
||||||
|
|
||||||
struct str_vector v;
|
char *all_users = make_channel_users_list (s, channel);
|
||||||
str_vector_init (&v);
|
|
||||||
LIST_FOR_EACH (struct channel_user, iter, channel->users)
|
|
||||||
str_vector_add_owned (&v,
|
|
||||||
xstrdup_printf ("%s%s", iter->prefixes.str, iter->user->nickname));
|
|
||||||
char *all_users = join_str_vector (&v, ' ');
|
|
||||||
str_vector_free (&v);
|
|
||||||
|
|
||||||
struct buffer *buffer = str_map_find (&s->irc_buffer_map, channel->name);
|
struct buffer *buffer = str_map_find (&s->irc_buffer_map, channel->name);
|
||||||
if (buffer)
|
if (buffer)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue