From 693f7dc818bc116e997aff5ba8ebc2d555aa41dc Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Jun 2019 02:30:38 +0200 Subject: [PATCH] patch 8.1.1577: command line redrawn for +arabic without Arabic characters Problem: Command line redrawn for +arabic without Arabic characters. (Dominique Pelle) Solution: Check if there actually are any Arabic characters. Do redraw after displaying incsearch. (closes #4569) --- src/ex_getln.c | 38 ++++++++++++++++++++++++++++++++++++-- src/version.c | 2 ++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/ex_getln.c b/src/ex_getln.c index c6d22e5fc..4514540d8 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -450,6 +450,7 @@ may_do_incsearch_highlighting( #endif int next_char; int use_last_pat; + int did_do_incsearch = is_state->did_incsearch; // Parsing range may already set the last search pattern. // NOTE: must call restore_last_search_pattern() before returning! @@ -459,6 +460,9 @@ may_do_incsearch_highlighting( { restore_last_search_pattern(); finish_incsearch_highlighting(FALSE, is_state, TRUE); + if (did_do_incsearch && vpeekc() == NUL) + // may have skipped a redraw, do it now + redrawcmd(); return; } @@ -774,6 +778,35 @@ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state) } return OK; } +#endif + +#ifdef FEAT_ARABIC +/* + * Return TRUE if the command line has an Arabic character at or after "start" + * for "len" bytes. + */ + static int +cmdline_has_arabic(int start, int len) +{ + int j; + int mb_l; + int u8c; + char_u *p; + int u8cc[MAX_MCO]; + + if (!enc_utf8) + return FALSE; + + for (j = start; j < start + len; j += mb_l) + { + p = ccline.cmdbuff + j; + u8c = utfc_ptr2char_len(p, u8cc, start + len - j); + mb_l = utfc_ptr2len_len(p, start + len - j); + if (ARABIC_CHAR(u8c)) + return TRUE; + } + return FALSE; +} #endif void @@ -2366,7 +2399,8 @@ cmdline_changed: #ifdef FEAT_RIGHTLEFT if (cmdmsg_rl # ifdef FEAT_ARABIC - || (p_arshape && !p_tbidi && enc_utf8) + || (p_arshape && !p_tbidi + && cmdline_has_arabic(0, ccline.cmdlen)) # endif ) /* Always redraw the whole command line to fix shaping and @@ -3164,7 +3198,7 @@ draw_cmdline(int start, int len) else #endif #ifdef FEAT_ARABIC - if (p_arshape && !p_tbidi && enc_utf8 && len > 0) + if (p_arshape && !p_tbidi && cmdline_has_arabic(start, len)) { static int buflen = 0; char_u *p; diff --git a/src/version.c b/src/version.c index ce9e45909..a7dff696d 100644 --- a/src/version.c +++ b/src/version.c @@ -777,6 +777,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1577, /**/ 1576, /**/ -- 2.40.0