[ << Interfaces for programmers ] | [Top][Contents][Index] | [ LilyPond Scheme interfaces >> ] |
[ < Context evaluation ] | [ Up : Contexts for programmers ] | [ Callback functions > ] |
2.6.2 Running a function on all layout objects
The most versatile way of tuning an object is \applyOutput
which
works by inserting an event into the specified context
(ApplyOutputEvent). Its syntax is either
\applyOutput Context proc
or
\applyOutput Context.Grob proc
where proc
is a Scheme function, taking three arguments.
When interpreted, the function proc
is called for
every layout object (with grob name Grob if specified) found
in the context Context
at the current time step, with
the following arguments:
- the layout object itself,
- the context where the layout object was created, and
- the context where
\applyOutput
is processed.
In addition, the cause of the layout object, i.e., the music
expression or object that was responsible for creating it, is in the
object property cause
. For example, for a note head, this is a
NoteHead event, and for a stem object,
this is a Stem object.
Here is a function to use for \applyOutput
; it blanks
note-heads on the center-line and next to it:
#(define (blanker grob grob-origin context) (if (< (abs (ly:grob-property grob 'staff-position)) 2) (set! (ly:grob-property grob 'transparent) #t))) \relative { a'4 e8 <<\applyOutput Voice.NoteHead #blanker a c d>> b2 }
To have function interpreted at the Score
or Staff
level use these forms
\applyOutput Score… \applyOutput Staff…
[ << Interfaces for programmers ] | [Top][Contents][Index] | [ LilyPond Scheme interfaces >> ] |
[ < Context evaluation ] | [ Up : Contexts for programmers ] | [ Callback functions > ] |