[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction
From: |
Stephen Berman |
Subject: |
bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction |
Date: |
Sun, 25 Feb 2024 22:18:10 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
On Sun, 25 Feb 2024 21:45:43 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
>> From: Stephen Berman <stephen.berman@gmx.net>
>> Cc: 69384@debbugs.gnu.org
>> Date: Sun, 25 Feb 2024 19:26:55 +0100
>>
>> On Sun, 25 Feb 2024 19:35:22 +0200 Eli Zaretskii <eliz@gnu.org> wrote:
>>
>> > I don't understand well enough what were you trying to achieve, so I
>> > cannot suggest how to do that.
>>
>> I want to display RTL text aligned with LTR text; the buffer contains
>> mainly LTR text. Currently just setting bidi-paragraph-direction to
>> 'left-to-right is sufficient for aligning at column 0, but I may want to
>> align to some column in the middle of the window, which I why I tried
>> using :align-to and found calculating the needed value cumbersome.
>
> Sorry, this is still too vague. What do you mean by "RTL text aligned
> with LTR text"? "aligned" in what way and sense?
>
> How about an example of text showing what you want to do? To avoid
> strange effects of bidi reordering, please use lower-case letters to
> represent LTR text and upper-case letters to represent RTL text.
The screenshot in my first post in this bug shows the alignment I want:
the last (i.e. leftmost) character of the Arabic string occupies the
same horizontal position (in this case, the leftmost column) as the
first (i.e. leftmost) character of the English string.
>> > What do you mean by "first column (0) in LTR order"? D|o you mean the
>> > leftmost column in the visual order? something else?
>>
>> Yes, column 0 as in a buffer containing only LTR text.
>
> Please don't talk about column numbers in this context, because it's
> confusing: in RTL text columns are counted from the right. "Leftmost
> column", by contrast, is clear.
Ok.
>> >> 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?
>> >
>> > It's supposed to be a no-op, of course. Exactly like in the strict
>> > LTR unidirectional text. What else can it mean?
>>
>> I now realize I shouldn't have used :align-to 0 for this case, since
>> setting bidi-paragraph-direction to 'left-to-right already gives the
>> desired column-0 alignment.
>
> Exactly.
>
>> It's for alignment to a columns > 0 that :align-to in combination
>> with bidi-paragraph-direction could be useful, if the value of
>> :align-to were easy to use, e.g. simply to to align the RTL text to
>> LTR-column 20 (instead of having to do some trial-and-error
>> calculation). But the broken shaping thwarts that.
>
> You should be able to do that without tweaking
> bidi-paragraph-direction, since :align-to can use the 'left' and
> 'right' positions. For example:
>
> (let* ((a "السّلام عليكم")
> (b "Hello")
> (buf (get-buffer-create "Test3")))
> (with-current-buffer buf
> (erase-buffer)
> (insert (propertize " " 'display
> `(space :align-to (- right 20))) a "\n\n" b)
> (switch-to-buffer buf)))
>
> (Except that it looks like 'left' and 'right' are reversed in this
> case, probably a bug.)
Thanks for the suggestion and code sample. However, this aligns the
*first* (i.e. *rightmost*) character of the Arabic string with the
position 20 columns from the left; see the attached screenshot,
produced by the following extension of your code sample:
(let* ((a "السّلام عليكم")
(b "Hello")
(buf (get-buffer-create "Test3")))
(with-current-buffer buf
(erase-buffer)
(insert (propertize " " 'display `(space :align-to (- right 20)))
a "\n\n" (make-string 20 ? ) b
"\n12345678901234567890")
(switch-to-buffer buf)))
Screenshot_2024-02-25_21-58-11.png
Description: PNG image
What I want is for the leftmost character of both strings to be aligned,
and with :align-to I can't seem to do this without having to make a
fiddly calculation.
> You can also use 'text' to stand for the width of the text-area of a
> window.
I don't see how that would avoid the fiddly calculation.
Steve Berman
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Stephen Berman, 2024/02/25
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Eli Zaretskii, 2024/02/25
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Stephen Berman, 2024/02/25
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Eli Zaretskii, 2024/02/25
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Stephen Berman, 2024/02/25
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Eli Zaretskii, 2024/02/25
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction,
Stephen Berman <=
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Eli Zaretskii, 2024/02/26
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Stephen Berman, 2024/02/26
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Eli Zaretskii, 2024/02/26
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Stephen Berman, 2024/02/26
- bug#69384: 30.0.50; :align-to and bidi-paragraph-direction interaction, Eli Zaretskii, 2024/02/27