all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* Correct way to implement `pixel-point-and-height-at-unseen-line'?
       [not found] <87pmq1wag9.fsf.ref@yahoo.com>
@ 2021-12-13  1:38 ` Po Lu
  2021-12-13  2:20   ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-12-13 14:32   ` Eli Zaretskii
  0 siblings, 2 replies; 14+ messages in thread
From: Po Lu @ 2021-12-13  1:38 UTC (permalink / raw)
  To: help-gnu-emacs

I don't know how to make `pixel-point-and-height-at-unseen-line' work
correctly: if I use `line-pixel-height', it will only report the height
the first individual line inside a display string if there is one above
window start, but if I use `window-text-pixel-size', I have to determine
the region to measure, which is quite troublesome.

For example, window start is often not the beginning of a visual line in
Info buffers, so in order to measure the height of the previous line (or
object), I have to find the beginning of the visual line at window
start, and pass that as the `to' argument to window-text-pixel-size
instead.

This works okay until there is a `line-prefix' property at window start:
in this case, window start is the beginning of a visual line, but it
does not display at the beginning of the line, which means
`window-text-pixel-size' will add the height of the current line to that
of the previous line.  I will add a workaround to pixel-scroll.el, but
there must be a cleaner way to implement this.

Thanks in advance.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13  1:38 ` Correct way to implement `pixel-point-and-height-at-unseen-line'? Po Lu
@ 2021-12-13  2:20   ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-12-13  2:49     ` Po Lu
  2021-12-13 14:32   ` Eli Zaretskii
  1 sibling, 1 reply; 14+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-12-13  2:20 UTC (permalink / raw)
  To: help-gnu-emacs

Po Lu wrote:

> I don't know how to make
> `pixel-point-and-height-at-unseen-line' work correctly: if
> I use `line-pixel-height', it will only report the height
> the first individual line inside a display string if there
> is one above window start, but if I use
> `window-text-pixel-size', I have to determine the region to
> measure, which is quite troublesome.
>
> For example, window start is often not the beginning of
> a visual line

`window-start', `beginning-of-visual-line' ...

You can post the code instead ... that way you don't have to
remove the dashes.

> This works okay until there is a `line-prefix' property at
> window start: in this case, window start is the beginning of
> a visual line, but it does not display at the beginning of
> the line, which means `window-text-pixel-size' will add the
> height of the current line to that of the previous line.
> I will add a workaround to pixel-scroll.el, but there must
> be a cleaner way to implement this.

Sounds pretty clean to me but difficult to say since you are
not posting the actual code.

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13  2:20   ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-12-13  2:49     ` Po Lu
  2021-12-13  3:04       ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 14+ messages in thread
From: Po Lu @ 2021-12-13  2:49 UTC (permalink / raw)
  To: help-gnu-emacs

Emanuel Berg via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:

> Po Lu wrote:
>
>> I don't know how to make
>> `pixel-point-and-height-at-unseen-line' work correctly: if
>> I use `line-pixel-height', it will only report the height
>> the first individual line inside a display string if there
>> is one above window start, but if I use
>> `window-text-pixel-size', I have to determine the region to
>> measure, which is quite troublesome.
>>
>> For example, window start is often not the beginning of
>> a visual line
>
> `window-start', `beginning-of-visual-line' ...
>
> You can post the code instead ... that way you don't have to
> remove the dashes.
>
>> This works okay until there is a `line-prefix' property at
>> window start: in this case, window start is the beginning of
>> a visual line, but it does not display at the beginning of
>> the line, which means `window-text-pixel-size' will add the
>> height of the current line to that of the previous line.
>> I will add a workaround to pixel-scroll.el, but there must
>> be a cleaner way to implement this.
>
> Sounds pretty clean to me but difficult to say since you are
> not posting the actual code.

It's in pixel-scroll.el inside the lisp folder on master.  See
`pixel-point-and-height-at-unseen-lie'.

Thanks.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13  2:49     ` Po Lu
@ 2021-12-13  3:04       ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-12-13  3:18         ` Po Lu
  0 siblings, 1 reply; 14+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-12-13  3:04 UTC (permalink / raw)
  To: help-gnu-emacs

Po Lu wrote:

>> Sounds pretty clean to me but difficult to say since you
>> are not posting the actual code.
>
> It's in pixel-scroll.el inside the lisp folder on master.
> See `pixel-point-and-height-at-unseen-lie'.

Don't have that ...

GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, cairo version
1.16.0) of 2021-10-04

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13  3:04       ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-12-13  3:18         ` Po Lu
  2021-12-13 23:41           ` Emanuel Berg via Users list for the GNU Emacs text editor
  0 siblings, 1 reply; 14+ messages in thread
