> It would be possible to add a hack that translates
> \context Staff \with { Stem \set #'thickness = #4 }
> { BLA }
> to
> \context Staff {
> \property Staff.Stem \override #'thickness = #4
> BLA
> \property Staff.Stem \revert #'thickness
> }
> for existing Staff contexts.
[digression, don't have to be read]
That behaviour reminds me lisp macros.
Ie a special kind of "function" that can take a body of code as
argument, without evaluating it, in order to compute more elaborated
code. Ah, if only lilypond syntax were more lispy... adding such a
feature would be so trivial (in approximative guile scheme):
(defmacro* with-properties (context properties #:rest body)
(let ((prop-vals (group properties 2)))
`(sequential
,@(map (lambda (prop-val)
`(context-property-override ,context
,(car prop-val)
,(cadr prop-val)))
prop-vals)
,@body
,@(map (lambda (prop-val)
`(context-property-revert ,context
,prop-val))
(map car prop-vals)))))
then:
(context Staff
BLI
(with-properties Staff (stem-thickness 4
slur-transparent #t)
BLA)
BLU)
== macro expansion of with-properties ==>
(context Staff
BLI
(sequential
(context-property-override Staff stem-thickness 4)
(context-property-override Staff slur-transparent #t)
BLA
(context-property-revert Staff stem-thickness)
(context-property-revert Staff slur-transparent))
BLU)