lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Tracking usage of variables


From: David Kastrup
Subject: Re: Tracking usage of variables
Date: Sun, 03 Mar 2019 16:28:05 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

Mark Knoop <address@hidden> writes:

> At 13:17 on 03 Mar 2019, David Kastrup wrote:
>> Mark Knoop <address@hidden> writes:
>>> Often in the music I'm engraving a single variable might be used and
>>> transformed in multiple contexts and repetitions throughout the
>>> piece. This can become difficult to keep track of, particularly if
>>> subsequent changes are made which might want to affect only one or
>>> some of the instances.
>>>
>>> It would be great to be able to display the use of variables
>>> throughout a score, I imagine by writing a custom engraver for this.
>>
>> Variable use does not sound like a use case for engravers since
>> engravers work at a different stage than variable use.
>
> Yes, I thought this might be the case.
>
>> How about something like
>>
>> motif = { c'4 e' g' c'' }
>>
>> make-obvious =
>> #(define-void-function (x) (symbol?)
>>    (let ((old (ly:music-deep-copy (ly:parser-lookup x))))
>>      (ly:parser-define! x
>>        (define-music-function () ()
>>          #{ \context Bottom << <>-#(format "Variable: ~s" x) $old >> #}))))
>>
>> \make-obvious motif
>>
>> I apologize for vandalizing your code and throwing out the bulk of
>> functionality and markup you put in but that was just a quick and easy
>> job.
>
> That's brilliant, thanks. I'll work more with that and see where it takes me.

Note that a music function would not actually be required to do what I
show here.  However, when you use a music function, you have the ability
to refer to (*location*) inside of it in which case this will refer to
the current input location where the music function is getting called.
I am not sure that this is what you want.  Of course you also have the
ability to call all sorts of indexing functions (and that does appear
like something you wanted to do).  If those indexing functions should
not refer to input line and number but instead to measure numbers or
stuff, you'd likely need to engage the help of \applyContext or
engravers or whatever after all.

-- 
David Kastrup



reply via email to

[Prev in Thread] Current Thread [Next in Thread]