unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: emacs-devel@gnu.org, stefankangas@gmail.com, dgutov@yandex.ru
Subject: Re: Tick Reduction
Date: Wed, 24 Nov 2021 20:39:20 +0200	[thread overview]
Message-ID: <837dcx8kkn.fsf@gnu.org> (raw)
In-Reply-To: <8735nlwih6.fsf@gnus.org> (message from Lars Ingebrigtsen on Wed,  24 Nov 2021 18:50:45 +0100)

> From: Lars Ingebrigtsen <larsi@gnus.org>
> Cc: dgutov@yandex.ru,  stefankangas@gmail.com,  emacs-devel@gnu.org
> Date: Wed, 24 Nov 2021 18:50:45 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > There's the display_prop_end function we normally use for that.
> 
> I don't quite understand.  If I have a max-width going from 5 to 15,
> and a height going from 10 to 12, I think this function is going to be
> called at 5, 10, 12 and 15?  I need to know that this consecutive series
> of characters ends at 15.

You cannot usefully have two display properties with different values
(one min-width, the other height) which overlap.  But yes,
display_prop_end will fund the next position where the display
property changes its value.  Why is that a problem?  The idea is that
whatever tests you need to do to with the position it finds, you do
them at the beginning of the property, then you record the result in
it->position, and use that to know when you are at the end of the
property.

> It's the same issue when called from display_string -- the mode line
> machinery will call the function several times, even if the :propertize
> is around all the specs.

I don't think so, but maybe I misunderstand something.

> > And I'm confused by the fact that for buffers you test
> >
> >    if (bufpos > BEGV && EQ (FOO, BAR))
> >
> > whereas for a string you test
> >
> >    if (bufpos == 0 && !EQ (FOO, BAR))
> 
> The bufpos == 0 is just testing that we're being called from the mode
> line (where it's always 0).

But that isn't guaranteed.  This display property can be on some part
of the string, and doesn't have to start at position zero.

> > and also why is the first case tests equality, whereas the second one
> > tests INequality?
> 
> Looks correct to me -- one is testing the start of the range and one is
> testing whether we're at the end.

??? But the code under the test does the processing that's appropriate
for the end of the property, doesn't it?  Namely, it computes the
width of the stretch that needs to be appended for padding.  And both
conditions, when fulfilled, trigger the same code:

      if ((bufpos == 0
	   && !EQ (it->min_width_property,
		   get_display_property (0, Qmin_width, object)))
	  /* In a buffer -- check that we're really right after the
	     sequence of characters covered by this `min-width'.  */
	  || (bufpos > BEGV
	      && EQ (it->min_width_property,
		     get_display_property (bufpos - 1, Qmin_width, object))))
	{
	  Lisp_Object w = Qnil;
	  double width;
#ifdef HAVE_WINDOW_SYSTEM
	  if (FRAME_WINDOW_P (it->f))
	    {
	      struct font *font = NULL;
	      struct face *face = FACE_FROM_ID (it->f, it->face_id);
	      font = face->font ? face->font : FRAME_FONT (it->f);
	      calc_pixel_width_or_height (&width, it,
					  XCAR (it->min_width_property),
					  font, true, NULL);
	      width -= it->current_x - it->min_width_start;
	      w = list1 (make_int (width));
	    }

I'm afraid that I'm missing something important here.

> > IOW, the issue here AFAIU is that you might be called to display
> > buffer text with this property or to display a Lisp string with this
> > property, so the tests should be equivalent, and the only difference
> > between strings and buffers is that text starts at BEGV in buffers but
> > at zero in strings.  So why there are more differences that that?
> > What am I missing?
> 
> Like I said, there's no strings -- only buffers and mode lines.

Once again: displaying the mode line _is_ displaying a string.  The
mode line is constructed from Lisp strings.

> I.e., this doesn't work:
> 
> (string-pixel-width (propertize "foo" 'display '(min-width (1000))))

I don't think this is related.  First, as you well know,
string-pixel-width inserts the string into a temporary buffer, and
then measures the dimensions there, so this has nothing to do with
display properties on strings, as the implementation eventually walks
text of some buffer.  And second, the current implementation seems to
have bugs, because this trivial variation of your original test case:

  (insert "|" (propertize "foo" 'display '(min-width (8.0)) 'face 'match))

doesn't work, either.  (All I did was remove the final "|" from the
inserted string.)

So I think it's too early to use the code behavior as the evidence of
anything ;-)



  reply	other threads:[~2021-11-24 18:39 UTC|newest]

