unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: D <d.williams@posteo.net>
To: Eli Zaretskii <eliz@gnu.org>,
	Stefan Monnier <monnier@iro.umontreal.ca>,
	Lars Ingebrigtsen <larsi@gnus.org>
Cc: emacs-devel@gnu.org
Subject: Re: prettify-symbols-mode, derived modes, and compose-region
Date: Fri, 5 Mar 2021 22:24:44 +0100	[thread overview]
Message-ID: <18caf24f-fb5d-616d-fb24-393f7d2149f7@posteo.net> (raw)
In-Reply-To: <83eeguyt58.fsf@gnu.org>


> But how do you know that no character associated with a todo keyword
> could ever be wider than the EM SPACE in the same font?  That's
> entirely up to the font designer.
> IOW, I think this solution is fragile.

In theory, yes. In practice this has (to my knowledge) not cropped up.
My approach is, however, a hack at the end of the day.  I mean, the
reason I acknowledge is that why I'm here :)

> And that's even before you consider
> complex text shaping which could combine several codepoints into a
> single wide grapheme cluster.

I don't think that using a character capable of that would be of any
use as a decorative element.  I'd say decorating a title or
representing an item bullet is largely the domain of dingbats,
geometric shapes, and to a lesser extent pictograms ("Emoji").

> Anyway, I think it should be very easy to add a new display property
> type that would override the pixel width of a font glyph with a fixed
> value calculated in some way by a Lisp program.

That would of course be the perfect solution.  But, doesn't this have
to exist in one way or another already?  For example, the checkbox
widget in custom interfaces to my knowledge visually replaces a simple
"[X]" with a bitmap.  When I examine a checkbox with C-u C-x = it
seems to be the case that display does the legwork and somehow obtains
the image size from the xpm file (I suppose).

(On an unrelated side note, I adore the custom interface.  Especially
the way you can specify complex composite types and tweak the
interface to be more expressive, and how you can safety check values
using :set)

> I suggest to try that and bring up any issues you
> have, then we could talk specifically about those issues.

Fair.

>> IIRC you can query Emacs about the size the character would have if it
>> were to be displayed right now in the currently selected window.
>> But you don't know that it's the same size as the character will have
>> when it will actually be displayed (and that char could have
>> simultaneously two different sizes in two different windows, of course).
>
> That's true, but for shr it doesn't (in general) make much difference.
> That is, if you display a rendered HTML document on two different
> displays, it'll look awful anyway, until you re-render tables and the
> like with the new width of the glyphs.  That is, a layout with
>
> | foo bar | more foo |
> | zot     |          |
>
> rarely looks on two different displays -- even if the :width/:align-to
> elements were to magically adjust themselves.

Same with superstar, essentially.  For example, every decorative
bullet can have a "fallback character" for terminal displays, and this
behaves correctly from the perspective of the frame you opened the
buffer with.  I include a simple redisplay command for emacsclient
users for this reason.  So I suppose I operate under the same
limitations as shr?

In that case, I probably should look into that character size
function.  Could you point me in the right general direction?  I'm not
quite sure how to find it.



  parent reply	other threads:[~2021-03-05 21:24 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-04 21:33 prettify-symbols-mode, derived modes, and compose-region D
2021-03-04 21:54 ` Eli Zaretskii
2021-03-05  0:22   ` D
2021-03-05  2:30     ` Stefan Monnier
2021-03-05  3:20       ` Stefan Kangas
2021-03-05  7:25         ` Eli Zaretskii
2021-03-05  7:18       ` Eli Zaretskii
2021-03-05 15:14         ` Stefan Monnier
2021-03-05 15:20           ` Eli Zaretskii
2021-03-05 15:51             ` Stefan Monnier
2021-03-05 15:57               ` Lars Ingebrigtsen
2021-03-05  7:08     ` Eli Zaretskii
2021-03-05 14:05       ` Clément Pit-Claudel
2021-03-05 21:24       ` D [this message]
2021-03-06  9:15         ` Eli Zaretskii
2021-03-06 10:43           ` D
2021-03-06 10:59             ` 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=18caf24f-fb5d-616d-fb24-393f7d2149f7@posteo.net \
    --to=d.williams@posteo.net \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=larsi@gnus.org \
    --cc=monnier@iro.umontreal.ca \
    /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).