From: Po Lu @ 2021-12-13  3:18 UTC (permalink / raw)
  To: help-gnu-emacs

Emanuel Berg via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:

> Po Lu wrote:
>
>>> Sounds pretty clean to me but difficult to say since you
>>> are not posting the actual code.
>>
>> It's in pixel-scroll.el inside the lisp folder on master.
>> See `pixel-point-and-height-at-unseen-lie'.
>
> Don't have that ...
>
> GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, cairo version
> 1.16.0) of 2021-10-04

10th Oct is a bit early.  It was introduced in late November, but the
version that is relevant to this discussion is today's revision.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13  1:38 ` Correct way to implement `pixel-point-and-height-at-unseen-line'? Po Lu
  2021-12-13  2:20   ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-12-13 14:32   ` Eli Zaretskii
  2021-12-14  0:41     ` Po Lu
  1 sibling, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2021-12-13 14:32 UTC (permalink / raw)
  To: help-gnu-emacs

> From: Po Lu <luangruo@yahoo.com>
> Date: Mon, 13 Dec 2021 09:38:30 +0800
> 
> I don't know how to make `pixel-point-and-height-at-unseen-line' work
> correctly: if I use `line-pixel-height', it will only report the height
> the first individual line inside a display string if there is one above
> window start, but if I use `window-text-pixel-size', I have to determine
> the region to measure, which is quite troublesome.
> 
> For example, window start is often not the beginning of a visual line in
> Info buffers, so in order to measure the height of the previous line (or
> object), I have to find the beginning of the visual line at window
> start, and pass that as the `to' argument to window-text-pixel-size
> instead.
> 
> This works okay until there is a `line-prefix' property at window start:
> in this case, window start is the beginning of a visual line, but it
> does not display at the beginning of the line, which means
> `window-text-pixel-size' will add the height of the current line to that
> of the previous line.  I will add a workaround to pixel-scroll.el, but
> there must be a cleaner way to implement this.

The correct way is to use window-text-pixel-size.  Whatever problems
that gives you in some corner use cases, we'd need to teach
window-text-pixel-size to handle those at least optionally.

And you didn't describe why do you need
pixel-point-and-height-at-unseen-line's data in the first place, so
maybe there's a different solution to whatever you are trying to do
that doesn't involve such a function.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13  3:18         ` Po Lu
@ 2021-12-13 23:41           ` Emanuel Berg via Users list for the GNU Emacs text editor
  2021-12-14  0:41             ` Po Lu
  0 siblings, 1 reply; 14+ messages in thread
From: Emanuel Berg via Users list for the GNU Emacs text editor @ 2021-12-13 23:41 UTC (permalink / raw)
  To: help-gnu-emacs

Po Lu wrote:

> 10th Oct is a bit early. It was introduced in late November,
> but the version that is relevant to this discussion is
> today's revision.

Okay, what's your suggestion then?

-- 
underground experts united
https://dataswamp.org/~incal




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13 14:32   ` Eli Zaretskii
@ 2021-12-14  0:41     ` Po Lu
  2021-12-14 13:30       ` Eli Zaretskii
  0 siblings, 1 reply; 14+ messages in thread
From: Po Lu @ 2021-12-14  0:41 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: help-gnu-emacs

Eli Zaretskii <eliz@gnu.org> writes:

> And you didn't describe why do you need
> pixel-point-and-height-at-unseen-line's data in the first place, so
> maybe there's a different solution to whatever you are trying to do
> that doesn't involve such a function.

It's used to find a suitable new start position that's N pixels above
window start, so vscroll can then be set to compensate for the
difference.  For instance, scrolling up by a delta of 1 pixel if vscroll
is already zero will move to such a start position, and set vscroll to
the returned height - 1.

Thanks.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-13 23:41           ` Emanuel Berg via Users list for the GNU Emacs text editor
@ 2021-12-14  0:41             ` Po Lu
  0 siblings, 0 replies; 14+ messages in thread
From: Po Lu @ 2021-12-14  0:41 UTC (permalink / raw)
  To: help-gnu-emacs

Emanuel Berg via Users list for the GNU Emacs text editor
<help-gnu-emacs@gnu.org> writes:

> Po Lu wrote:
>
>> 10th Oct is a bit early. It was introduced in late November,
>> but the version that is relevant to this discussion is
>> today's revision.
>
> Okay, what's your suggestion then?

To look at today's master then?



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-14  0:41     ` Po Lu
@ 2021-12-14 13:30       ` Eli Zaretskii
  2021-12-14 13:48         ` Po Lu
  0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2021-12-14 13:30 UTC (permalink / raw)
  To: help-gnu-emacs

