\version "2.22.1" #(set-object-property! 'displayGrobNames 'translation-type? boolean?) #(define (interval-robustify iv) (if (interval-empty? iv) '(0 . 0) iv)) #(define-markup-command (grob-name layout props grob-stencil text) (ly:stencil? markup?) #:properties ((grob-name-color "darkcyan") (grob-name-rotation 45) (grob-name-font-size 9) (grob-name-horizontal-placement RIGHT) (grob-name-vertical-placement UP) (grob-name-text-horizontal-placement LEFT) (grob-name-text-vertical-placement DOWN) (grob-name-horizontal-padding 0.3) (grob-name-vertical-padding 0.3)) (let* ((X-ext (interval-robustify (ly:stencil-extent grob-stencil X))) (Y-ext (interval-robustify (ly:stencil-extent grob-stencil Y))) (X-pos (+ grob-name-horizontal-padding (interval-index X-ext grob-name-horizontal-placement))) (Y-pos (+ grob-name-vertical-padding (interval-index Y-ext grob-name-vertical-placement))) (offset (cons X-pos Y-pos))) (interpret-markup layout props #{ \markup \with-outline \empty-markup \translate #offset \general-align #X #grob-name-text-horizontal-placement \general-align #Y #grob-name-text-vertical-placement \rotate #grob-name-rotation \with-color #grob-name-color \override #'(font-encoding . latin1) #text #}))) #(define (Grob_name_engraver context) (let ((grobs-found '()) (do-display #f)) (make-engraver ((process-music engraver) (set! do-display (ly:context-property context 'displayGrobNames))) (acknowledgers ((grob-interface engraver grob source-engraver) (if do-display (set! grobs-found (cons (cons grob source-engraver) grobs-found))))) ((process-acknowledged engraver) (if do-display (for-each (lambda (grob-with-engraver) (let* ((grob (car grob-with-engraver))) (if (grob::is-live? grob) (let* ((stencil-data (ly:grob-property-data grob 'stencil)) (grob-name (grob::name grob)) (engraver (cdr grob-with-engraver)) (context (ly:translator-context engraver)) (context-name (ly:context-name context)) (text (string-append (symbol->string context-name) "." (symbol->string grob-name))) (layout (ly:grob-layout grob)) (text-font-defaults (list (ly:output-def-lookup layout 'text-font-defaults)))) (set! (ly:grob-property grob 'stencil) (lambda (grob) (let ((original-stencil (if (procedure? stencil-data) (stencil-data grob) stencil-data))) (if (ly:stencil? original-stencil) (let* ((mkup (make-grob-name-markup original-stencil text)) (text-stencil (interpret-markup layout text-font-defaults mkup))) (ly:stencil-add original-stencil text-stencil)) original-stencil)))))))) grobs-found)) (set! grobs-found '()))))) \layout { \context { \Score \consists #Grob_name_engraver displayGrobNames = ##f } } showGrobNames = \set Score.displayGrobNames = ##t hideGrobNames = \set Score.displayGrobNames = ##f