From 44dfd66a5ce3654c62147dd40397155cdbc95dd2 Mon Sep 17 00:00:00 2001 From: huwwa Date: Sat, 11 Jul 2026 17:21:23 +0300 Subject: [PATCH] minibuf: resolve bindings redefinition * enable search bindings on `search_completion` entry and disable them on exit. --- qe.c | 8 ++++---- search.c | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/qe.c b/qe.c index 70b1439..fb01886 100644 --- a/qe.c +++ b/qe.c @@ -8586,18 +8586,18 @@ static const CmdDef minibuffer_commands[] = { "Yank from kill buffer with side effects", do_minibuffer_electric_yank, ES, "*") /* commands used to configure search flags */ - CMD0( "minibuffer-toggle-case-fold", "M-c, C-c", + CMD0( "minibuffer-toggle-case-fold", "", "toggle search case-sensitivity", isearch_toggle_case_fold) - CMD0( "minibuffer-toggle-hex", "M-h, M-C-b", + CMD0( "minibuffer-toggle-hex", "", "toggle normal/hex/unihex searching", isearch_toggle_hex) #ifdef CONFIG_REGEX - CMD0( "minibuffer-toggle-regexp", "M-r, C-t", + CMD0( "minibuffer-toggle-regexp", "", "toggle regular-expression mode", isearch_toggle_regexp) #endif - CMD0( "minibuffer-toggle-word-match", "M-w", + CMD0( "minibuffer-toggle-word-match", "", "toggle word match", isearch_toggle_word_match) }; diff --git a/search.c b/search.c index 0a6dd25..02d3d5c 100644 --- a/search.c +++ b/search.c @@ -1474,11 +1474,32 @@ void do_search_string(EditState *s, const char *search_str, int mode) } } +static void minibuffer_search_bindings(EditState *s, int enable) +{ + /* bindings used to configure search flags */ + if (enable) { + do_set_key(s, "M-c, C-c", "minibuffer-toggle-case-fold", 1); + do_set_key(s, "M-h, M-C-b", "minibuffer-toggle-hex", 1); + do_set_key(s, "M-w", "minibuffer-toggle-word-match", 1); +#ifdef CONFIG_REGEX + do_set_key(s, "M-r, C-t", "minibuffer-toggle-regexp", 1); +#endif + } else { + do_unset_key(s, "M-c, C-c", 1); + do_unset_key(s, "M-h, M-C-b", 1); + do_unset_key(s, "M-w", 1); +#ifdef CONFIG_REGEX + do_unset_key(s, "M-r, C-t", 1); +#endif + } +} + static void minibuffer_search_start_edit(EditState *s) { ISearchState *is = set_search_state(s->target_window, 1, 1); if (is != NULL) { is->minibuffer = s; isearch_cycle_flags(s, 0); + minibuffer_search_bindings(s, 1); } } @@ -1489,6 +1510,7 @@ static void minibuffer_search_end_edit(EditState *s, char *dest, int size) { s1->isearch_state->minibuffer = NULL; s1->isearch_state = NULL; // XXX: should free the ISearchState structure + minibuffer_search_bindings(s, 0); } }