GNU bug report logs -
#69384
30.0.50; :align-to and bidi-paragraph-direction interaction
Previous Next
Reported by: Stephen Berman <stephen.berman <at> gmx.net>
Date: Sun, 25 Feb 2024 16:24:02 UTC
Severity: normal
Found in version 30.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #23 received at 69384 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
On Sun, 25 Feb 2024 21:45:43 +0200 Eli Zaretskii <eliz <at> gnu.org> wrote:
>> From: Stephen Berman <stephen.berman <at> gmx.net>
>> Cc: 69384 <at> debbugs.gnu.org
>> Date: Sun, 25 Feb 2024 19:26:55 +0100
>>
>> On Sun, 25 Feb 2024 19:35:22 +0200 Eli Zaretskii <eliz <at> 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 (image/png, attachment)]
[Message part 3 (text/plain, inline)]
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
This bug report was last modified 1 year and 88 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.