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

From: Stephen Berman <[email-masked]>
Date: Sun, 25 Feb 2024 18:17:35 +0100

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

>> 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.

No, this is indeed what I expected (see below for elaboration).

>> 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.

This is also what I expected.  But it would be nice if there were an
easier way to calculate the value of :align-to (I looked in the Elisp
manual but didn't find anything that would give me the value 0.75 I
found by trial and error).

>> 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?

I wanted to align to the first column (0) in LTR order, for which it's
necessary set bidi-paragraph-direction to 'left-to-right.  The resulting
alignment is what I wanted and expected, but the broken shaping is not.

>> 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.

Sorry for not being clearer in my report: the bug is the broken shaping
with the combination of setting bidi-paragraph-direction and using
:align-to; the first two examples were meant to show that using these
individually also works.  But I gather from your reply that I've
misunderstood what :align-to set to 0 means; can you enlighten me?

Steve Berman