nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit 76e7aaf51462b1fcaa6960c50bafe78a4279b4e5
parent cb776fad88417dadc472ce5eef5c010f7cf78137
Author: Benno Schulenberg <bensberg@justemail.net>
Date:   Sun, 22 Mar 2015 11:20:02 +0000

Starting to look for a multibyte character not at the start of the string,
but only as far back as such a character can possibly be.
Speedup suggested by Mark Majeres.


git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5147 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

Diffstat:
MChangeLog | 5+++++
Msrc/chars.c | 10++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,8 @@ +2015-03-22 Benno Schulenberg <bensberg@justemail.net> + * src/chars.c (move_mbleft): Start looking for a multibyte char + not at the start of the string, but only as far back as such a + char can possibly be. Change suggested by Mark Majeres. + 2015-03-21 Benno Schulenberg <bensberg@justemail.net> * src/text.c (do_alt_speller): Remove some leftovers. * src/search.c: Place some comments better and unwrap some lines. diff --git a/src/chars.c b/src/chars.c @@ -484,12 +484,18 @@ int parse_mbchar(const char *buf, char *chr, size_t *col) * before the one at pos. */ size_t move_mbleft(const char *buf, size_t pos) { - size_t before = 0, char_len = 0; + size_t before, char_len = 0; assert(buf != NULL && pos <= strlen(buf)); /* There is no library function to move backward one multibyte - * character. Here is the naive, O(pos) way to do it. */ + * character. So we just start groping for one at the farthest + * possible point. */ + if (mb_cur_max() > pos) + before = 0; + else + before = pos - mb_cur_max(); + while (before < pos) { char_len = parse_mbchar(buf + before, NULL, NULL); before += char_len;