[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: reverse-i-search, multibyte backspace problem
From: |
Eduardo A . Bustamante López |
Subject: |
Re: reverse-i-search, multibyte backspace problem |
Date: |
Sat, 18 Jul 2015 20:53:52 -0500 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
Hello,
Can you please try the 'devel' branch?
There's a fix for this issue already in it:
| commit 947f04912e4715e7a9df526cd99412bffa729368
| Author: Chet Ramey <chet.ramey@case.edu>
| Date: Tue Jan 27 11:10:49 2015 -0500
|
| commit bash-20150116 snapshot
Here's the description of the fix:
| lib/readline/isearch.c
| - _rl_isearch_dispatch: if we are in a multibyte locale, make sure to
use
| _rl_find_prev_mbchar when trying to delete characters from the
search
| string, instead of just chopping off the previous byte. Fixes bug
| reported by Kyrylo Shpytsya <kshpitsa@gmail.com>
This was reported earlier this year:
http://lists.gnu.org/archive/html/bug-readline/2015-01/msg00017.html
Or use this to patch:
| dualbus@yaqui ...src/gnu/bash % git diff origin/master
947f04912e4715e7a9df526cd99412bffa729368 -- lib/readline/isearch.c
| diff --git a/lib/readline/isearch.c b/lib/readline/isearch.c
| index 6f6a7a6..d768560 100644
| --- a/lib/readline/isearch.c
| +++ b/lib/readline/isearch.c
| @@ -553,8 +553,16 @@ add_character:
| do until we have a real isearch-undo. */
| if (cxt->search_string_index == 0)
| rl_ding ();
| - else
| + else if (MB_CUR_MAX == 1 || rl_byte_oriented)
| cxt->search_string[--cxt->search_string_index] = '\0';
| + else
| + {
| + wstart = _rl_find_prev_mbchar (cxt->search_string,
cxt->search_string_index, MB_FIND_NONZERO);
| + if (wstart >= 0)
| + cxt->search_string[cxt->search_string_index = wstart] = '\0';
| + else
| + rl_ding ();
| + }
| break;
|
| case -4: /* C-G, abort */
Greetings!
--
Eduardo Bustamante
https://dualbus.me/