> From: Po Lu <luangruo@yahoo.com>
> Cc: help-gnu-emacs@gnu.org
> Date: Tue, 14 Dec 2021 08:41:06 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > And you didn't describe why do you need
> > pixel-point-and-height-at-unseen-line's data in the first place, so
> > maybe there's a different solution to whatever you are trying to do
> > that doesn't involve such a function.
> 
> It's used to find a suitable new start position that's N pixels above
> window start, so vscroll can then be set to compensate for the
> difference.

Did you try something like this:

  (save-excursion
    (goto-char (window-start))
    (vertical-motion (- (ceiling N (frame-char-height))))
    (point))

where N is your number of pixels?



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-14 13:30       ` Eli Zaretskii
@ 2021-12-14 13:48         ` Po Lu
  2021-12-14 14:26           ` Eli Zaretskii
  0 siblings, 1 reply; 14+ messages in thread
From: Po Lu @ 2021-12-14 13:48 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: help-gnu-emacs

Eli Zaretskii <eliz@gnu.org> writes:

> Did you try something like this:
>
>   (save-excursion
>     (goto-char (window-start))
>     (vertical-motion (- (ceiling N (frame-char-height))))
>     (point))
>
> where N is your number of pixels?

That won't always work correctly with lines of different height: for
example, if the line above start is smaller than the default character
height of the frame, the number of lines by which to move upwards could
be too small.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-14 13:48         ` Po Lu
@ 2021-12-14 14:26           ` Eli Zaretskii
  2021-12-15  0:40             ` Po Lu
  0 siblings, 1 reply; 14+ messages in thread
From: Eli Zaretskii @ 2021-12-14 14:26 UTC (permalink / raw)
  To: help-gnu-emacs

> From: Po Lu <luangruo@yahoo.com>
> Cc: help-gnu-emacs@gnu.org
> Date: Tue, 14 Dec 2021 21:48:35 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > Did you try something like this:
> >
> >   (save-excursion
> >     (goto-char (window-start))
> >     (vertical-motion (- (ceiling N (frame-char-height))))
> >     (point))
> >
> > where N is your number of pixels?
> 
> That won't always work correctly with lines of different height: for
> example, if the line above start is smaller than the default character
> height of the frame, the number of lines by which to move upwards could
> be too small.

But if you always need the line before window-start, i.e. use N = 1,
then why is that a problem?



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-14 14:26           ` Eli Zaretskii
@ 2021-12-15  0:40             ` Po Lu
  2021-12-15 13:11               ` Eli Zaretskii
  0 siblings, 1 reply; 14+ messages in thread
From: Po Lu @ 2021-12-15  0:40 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: help-gnu-emacs

Eli Zaretskii <eliz@gnu.org> writes:

> But if you always need the line before window-start, i.e. use N = 1,
> then why is that a problem?

Ah, I think we're misunderstanding things:
`pixel-point-and-height-at-unseen-line' is part of a much larger system
that tries to find the line (and pixel distance) for N = foo, by
iterating through lines where N = 1.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: Correct way to implement `pixel-point-and-height-at-unseen-line'?
  2021-12-15  0:40             ` Po Lu
@ 2021-12-15 13:11               ` Eli Zaretskii
  0 siblings, 0 replies; 14+ messages in thread
From: Eli Zaretskii @ 2021-12-15 13:11 UTC (permalink / raw)
  To: help-gnu-emacs

> From: Po Lu <luangruo@yahoo.com>
> Cc: help-gnu-emacs@gnu.org
> Date: Wed, 15 Dec 2021 08:40:37 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > But if you always need the line before window-start, i.e. use N = 1,
> > then why is that a problem?
> 
> Ah, I think we're misunderstanding things:
> `pixel-point-and-height-at-unseen-line' is part of a much larger system
> that tries to find the line (and pixel distance) for N = foo, by
> iterating through lines where N = 1.

Well, I did ask you to describe what you need to do, and responded to
the only description you gave ;-)



^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2021-12-15 13:11 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <87pmq1wag9.fsf.ref@yahoo.com>
2021-12-13  1:38 ` Correct way to implement `pixel-point-and-height-at-unseen-line'? Po Lu
2021-12-13  2:20   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-13  2:49     ` Po Lu
2021-12-13  3:04       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-13  3:18         ` Po Lu
2021-12-13 23:41           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-12-14  0:41             ` Po Lu
2021-12-13 14:32   ` Eli Zaretskii
2021-12-14  0:41     ` Po Lu
2021-12-14 13:30       ` Eli Zaretskii
2021-12-14 13:48         ` Po Lu
2021-12-14 14:26           ` Eli Zaretskii
2021-12-15  0:40             ` Po Lu
2021-12-15 13:11               ` Eli Zaretskii

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.