Subject: Re: bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction

From: Eli Zaretskii <[email-masked]>
Date: Sun, 25 Feb 2024 18:47:48 +0200

> Date: Sun, 25 Feb 2024 17:22:45 +0100
> From:  Stephen Berman via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <[email-masked]>
> 
> In a buffer that contains bidirectional text, setting
> bidi-paragraph-direction to 'left-to-right aligns the RTL text with the
> left margin like the LTR text; see the first sexp below and the top
> buffer in the attached screenshot.

Yes, and that's what you should expect.  That's what
bidi-paragraph-direction set to left-to-right means: the base
paragraph direction of every paragraph in this buffer will be LTR.  If
you think this is a bug or unexpected, please tell why.

> Another alternative to get this alignment is to leave
> bidi-paragraph-direction at its default value of nil and use a space
> display specification with a suitable value for the :align-to property,
> but this requires a calculation that seems to depend at least on the
> font used and the values of `window-width' and `string-width' for the
> string used (or the corresponding pixel-width values); see the second
> sexp below and the middle buffer in the attached screenshot.

Yes, because in a RTL paragraph, columns are counted from the right
edge of the window.  So this again is the expected behavior, and if
you consider that unexpected, please explain why.

> It's also possible to avoid this calculation and use an :align-to value
> of 0 in combination with setting bidi-paragraph-direction to
> 'left-to-right;

What is the purpose of using ":align-to 0"? what do you think is the
semantics of that and your expectations?

> see the third sexp below and the bottom buffer in the
> attached screenshot.  However, as the screenshot shows, this last
> alternative breaks Arabic text shaping, at least for the fonts I tried

I will look into the shaping problem, but in general 'display' specs
do affect bidirectional display; see the end of the node "Specified
Space" in the ELisp manual.

Still, I don't think I understand what are you reporting as a bug
here.  Please clarify.