From: Eli Zaretskii Date: Mon, 9 Nov 2020 15:22:25 +0000 (+0200) Subject: Avoid breaking Arabic shaping in 'window-text-pixel-size' X-Git-Tag: emacs-27.1.90~69 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=13ab70c80e2e31fdf0a289c8e730a33a1cf5d6ae;p=emacs.git Avoid breaking Arabic shaping in 'window-text-pixel-size' * src/xdisp.c (CHAR_COMPOSED_P): If the bidi_p flag is not set, pass -1 to composition_reseat_it, so that the shaping engine will figure out the directionality of the text. This is important, e.g., when using move_it_* functions in some context that is not redisplay, such as 'window-text-pixel-size'. (Bug#44521) --- diff --git a/src/xdisp.c b/src/xdisp.c index 60864c2671c..ac706d08414 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -7221,14 +7221,21 @@ static next_element_function const get_next_element[NUM_IT_METHODS] = /* Return true iff a character at CHARPOS (and BYTEPOS) is composed - (possibly with the following characters). */ + (possibly with the following characters). + + Note: we pass -1 as the "resolved bidi level" when the iterator + doesn't have the bidi_p flag set, because in that case we really + don't know what is the directionality of the text, so we leave it to + the shaping engine to figure that out. */ #define CHAR_COMPOSED_P(IT,CHARPOS,BYTEPOS,END_CHARPOS) \ ((IT)->cmp_it.id >= 0 \ || ((IT)->cmp_it.stop_pos == (CHARPOS) \ && composition_reseat_it (&(IT)->cmp_it, CHARPOS, BYTEPOS, \ END_CHARPOS, (IT)->w, \ - (IT)->bidi_it.resolved_level, \ + (IT)->bidi_p \ + ? (IT)->bidi_it.resolved_level \ + : -1, \ FACE_FROM_ID_OR_NULL ((IT)->f, \ (IT)->face_id), \ (IT)->string)))