lilypond-user
[Top][All Lists]
Advanced

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

Re: catching layout-content


From: David Kastrup
Subject: Re: catching layout-content
Date: Fri, 25 May 2018 12:26:57 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux)

Thomas Morley <address@hidden> writes:

> Hi all,
> how can I see from inside a procedure that there is indeed an
> \override in \layout ?
> Below returns a long list, but nothing like the \override
>
> \layout { \override NoteHead.color = #red }
>
> #(pretty-print
>   (sort
>     (ly:module->alist (ly:output-def-scope $defaultlayout))
>       (lambda (p q)
>         (symbol<? (car p) (car q)))))
>
> I'm aware using
> \layout { \context { \Voice \override NoteHead.color = #red } }
> will return a different result, indicating the layout is indeed changed.
>
> Ideally I would love to catch both cases.

Well, you have to look closer: such an override is turned into an
override for every context definition matching the given context alias
(in this case the default "Bottom", so every context def without a
default child).  Try

\layout { \override NoteHead.color = #red }

#(pretty-print
  (map
   (lambda (x)
    (if (ly:context-def? (cdr x))
     (cons (car x) (ly:context-def-lookup (cdr x) 'property-ops))
     x))
   (sort
    (ly:module->alist (ly:output-def-scope $defaultlayout))
    (lambda (p q)
     (symbol<? (car p) (car q))))))
By the way: the DOC string of ly:context-def-lookup is complete and
utter crap and has nothing whatsoever to do with what the function
actually does.  Must have been some copy&paste job.

-- 
David Kastrup

reply via email to

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