help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Question about align-to behaviour with wrap-mode


From: Eli Zaretskii
Subject: Re: Question about align-to behaviour with wrap-mode
Date: Mon, 21 Nov 2022 19:42:01 +0200

> Date: Sun, 20 Nov 2022 22:20:50 +0000
> From:  Abdul-Lateef Haji-Ali via Users list for the GNU Emacs text editor 
> <help-gnu-emacs@gnu.org>
> 
> 
> I noticed what I think is strange behaviour with `:align-to` that I am 
> wondering if it's intended and if there's a way of achieving a desired 
> behaviour.

It's intended, yes.

> To reproduce in an `emacs -Q`, just run this:
> 
> (progn
>    (toggle-word-wrap +1)
>    (goto-char (point-max))
>    (insert
>     (concat "\n\n"
>             (make-string (- (window-width) 3) 69)
>             " "
>             (propertize " " 'display
>                         `(space :align-to (- right
>                                              10)))
>             "After\n\n")))
> 
> The word 'After' is not aligned to `(- right 10)` because the text before is 
> too long. Instead "After" is displayed at the beginning of the next line (or 
> broken across two lines if toggle-word-wrap is disabled) and the alignment is 
> ignored.
> 
> If I execute instead
> 
> (progn
>    (toggle-word-wrap +1)
>    (goto-char (point-max))
>    (insert
>     (concat "\n\n"
>             (make-string (window-width) 69)
>             " "
>             (propertize " " 'cursor 1 'display
>                         `(space :align-to (- right
>                                              10)))
>             "After\n\n")))
>             
> the alignment is "correct" on the second line.

I don't see the correct alignment here.  I see a behavior similar to the
first recipe, as I'd expect.

The problem here is that the implementation of align-to takes the width of
continuation lines into consideration, i.e. the column doesn't wrap to zero
when the line is continued.  So if the window is 80-column wide, and you say

     (space :align-to (- right 10))

that yields 70, but text wrapped to the next line has its horizontal
coordinate start from 80, so it is already past 70, and the alignment
doesn't happen.

The bottom line is that you cannot use relative alignment if your lines can
wrap, and hope for that to work.  For wrapped lines the alignment must be to
absolute column numbers, and it must take the continuation lines into
consideration when you calculate the alignment column.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]