Hi Jay, On Sun, Sep 28, 2014 at 7:24 PM, David Nalesnik <david.nales...@gmail.com> wrote: > > > Possibly the problem is that the custom engraver is setting measureLength > too late for Completion_heads_engraver to use it? > > That just might be it. The Completion_heads_engraver listens for note-events. So, doing this same with the custom engraver gives us the code below:
alternateTiming = #(lambda (sig) (lambda (context) (let ((last-bnum 0)) (make-engraver (listeners ((note-event engraver event) (let* ((bnum (ly:context-property context 'currentBarNumber)) (len (length sig)) ; how many terms in compound meter (pos (modulo bnum len)) (pos (if (= 0 pos) len pos)) ; first bar in pattern, second... (pos-in-list (1- pos)) ; because elements of list are numbered from 0 (desired-measure-len (to-moment (list-ref sig pos-in-list)))) (ly:context-set-property! context 'measureLength desired-measure-len) (format #t "bnum = ~a len ~a pos ~a measurelength ~a completion ~a~%" bnum len pos (ly:context-property context 'measureLength) (ly:context-property context 'completionUnit)) (if (= pos-in-list 0) (begin (if (> bnum last-bnum) (ly:context-set-property! context 'whichBar "||")) (set! last-bnum bnum)))))))))) %%%%%%%%%%% This appears to work with your two-staff example. How it fares with others, I don't know. Keep your fingers crossed. Note: You're using an older syntax for Scheme engravers. I've adapted this one to use the make-engraver macro that David Kastrup introduced at some point. Best, David
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user