diff --git a/chord_settings.ly b/chord_settings.ly index d811da4..a6bd174 100644 --- a/chord_settings.ly +++ b/chord_settings.ly @@ -138,3 +138,44 @@ generalLayout = \layout { } } #})) + +% If you add this engraver to ChordNames Context chords get only printed on chordchanges and not at newline. +% See https://lists.gnu.org/archive/html/lilypond-user/2020-07/msg00187.html +Ignoring_newline_chord_changes_engraver = + #(lambda (ctx) + (let* ((chord #f) + (last-chord #f)) + + (define (at-line-beginning? grob) + (let* ((col (ly:item-get-column grob)) + (ln (ly:grob-object col 'left-neighbor)) + (col-to-check (if (ly:grob? ln) ln col))) + (and (eq? #t (ly:grob-property col-to-check 'non-musical)) + (= 1 (ly:item-break-dir col-to-check))))) + + (make-engraver + (acknowledgers + ((chord-name-interface this-engraver grob source-engraver) + + (if chord + (begin + (set! last-chord chord) + (set! chord #f))) + + (set! chord (ly:grob-property grob 'text)) + + ;; If two subsequent chords are equal and chordChanges is enabled, + ;; set 'after-line-breaking to a procedure which sets the stencil + ;; to an empty-stencil if the new chord is at line-start. + (if (and (equal? chord last-chord) + (ly:context-property ctx 'chordChanges #f)) + (ly:grob-set-property! grob 'after-line-breaking + (lambda (grob) + (if (at-line-beginning? grob) + (ly:grob-set-property! grob 'stencil empty-stencil)) + ;; keep default + (ly:chord-name::after-line-breaking grob)))))) + ((finalize this-engraver) + ;; house keeping + (set! chord #f) + (set! last-chord #f))))) \ No newline at end of file diff --git a/verses_with_chords.ly b/verses_with_chords.ly index 2783dee..c9bcc0d 100644 --- a/verses_with_chords.ly +++ b/verses_with_chords.ly @@ -277,6 +277,7 @@ \ChordNames \override VerticalAxisGroup.staff-affinity = ##f \override ChordName.extra-spacing-width = #'(-0.1 . 0.1) + \consists \Ignoring_newline_chord_changes_engraver } \context { \Score