From 21e5d80ab1505442c96e11075f09d98bcaa211ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?=
Date: Sun, 18 Sep 2022 02:40:53 +0200 Subject: [PATCH] xC: improve Readline completion The autocomplete for /set used to be extremely annoying, and menu-complete-display-prefix also prevents mistaken highlights. One downside is that using plain Tab in channels no longer just inserts the last-talking nickname, one needs to press it twice. --- NEWS | 3 +++ xC.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/NEWS b/NEWS index dcf8c54..3c0adfc 100644 --- a/NEWS +++ b/NEWS @@ -18,6 +18,9 @@ * xC: unsolicited JOINs will no longer automatically activate the buffer + * xC: made Readline insert the longest common completion prefix first, + and prevented the possible-completions command from duplicating the prompt + * xC: normalized editline's history behaviour, making it a viable frontend * xC: various bugfixes diff --git a/xC.c b/xC.c index e6ece0d..211f3e0 100644 --- a/xC.c +++ b/xC.c @@ -14434,6 +14434,15 @@ app_readline_completion (const char *text, int start, int end) return make_input_completions (g_ctx, rl_line_buffer, start, end); } +static void +app_readline_display_matches (char **matches, int len, int longest) +{ + struct app_context *ctx = g_ctx; + CALL (ctx->input, hide); + rl_display_match_list (matches, len, longest); + CALL (ctx->input, show); +} + static int app_readline_init (void) { @@ -14458,7 +14467,10 @@ app_readline_init (void) rl_bind_key (RETURN, rl_named_function ("send-line")); CALL_ (self, bind_control, 'j', "send-line"); + rl_completion_display_matches_hook = app_readline_display_matches; + rl_variable_bind ("completion-ignore-case", "on"); + rl_variable_bind ("menu-complete-display-prefix", "on"); rl_bind_key (TAB, rl_named_function ("menu-complete")); if (key_btab) CALL_ (self, bind, key_btab, "menu-complete-backward");