%% DO NOT EDIT this file manually; it was automatically
%% generated from the LilyPond Wiki
%% (https://wiki.lilypond.community).
%%
%% Make any changes in the Wiki itself, or in
%% `Documentation/snippets/new/`, then run
%% `scripts/auxiliar/makelsr.pl`.
%%
%% This file is in the public domain.

\version "2.24.0"

\header {
  categories = "Scheme, Tweaks and overrides"

  texidoc = "
Some grobs can be accessed @qq{laterally} from within another grob's
callback. These are usually listed as @qq{layout objects} in the @qq{Internal
properties} section of a grob interface. The function
@code{ly:grob-object} is used to access these grobs.

Demonstrated below are some ways of accessing grobs from within a
@code{NoteHead} callback, but the technique is not limited to
@code{NoteHead}s. However, the @code{NoteHead} callback is particularly
important, since it is the implicit callback used by the @code{\\tweak}
command.

The console output of the example function below (@code{display-grobs})
is as follows.

@example
--------------------
#<Grob Accidental >
()
#<Grob Stem >
@end example

It is probably not that useful, but it demonstrates that the grobs are
indeed being accessed.
"

  doctitle = "Using ly:grob-object to access grobs with \\tweak"
} % begin verbatim


#(define (notehead-get-accidental notehead)
   ;; notehead is grob
   (ly:grob-object notehead 'accidental-grob))

#(define (notehead-get-arpeggio notehead)
   ;; notehead is grob
   (let ((notecolumn (notehead-get-notecolumn notehead)))
     (ly:grob-object notecolumn 'arpeggio)))

#(define (notehead-get-notecolumn notehead)
   ;; notehead is grob
   (ly:grob-parent notehead X))

#(define (notehead-get-stem notehead)
   ;; notehead is grob
   (let ((notecolumn (notehead-get-notecolumn notehead)))
     (ly:grob-object notecolumn 'stem)))

#(define (display-grobs notehead)
   ;; notehead is grob
   (let ((accidental (notehead-get-accidental notehead))
         (arpeggio (notehead-get-arpeggio notehead))
         (stem (notehead-get-stem notehead)))
     (format (current-error-port) "~2&~a\n" (make-string 20 #\-))
     (for-each
      (lambda (x) (format (current-error-port) "~a\n" x))
      (list accidental arpeggio stem))))

\relative c' {
  %% display grobs for each note head:
  %\override NoteHead.before-line-breaking = #display-grobs
  <c
  %% or just for one:
  \tweak before-line-breaking #display-grobs
  es
  g>1\arpeggio
}
