On 9/20/10 1:19 AM, "David Kastrup" <d...@gnu.org> wrote:
> Patrick Schmidt <p.l.schm...@gmx.de> writes:
>
>> Hi all,
>>
>> I have several files with definitions of guitar fret diagrams for
>> various chord shapes (e.g. c-shape.ly, a-shape.ly, g-shape.ly, e-
>> shape.ly and d-shape.ly). I can't include all of these files at the
>> same time in the main file as quite a few chord alternatives start on
>> the same pitch. How can I use those definitions only temporarily? I
>> tried this:
>>
>> cShape = { \include "c-shape.ly" }
>> aShape = { \include "a-shape.ly" }
>>
>> music = \chordmode {
>> \cShape
>> c1
>> \aShape
>> c1
>> }
>
> Maybe something like
>
> stdfretboard = #(copy-list fretboard-table)
> \include "c-shape.ly"
> cshapefretboard = #(copy-list fretboard-table)
> #(set! fretboard-table stdfretboard)
> \include "a-shape.ly"
> ashapefretboard = #(copy-list fretboard-table)
> cShape = #(define-music-function ... (set! fretboard-table
> cshapefretboard)
> aShape = #(define-music-funciton ...
>
> or similar. If c-shape/a-shape just add items to the front of
> fretboard-table, you will not even need to copy stuff. If it is
> something other than a list, you'll need some other copying mechanism.
This is a good thought as a temporary workaround. However, it won't work
as-is, because fretboard-table is a hash table. We'd need to define a
hash-table copy function:
(define (hash-table-copy my-table)
(let ((new-hash-table (make-hash-table 100)))
(hash-for-each (lambda (key value)
(hash-set! new-hash-table key value))
my-table)
new-hash-table))
then replace copy-list above with hash-table-copy.
cShape and aShape would then be defined as void music functions, which is
not shown in David's code above.
Thanks for the idea, David.
Note: the code above is *not* tested. I hope to get it tested in the next
day or two.
This is still only a temporary workaround, I think, because we should avoid
the hard-coded fretboard-table.
Carl
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-user