unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: help-gnu-emacs@gnu.org
Subject: Re: Question about align-to behaviour with wrap-mode
Date: Mon, 21 Nov 2022 19:42:01 +0200	[thread overview]
Message-ID: <838rk42oie.fsf@gnu.org> (raw)
In-Reply-To: <m2k03ptghp.fsf@hw.ac.uk> (message from Abdul-Lateef Haji-Ali via Users list for the GNU Emacs text editor on Sun, 20 Nov 2022 22:20:50 +0000)

> 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	other threads:[~2022-11-21 17:42 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-20 22:20 Question about align-to behaviour with wrap-mode Abdul-Lateef Haji-Ali via Users list for the GNU Emacs text editor
2022-11-21 17:42 ` Eli Zaretskii [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-11-22  9:45 Abdul-Lateef Haji-Ali via Users list for the GNU Emacs text editor
2022-11-22 13:46 ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=838rk42oie.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).