On Sun, 25 Feb 2024 21:45:43 +0200 Eli Zaretskii wrote: >> From: Stephen Berman >> 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 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)))