On Tue, 2023-12-05 at 11:23 +0100, Jean Abou Samra wrote:
> Is this the sort of thing you're looking for?
> 
> #(define (dump-system-info sys)
>    (let* ((right (ly:spanner-bound sys RIGHT))
>           (time (ly:grob-property right 'when 0)))
>      (format #t "\nline break at ~f" (ly:moment-main time))))
> 
> \layout {
>   \context {
>     \Score
>     \override System.after-line-breaking = #dump-system-info
>   }
> }
> It should work on LilyPond 2.23.7 or later (current stable is 2.24). 

It doesn't work on 2.20 which is what I have installed (Ubuntu 20.04).
It also doesn't work on 2.24.3.  Doesn't work means I don't see any
"line break" prints.

> This:
> 
> > \layout {
> >   \context {
> >     \Staff
> >     \override System.after-line-breaking = #printPage
> >   }
> > }
> > should work. And it doesn't. I tried \Score context,
> > 
> 
> probably means you're running an older version.

The after-line-breaking callback appears to be in stable/2.20 from git.
 At least in system.cc.

<
https://github.com/lilypond/lilypond/blob/2a3a1ed05c3129a76e6531d3bc8b9d4f717a0175/lily/system.cc#L191C1-L191C58
>

I assume that get_property is used to evaluate a scheme expression?  Or
am I not looking at the right thing?

> Listening to page-break-event in an engraver is not what you're
> looking for — these are only emitted for explicit \break commands.

As I suspected, thanks for confirming.

> Another way would be
> 
> #(define (dump-col-info col)
>    (when (eqv? LEFT (ly:item-break-dir col))
>      (let ((time (ly:grob-property col 'when 0)))
>        (format #t "\nline break at ~f" (ly:moment-main time)))))
> 
> \layout {
>   \context {
>     \Score
>     \override NonMusicalPaperColumn.after-line-breaking = #dump-col-
> info
>   }
> }

It doesn't work on my version.

Drawing systems...mwe.ly:36:4: In expression (when (eqv? LEFT #) (let #
#)):
mwe.ly:36:4: Unbound variable: when

Unless there is a syntax error I don't see.

I tried it in 2.24.3 and it didn't work there either.  Same error.
 There might be an extra parens in there, but I don't understand all
the syntax.

For fun I also tried:

\layout {
  \context {
    \Score
    \override System.after-line-breaking = #dump-col-info
  }
}

to see if that error would trigger on System.after-line-breaking and
the error didn't occur on 2.24.3.  This implies that the after-line-
breaking callback is broken for the System object.

> which prints the time of all NonMusicalPaperColumn grobs that are
> just before a line break. Note the difference between a PaperColumn,
> which is on a vertical alignment of notes, and a
> NonMusicalPaperColumn, which is between two PaperColumns (or at one
> extreme end of the system). There is a diagram here about ly:item-
> break-dir.
> 
> Both of these methods will print at each line break, but since you
> have just one system per page, that's equivalent to printing page
> breaks in your case.

Right, that's the workaround I had in mind.

Reply via email to