Urs Liska <u...@openlilylib.org> writes: > Hi David, > > this is great! > > Am 29.09.2013 09:51, schrieb David Kastrup: >> David Kastrup <d...@gnu.org> writes: >> >>> colorizeDir = >>> #(define-music-function (parser location item) >>> (symbol-list-or-music?) >>> (define (grob-colorize-dir grob) >>> (let ((ev (event-cause grob))) >>> (and ev (ly:event-property ev 'direction #f) >>> red))) >>> #{ \tweak color #grob-colorize-dir #item #}) >> Not everything might be prepared to deal with a color #f, so it may be >> safer to write the slightly more complex >> >> (if (and ev (ly:event-property ev 'direction #f)) >> red '()) >> >> expression inside. >> > Could you please explain to me (or give a few hints) what this last > (and) expression does exactly?
if ev is non-#f and the property with the name 'direction in ev is non-#f (while considering an unset direction as defaulting to #f), then red is returned, otherwise '(). > I would like to extend this to treat up/down independently > > > I tried to modify it as follows: > > colorizeDir = > > #(define-music-function (parser location item) > > (symbol-list-or-music?) > > (define (grob-colorize-dir grob) > > (let ((ev (event-cause grob))) > > (if (and ev (ly:event-property ev 'direction #f)) > > (cond ((equal? 'direction 1) red) The symbol 'direction is a symbol and never equal to a number. You forgot to look up the property, instead comparing with the _name_ of the property. Any reason for the double-spacing here? It's a nuisance to quote and comment on. You can write: #(define-music-function (parser location item) (symbol-list-or-music?) (define (grob-colorize-dir grob) (let ((ev (event-cause grob))) (case (ly:event-property ev 'direction) ((1) red) ((-1) blue) (else '()))))) #{ \tweak color #grob-colorize-dir #item #}) -- David Kastrup _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user