]> granicus.if.org Git - vim/commitdiff
patch 8.1.1577: command line redrawn for +arabic without Arabic characters v8.1.1577
authorBram Moolenaar <Bram@vim.org>
Fri, 21 Jun 2019 00:30:38 +0000 (02:30 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 21 Jun 2019 00:30:38 +0000 (02:30 +0200)
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
src/version.c

index c6d22e5fc63b139cb4d617adebf276025dff49bd..4514540d80bf2866e44528ae05abc8434ffd0873 100644 (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;
index ce9e459097f7f313b722ead8cf80833e7b2ec7e0..a7dff696db6c39472b1d5a01162c1281f4e975a2 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1577,
 /**/
     1576,
 /**/