I am not sure where to place this new engraver code so I can use it. I
tried researching this in the manual, but was still unclear. Where should
it appear? Again, thanks for your help

On Mon, Jul 13, 2020 at 8:15 PM Thomas Morley <thomasmorle...@gmail.com>
wrote:

> Am Mo., 13. Juli 2020 um 19:40 Uhr schrieb Carl Sorensen
> <carl.d.soren...@gmail.com>:
> >
> > Hi Ernie,
> >
> > On Mon, Jul 13, 2020 at 7:03 AM Ernie Braganza <ernie.braga...@gmail.com>
> wrote:
> >>
> >> Hello,
> >>
> >> How can I stop the repeated chord name after the line break?
> >> I thought the break-visibility settings for ChordName would work, for
> example setting the beginning-of-line-invisible value to false:
> >>  \override Score.ChordName.break-visibility = ##(#t #t #f)
> >> but that does not have any effect at all.
> >
> >
> > The reason this does not have any effect is that the code executed when
> chordChanges is set to ##t changes the break-visiblity of the specific
> chord name (sets it to beginning-of-line-visible).  And that code is in
> C++, not Scheme, so I don't know how to override it.
> >
> > I guess one could write a Scheme engraver for ChordName to replace the
> built-in one.
> >
> > You should also raise an issue on the issues list asking for an
> enhancement.  The enhancement would need to add some additional property
> (or change the existing property from a simple boolean), because we'd need
> to separately control hiding of repeated chord names only when not at the
> beginning of the line, and always hiding repeated chord names.
> >
> > I actually think the best way to do it would be to change the
> chordChanges property from a boolean to a break-visibility.  I can see that
> being quite easy to do.
> >
> > In the meantime, as a workaround, you might just wish to fill up your
> chordmode with a bunch of s chords, and only put the chords in where you
> want them displayed:
> >
> > \version "2.20.0"
> > harmonies = \chordmode {
> >   d2  c
> >  \break
> >   % I don't want the repeated c chord name to display after the line
> break
> >   s d
> > }
> > \new ChordNames {
> >   \harmonies
> > }
> >
> > HTH,
> >
> > Carl
> >
>
> Here an engraver which transforms the default stencil to an empty
> stencil under certain conditions (it's not a rewrite of
> Chord_name_engraver)
>
> \new ChordNames
>   \with {
>     chordChanges = ##t
>       \consists
>       #(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)))))
>   }
>   \chordmode { d2 c~ \break c d }
>
> HTH,
>   Harm
>

Reply via email to