Hi Tina,

just as a gut reaction: I think this is a really great idea!

Lukas

Valentin Petzel <[email protected]> schrieb am Do., 19. Juni 2025, 18:28:

> Hello Pondmates!
>
> In Lilypond we have this wonderful but weird sugar function `grob-
> transformer`. While this thing is nice it is also a bit awkward. For one
> thing
> it requires specification of *what* is transformed (for else it does not
> know
> that information. For another thing it adds a lot of scheme boilerplate,
> making score less transparent.
>
> I’ve been thinking we could quite simply facilitate usuage by wrapping
> this in
> a music function like this:
>
> %%%
> transform =
> #(define-music-function (path proc)
>    (symbol-list? procedure?)
>    #{
>      \override #path =
>      #(grob-transformer (last path) proc)
>    #})
> %%%
>
> This will more or less mirror the interface of `\override path = callback`
> by
> a `\transform path transformer`. This way we can nicely write something
> like
> this:
>
> %%%
> {
>   \temporary\transform NoteHead.stencil
>   #(lambda (grob orig) (ly:stencil-in-color orig "red"))
>   \temporary\transform NoteHead.stencil
>   #(lambda (grob orig) (ly:stencil-scale orig 2 2))
>   4 4 4 4
> }
> %%%
>
> which I think is much more concise than
>
> %%%
> {
>   \temporary\override NoteHead.stencil =
>   #(grob-transformer
>     'stencil
>     (lambda (grob orig) (ly:stencil-in-color orig "red")))
>   \temporary\override NoteHead.stencil =
>   #(grob-transformer
>     'stencil
>     (lambda (grob orig) (ly:stencil-scale orig 2 2)))
>   4 4 4 4
> }
> %%%
>
> and would thus make using this feature more accessible and scores nicer to
> look at.
>
> So I would like to ask what is your take, and if we maybe should include
> such
> an interface into Lilypond.
>
> Cheers,
> Tina

Reply via email to