Thread overview: 167+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-18 20:37 Tick Reduction Lars Ingebrigtsen
2021-11-18 21:01 ` Perry E. Metzger
2021-11-19  5:25   ` Lars Ingebrigtsen
2021-11-18 21:23 ` Dmitry Gutov
2021-11-19  5:27   ` Lars Ingebrigtsen
2021-11-19  6:31     ` Michael Welsh Duggan
2021-11-19  6:50     ` Stefan Kangas
2021-11-19  7:05       ` Lars Ingebrigtsen
2021-11-19  8:19         ` Eli Zaretskii
2021-11-19  8:30           ` Lars Ingebrigtsen
2021-11-20  8:01             ` Eli Zaretskii
2021-11-20  9:07               ` Lars Ingebrigtsen
2021-11-21 15:11             ` Lars Ingebrigtsen
2021-11-21 17:16               ` Eli Zaretskii
2021-11-21 17:24                 ` Lars Ingebrigtsen
2021-11-21 17:39                   ` Eli Zaretskii
2021-11-21 18:00                     ` Lars Ingebrigtsen
2021-11-21 18:15                       ` Eli Zaretskii
2021-11-21 18:25                         ` Lars Ingebrigtsen
2021-11-21 18:33                           ` Lars Ingebrigtsen
2021-11-21 19:31                           ` Eli Zaretskii
2021-11-21 19:34                             ` Lars Ingebrigtsen
2021-11-21 19:36                               ` Lars Ingebrigtsen
2021-11-21 19:41                                 ` Lars Ingebrigtsen
2021-11-21 19:49                               ` Eli Zaretskii
2021-11-21 19:53                                 ` Lars Ingebrigtsen
2021-11-21 20:07                                   ` Eli Zaretskii
2021-11-21 20:17                                     ` Lars Ingebrigtsen
2021-11-21 20:26                                       ` Eli Zaretskii
2021-11-21 20:30                                         ` Lars Ingebrigtsen
2021-11-21 20:31                                           ` Lars Ingebrigtsen
2021-11-22  8:19                                             ` Lars Ingebrigtsen
2021-11-22 14:45                                               ` Eli Zaretskii
2021-11-22 14:50                                                 ` Lars Ingebrigtsen
2021-11-22 17:21                                                   ` Eli Zaretskii
2021-11-22 18:35                                                     ` Stefan Monnier
2021-11-23 10:15                                                     ` Lars Ingebrigtsen
2021-11-23 13:41                                                       ` Eli Zaretskii
2021-11-23 13:49                                                         ` Lars Ingebrigtsen
2021-11-23 14:19                                                           ` Eli Zaretskii
2021-11-23 14:32                                                             ` Lars Ingebrigtsen
2021-11-23 14:43                                                               ` Eli Zaretskii
2021-11-24 11:07                                                                 ` Lars Ingebrigtsen
2021-11-24 14:20                                                                   ` Eli Zaretskii
2021-11-24 16:28                                                                     ` Lars Ingebrigtsen
2021-11-24 17:05                                                                       ` Eli Zaretskii
2021-11-24 17:10                                                                         ` Lars Ingebrigtsen
2021-11-24 17:41                                                                           ` Eli Zaretskii
2021-11-24 17:50                                                                             ` Lars Ingebrigtsen
2021-11-24 18:39                                                                               ` Eli Zaretskii [this message]
2021-11-24 18:44                                                                                 ` Lars Ingebrigtsen
2021-11-24 19:00                                                                                   ` Eli Zaretskii
2021-11-25 13:02                                                                                     ` Lars Ingebrigtsen
2021-11-25 12:58                                                                                 ` Lars Ingebrigtsen
2021-11-25 13:28                                                                                   ` Eli Zaretskii
2021-11-25 14:29                                                                                     ` Lars Ingebrigtsen
2021-11-25 15:10                                                                                       ` Eli Zaretskii
2021-11-26 12:12                                                                                         ` Lars Ingebrigtsen
2021-11-26 12:43                                                                                           ` Eli Zaretskii
2021-11-24 18:41                                                                             ` Lars Ingebrigtsen
2021-11-24 18:53                                                                               ` Eli Zaretskii
2021-11-24 22:32                                                                                 ` Yuan Fu
2021-11-25  7:34                                                                                   ` Eli Zaretskii
2021-11-26 17:03                                                                                     ` Yuan Fu
2021-11-26 18:41                                                                                       ` Eli Zaretskii
2021-11-26 18:54                                                                                         ` Yuan Fu
2021-11-26 18:57                                                                                           ` Eli Zaretskii
2021-11-25 13:06                                                                                 ` Lars Ingebrigtsen
2021-11-25 14:02                                                                                   ` Eli Zaretskii
2021-11-25 14:07                                                                                     ` Lars Ingebrigtsen
2021-11-25 14:12                                                                                       ` Eli Zaretskii
2021-11-25 14:16                                                                                         ` Lars Ingebrigtsen
2021-11-25 15:04                                                                                           ` Eli Zaretskii
2021-11-26 12:09                                                                                             ` Lars Ingebrigtsen
2021-11-26 12:56                                                                                               ` Eli Zaretskii
2021-11-27 14:15                                                                                                 ` Lars Ingebrigtsen
2021-11-27 14:51                                                                                                   ` Eli Zaretskii
2021-11-29 13:40                                                                                                     ` Lars Ingebrigtsen
2021-11-29 13:53                                                                                                       ` Eli Zaretskii
2021-11-29 14:00                                                                                                         ` Lars Ingebrigtsen
2021-11-29 14:06                                                                                                           ` Eli Zaretskii
2021-11-29 14:15                                                                                                             ` Lars Ingebrigtsen
2021-11-29 14:17                                                                                                             ` Eli Zaretskii
2021-11-29 14:35                                                                                                               ` Eli Zaretskii
2021-11-29 15:06                                                                                                                 ` Lars Ingebrigtsen
2021-11-24 23:10                                               ` Feng Shu
2021-11-25  7:42                                                 ` Eli Zaretskii
2021-11-25 11:52                                                 ` Lars Ingebrigtsen
2021-11-22 23:26                                       ` chad
2021-11-21 20:10                                   ` Lars Ingebrigtsen
2021-11-21 20:22                                     ` Eli Zaretskii
2021-11-21 20:28                                       ` Lars Ingebrigtsen
2021-11-21 20:41                                         ` Lars Ingebrigtsen
2021-11-21 21:13                                           ` Eli Zaretskii
2021-11-21 20:42                                         ` Eli Zaretskii
2021-11-21 21:12                                           ` Eli Zaretskii
2021-11-22 11:22                                             ` Lars Ingebrigtsen
2021-11-22 14:52                                               ` Eli Zaretskii
2021-11-22 14:55                                                 ` Lars Ingebrigtsen
2021-11-22 18:04                                             ` Eli Zaretskii
2021-11-19  8:33         ` Stefan Kangas
2021-11-19  8:39           ` Lars Ingebrigtsen
2021-11-19  8:48             ` Eli Zaretskii
2021-11-19 10:00               ` Lars Ingebrigtsen
2021-11-19 10:28               ` Stefan Kangas
2021-11-19 12:41                 ` Eli Zaretskii
2021-11-19 13:04                   ` Stefan Kangas
2021-11-19 13:18                     ` Eli Zaretskii
2021-11-19 13:41                       ` Stefan Kangas
2021-11-19 13:48                         ` Eli Zaretskii
2021-11-21 13:35                           ` Stefan Kangas
2021-11-19 10:28             ` Stefan Kangas
2021-11-20  8:43               ` Lars Ingebrigtsen
2021-11-20  9:03                 ` Eli Zaretskii
2021-11-20  9:26                   ` Lars Ingebrigtsen
2021-11-20  9:51                     ` Eli Zaretskii
2021-11-20  9:56                       ` Lars Ingebrigtsen
2021-11-20 10:11                         ` Eli Zaretskii
2021-11-21  8:57               ` Lars Ingebrigtsen
2021-11-21  9:02                 ` Lars Ingebrigtsen
2021-11-21 13:36                   ` Stefan Kangas
2021-11-21 19:26                     ` Lars Ingebrigtsen
2021-11-21 13:54             ` Stefan Kangas
2021-11-21 15:25               ` Lars Ingebrigtsen
2021-11-21 19:28                 ` Stefan Kangas
2021-11-21 19:31                   ` Lars Ingebrigtsen
2021-11-22 14:57         ` Use variable-pitch face in more places Stefan Kangas
2021-11-22 15:05           ` Stefan Kangas
2021-11-22 17:22           ` Juri Linkov
2021-11-22 18:10             ` Stefan Kangas
2021-11-22 18:40               ` Juri Linkov
2021-11-23  9:56               ` Lars Ingebrigtsen
2021-11-24  9:12                 ` Juri Linkov
2021-11-24 16:52                   ` Lars Ingebrigtsen
2021-11-24 17:59                     ` Juri Linkov
2021-11-19  7:48       ` Tick Reduction Eli Zaretskii
2021-11-19 13:41         ` Stefan Kangas
2021-11-19 11:58     ` Dmitry Gutov
2021-11-18 22:18 ` [External] : " Drew Adams
2021-11-21 10:17   ` Phil Sainty
2021-11-19  5:48 ` Lars Ingebrigtsen
2021-11-19  7:24   ` Eli Zaretskii
2021-11-19  7:28     ` Lars Ingebrigtsen
2021-11-19  8:26       ` Eli Zaretskii
2021-11-19  8:33         ` Lars Ingebrigtsen
2021-11-19  6:42 ` Eric S Fraga
2021-11-19  7:30   ` Lars Ingebrigtsen
2021-11-19  6:52 ` Stefan Kangas
2021-11-19  7:26   ` Lars Ingebrigtsen
2021-11-19  7:59     ` Stefan Kangas
2021-11-19  8:17       ` Lars Ingebrigtsen
2021-11-19  8:09   ` Eli Zaretskii
2021-11-19  8:34     ` Stefan Kangas
2021-11-19 13:58 ` Stefan Monnier
2021-11-19 14:46   ` Eli Zaretskii
2021-11-19 18:22     ` Stefan Monnier
2021-11-19 18:53       ` Eli Zaretskii
2021-11-19 19:24         ` Stefan Monnier
2021-11-19 19:50           ` Eli Zaretskii
2021-11-19 21:09             ` Stefan Monnier
2021-11-20  6:34               ` Eli Zaretskii
2021-11-20 13:11                 ` Stefan Monnier
2021-11-20 13:32                   ` Eli Zaretskii
2021-11-20 14:06                     ` Stefan Monnier
2021-11-20 14:35                       ` Eli Zaretskii
2021-11-20 15:01                         ` Stefan Monnier
2021-11-20  9:00   ` Lars Ingebrigtsen

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=837dcx8kkn.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=dgutov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    --cc=larsi@gnus.org \
    --cc=stefankangas@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 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).