From: Eli Zaretskii <eliz@gnu.org>
To: Jim Porter <jporterbugs@gmail.com>
Cc: 71605@debbugs.gnu.org
Subject: bug#71605: 30.0.50; [PATCH] Support variable-width text in 'visual-wrap-prefix-mode'
Date: Mon, 17 Jun 2024 21:20:25 +0300 [thread overview]
Message-ID: <86plsfqvme.fsf@gnu.org> (raw)
In-Reply-To: <201c2285-012f-fa29-03b5-78a2e26aa134@gmail.com> (message from Jim Porter on Mon, 17 Jun 2024 10:42:56 -0700)
> Date: Mon, 17 Jun 2024 10:42:56 -0700
> Cc: 71605@debbugs.gnu.org
> From: Jim Porter <jporterbugs@gmail.com>
>
> On 6/17/2024 4:37 AM, Eli Zaretskii wrote:
> >> Date: Sun, 16 Jun 2024 19:56:44 -0700
> >> From: Jim Porter <jporterbugs@gmail.com>
> >> The attached patch adds a display spec in this case so that the text
> >> lines up perfectly.
> >
> > Can you explain the idea of the patch? I don't think I understand why
> > you use '(space :width)' rather than '(space :align-to)'.
>
> I tried using :align-to, and it doesn't seem to take effect for the
> 'wrap-prefix' text property. I haven't looked closely at why that
> doesn't work, but even if it did, I think it might make things more
> complex than they already are.
What exactly did you try? I might be misremembering, but I'm not
aware of any limitations wrt use of :align-to in wrap-prefix. In
fact, the ELisp reference manual explicitly mentions :align-to in its
description of wrap-prefix.
> If I understand your :align-to suggestion, setting :align-to on
> everything after the "* " bullet could work in theory, but I don't know
> what value you could set there to make everything correct.
Some multiple of the width of the default font's representative
character, or of its average-width property?
> The 'face-change' idea could work, or here's another possibility: what
> about using :relative-width?
:relative-width could work, but you'd need to make sure it takes the
width from a fixed character, otherwise different paragraphs won't
align the same. The ELisp manual says:
‘:relative-width FACTOR’
Specifies that the width of the stretch should be computed from the
first character in the group of consecutive characters that have
the same ‘display’ property. The space width is the pixel width of
that character, multiplied by FACTOR.
> If I set that correctly, then the pixel-size should adjust as the
> text scales. It wouldn't handle the case where the actual font
> changes though.
Why not?
> >> -@defun string-pixel-width string
> >> +@defun string-pixel-width string &optional buffer
> >> This is a convenience function that uses @code{window-text-pixel-size}
> >> -to compute the width of @var{string} (in pixels).
> >> +to compute the width of @var{string} (in pixels). If @var{buffer} is
> >> +non-@code{nil}, use the face remappings from that buffer when
> >> +determining the width (@pxref{Face Remapping}).
> >
> > An alternative would be to provide a face to use.
> >
> > In any case, using BUFFER only for face-remapping-alist is only a
> > small part of what a buffer can do to a string: there's the major mode
> > with its fontifications and whatnot.
>
> Yeah, I'm not entirely happy with this BUFFER argument either. I don't
> think we need to worry about fontification in this case though, since
> you can pass in a fontified string.
>
> Maybe this should take the face-remapping-alist directly? Or maybe we
> should pass in a window?
If you can pass a window, you can use window-text-pixel-size instead.
> >> +(defun visual-wrap--adjust-display-width (fcp n)
> >> + (when-let ((display (get-text-property 0 'display fcp))
> >> + ((eq (car-safe display) 'space))
> >
> > Doesn't this only work with very simple 'display' specs? The 'space'
> > part could be in some place deep in the spec, not just the second
> > symbol.
>
> Yeah, though the FCP argument is always the prefix we constructed, so we
> know what the display-spec looks like if it's present.
Sure, but that means the code is fragile, and you need to comment
prominently that if the form of the display spec changes in the
future, this code will need to be adapted.
next prev parent reply other threads:[~2024-06-17 18:20 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-17 2:56 bug#71605: 30.0.50; [PATCH] Support variable-width text in 'visual-wrap-prefix-mode' Jim Porter
2024-06-17 11:37 ` Eli Zaretskii
2024-06-17 17:42 ` Jim Porter
2024-06-17 18:20 ` Eli Zaretskii [this message]
2024-06-17 18:44 ` Jim Porter
2024-06-18 11:37 ` Eli Zaretskii
2024-06-18 22:17 ` Jim Porter
2024-06-19 11:45 ` Eli Zaretskii
2024-06-19 19:53 ` Jim Porter
2024-06-20 4:58 ` Eli Zaretskii
2024-06-20 5:37 ` Jim Porter
2024-06-20 9:58 ` Eli Zaretskii
2024-06-20 17:36 ` Jim Porter
2024-06-20 18:08 ` Eli Zaretskii
2024-06-20 19:01 ` Jim Porter
2024-07-28 4:53 ` Jim Porter
2024-08-02 7:27 ` Eli Zaretskii
2024-08-04 19:24 ` Jim Porter
2024-06-17 14:23 ` Po Lu via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-06-17 16:13 ` Jim Porter
2024-06-17 18:17 ` Jim Porter
2024-06-17 19:55 ` Eli Zaretskii
2024-06-17 20:08 ` Jim Porter
2024-06-18 3:02 ` Jim Porter
2024-06-18 6:27 ` Jim Porter
2024-06-18 12:53 ` Eli Zaretskii
2024-06-18 12:39 ` 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=86plsfqvme.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=71605@debbugs.gnu.org \
--cc=jporterbugs@gmail.com \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.