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)
This commit is contained in:
Bram Moolenaar
2019-06-21 02:30:38 +02:00
parent 405bb42734
commit 693f7dc818
2 changed files with 38 additions and 2 deletions

View File

@ -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;

View File

@ -777,6 +777,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1577,
/**/
1576,
/**/