On 2020-08-29 3:19 am, Wols Lists wrote:
On 29/08/20 05:45, Werner LEMBERG wrote:
\once \override FretBoard.size = #'1.0
\once \override FretBoard.fret-diagram-details.barre-type =
#'straight
\once \override FretBoard.fret-diagram-details.dot-color =
#'black
\once \override FretBoard.fret-diagram-details.finger-code =
#'below-string
c'
Unfortunately this might well require re-writing the parser, but it
struck me it might be a nice idea to nick an idea from other object
oriented languages as follows ...
\once \override FretBoard.size = #'1.0
\once \override \using FretBoard.fret-diagram-details {
.barre-type = #'straight
.dot-color = #'black
.finger-code = #'below-string
}
c'
No need to rewrite anything. We can use \with to assist with this
pattern:
%%%%
overrideII =
#(define-music-function
(prop mods)
(key-list? ly:context-mod?)
(define (assign? mod) (eq? 'assign (car mod)))
(define (proc mod)
(let ((subprop (cadr mod))
(value (caddr mod)))
#{ \override #prop . #subprop = #value #}))
#{ #@(map proc (filter assign? (ly:get-context-mods mods))) #})
%%%%
While there is almost certainly a better name than overrideII, it
permits the following:
%%%%
\once \override FretBoard.fret-diagram-details.barre-type = #'none
\once \override FretBoard.fret-diagram-details.number-type = #'arabic
\once \override FretBoard.fret-diagram-details.orientation = #'landscape
\once \override FretBoard.fret-diagram-details.mute-string = #"M"
\once \override FretBoard.fret-diagram-details.label-dir = #LEFT
\once \override FretBoard.fret-diagram-details.dot-color = #'black
%% ...becomes...
\once \overrideII FretBoard.fret-diagram-details
\with {
barre-type = #'none
number-type = #'arabic
orientation = #'landscape
mute-string = #"M"
label-dir = #LEFT
dot-color = #'black
}
%%%%
-- Aaron Hill