diff options
Diffstat (limited to 'src/ex_getln.c')
-rw-r--r-- | src/ex_getln.c | 38 |
1 files changed, 36 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; } @@ -776,6 +780,35 @@ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state) } #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; |