degesch: start with lexically ordered chanusers
This makes nick autocompletion start in a non-arbitrary state.
This commit is contained in:
parent
3cb93d24e8
commit
7c7e12d8d5
24
degesch.c
24
degesch.c
|
@ -7606,6 +7606,25 @@ channel_user_sort_entry_cmp (const void *entry_a, const void *entry_b)
|
|||
b->channel_user->user->nickname);
|
||||
}
|
||||
|
||||
static void
|
||||
irc_sort_channel_users (struct channel *channel)
|
||||
{
|
||||
size_t n_users = channel->users_len;
|
||||
struct channel_user_sort_entry entries[n_users], *p = entries;
|
||||
LIST_FOR_EACH (struct channel_user, iter, channel->users)
|
||||
{
|
||||
p->s = channel->s;
|
||||
p->channel_user = iter;
|
||||
p++;
|
||||
}
|
||||
|
||||
qsort (entries, n_users, sizeof *entries, channel_user_sort_entry_cmp);
|
||||
|
||||
channel->users = NULL;
|
||||
while (p-- != entries)
|
||||
LIST_PREPEND (channel->users, p->channel_user);
|
||||
}
|
||||
|
||||
static char *
|
||||
make_channel_users_list (struct channel *channel)
|
||||
{
|
||||
|
@ -7676,6 +7695,9 @@ irc_process_names (struct channel *channel)
|
|||
struct str_map present = str_map_make (NULL);
|
||||
present.key_xfrm = channel->s->irc_strxfrm;
|
||||
|
||||
// Either that, or there is no other inhabitant, and sorting does nothing
|
||||
bool we_have_just_joined = channel->users_len == 1;
|
||||
|
||||
struct strv *updates = &channel->names_buf;
|
||||
for (size_t i = 0; i < updates->len; i++)
|
||||
{
|
||||
|
@ -7699,6 +7721,8 @@ irc_process_names (struct channel *channel)
|
|||
str_map_free (&present);
|
||||
strv_reset (&channel->names_buf);
|
||||
|
||||
if (we_have_just_joined)
|
||||
irc_sort_channel_users (channel);
|
||||
if (!channel->show_names_after_who)
|
||||
irc_process_names_finish (channel);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue