# HG changeset patch # User Bram Moolenaar # Date 1561077905 -7200 # Node ID da2bb80cd83818b2fb51c0a6b88347a440d6e5c9 # Parent db19d34c131fa41439636eee63cf4b88540b42b8 patch 8.1.1577: command line redrawn for +arabic without Arabic characters commit https://github.com/vim/vim/commit/693f7dc818bc116e997aff5ba8ebc2d555aa41dc Author: Bram Moolenaar Date: Fri Jun 21 02:30:38 2019 +0200 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) diff --git a/src/ex_getln.c b/src/ex_getln.c --- 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; } @@ -776,6 +780,35 @@ may_add_char_to_search(int firstc, int * } #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 cmdline_init(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 --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1577, +/**/ 1576, /**/ 1575,