From: Qiantan Hong <qthong@stanford.edu>
To: Eli Zaretskii <eliz@gnu.org>,
"emacs-devel@gnu.org" <emacs-devel@gnu.org>
Subject: Re: :align-to space spec and line wrap
Date: Sun, 30 Apr 2023 10:48:35 +0000 [thread overview]
Message-ID: <m2cz3lhchw.fsf@rescomp-21-400677.stanford.edu> (raw)
In-Reply-To: <83leigwhme.fsf@gnu.org>
Hi Eli,
It turns out that similar same thing also happen for horiontally
scroll. Once I horizontally scroll to the right, the space align to
somewhere in the middle of the screen, rather than visually to the
right.
I understand how current implementation will exhibit such behavior.
Is such behavior desired? The info node "40.16.3 Pixel Specification
for Spaces" says that `:align-to' specifies positions relative to
"text area", which is defined as a concept about window geometry
("29.1 Basic Concepts of Emacs Windows"). Therefore, I think the
desired behavior is to align to visual positions in the window.
I'd also argue this is also more useful in practice as it allows one
to display some text in desired horizontal position in the window.
I've yet to encounter a use case where the current buffer
position-based behavior is desired. It's a display property, after
all, and is probably more commonly used for displaying stuff!
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Qiantan Hong <qthong@stanford.edu>
>> Date: Mon, 24 Apr 2023 19:23:48 +0000
>>
>> I use the :align-to space spec to right align texts, like this:
>>
>> (defun k-insert-fill-right (string)
>> ;; More correct than `k-fill-right' in some cases, respect current
>> ;; buffer settings (e.g. invisibility spec)
>> (let ((from (point)))
>> (insert " " string)
>> (save-restriction
>> (narrow-to-region (1+ from) (point))
>> (let ((width (car (buffer-text-pixel-size))))
>> (widen)
>> (put-text-property from (1+ from)
>> 'display
>> `(space :align-to (- right-fringe (,width))))))
>> nil))
>>
>> It works when there is no line wrap. However, when there is line wrap,
>> the space width shrink to zero rather than fill to (- right-fringe
>> (,width)) position on the new line. Seem that the width calculation
>> does not take line wrap into account. Is this intended?
>
> The :align-to display spec counts columns, and column number doesn't
> get reset to zero when the line is continued on the next screen line.
> The column numbers on the continuation lines keep counting from the
> last column displayed on the previous screen line.
>
> So you are in effect trying to align to a column whose number is
> smaller than the column where the text is displayed, and thus the
> space width indeed comes out as zero, because you are already past the
> target column.
>
>> Is the behavior that align to the right position on the new line
>> possible to implement?
>
> You need to dynamically calculate the value of the column for
> continuation lines.
--
Best,
Qiantan
next prev parent reply other threads:[~2023-04-30 10:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-24 19:23 :align-to space spec and line wrap Qiantan Hong
2023-04-25 7:22 ` Eli Zaretskii
2023-04-30 10:48 ` Qiantan Hong [this message]
2023-04-30 11:29 ` 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=m2cz3lhchw.fsf@rescomp-21-400677.stanford.edu \
--to=qthong@stanford.edu \
--cc=eliz@gnu.org \
--cc=emacs-devel@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.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
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).