degesch: order nick autocomplete by time

This commit is contained in:
Přemysl Eric Janouch 2021-07-23 18:42:21 +02:00
parent acddfe2cfa
commit 3cb93d24e8
Signed by: p
GPG Key ID: A0420B94F92B9493
2 changed files with 22 additions and 0 deletions

5
NEWS
View File

@ -1,3 +1,8 @@
1.3.0 (20xx-xx-xx)
* degesch: made nick autocompletion ordered by the time of last action
1.2.0 (2021-07-08) "There Are Other Countries As Well" 1.2.0 (2021-07-08) "There Are Other Countries As Well"
* degesch: added a /squery command for IRCnet * degesch: added a /squery command for IRCnet

View File

@ -459,6 +459,10 @@ input_rl_start (void *input, const char *program_name)
rl_completer_word_break_characters = NULL; rl_completer_word_break_characters = NULL;
rl_attempted_completion_function = app_readline_completion; rl_attempted_completion_function = app_readline_completion;
// We shouldn't produce any duplicates that the library would help us
// autofilter, and we don't generally want alphabetic ordering at all
rl_sort_completion_matches = false;
hard_assert (self->prompt != NULL); hard_assert (self->prompt != NULL);
// The inputrc is read before any callbacks are called, so we need to // The inputrc is read before any callbacks are called, so we need to
// register all functions that our user may want to map up front // register all functions that our user may want to map up front
@ -7266,6 +7270,19 @@ irc_handle_privmsg_text (struct server *s,
char *prefixes = irc_get_privmsg_prefix char *prefixes = irc_get_privmsg_prefix
(s, str_map_find (&s->irc_users, nickname), target); (s, str_map_find (&s->irc_users, nickname), target);
// Make autocomplete offer the last speakers first on partial matches
// TODO: might want to do this on notices as well, and the behaviour
// shouldn't change depending on whether CAP echo-message is enabled
struct user *user;
struct channel_user *channel_user;
if (buffer->channel
&& (user = str_map_find (&s->irc_users, nickname))
&& (channel_user = irc_channel_get_user (buffer->channel, user)))
{
LIST_UNLINK (buffer->channel->users, channel_user);
LIST_PREPEND (buffer->channel->users, channel_user);
}
// IRCv3.2 echo-message could otherwise cause us to highlight ourselves // IRCv3.2 echo-message could otherwise cause us to highlight ourselves
if (irc_is_this_us (s, msg->prefix) || !irc_is_highlight (s, text->str)) if (irc_is_this_us (s, msg->prefix) || !irc_is_highlight (s, text->str))
{ {