Wed, 7 Jan 2004 00:09:55 +0100, Han-Wen a dit : > A similar idea has been on my mind for some time. In LilyPond 2.1 CVS, > you can now do
> \context Staff \with { StaffSymbol \set #'line-count = #4 } { c4 } > to get a staff with 4 lines. > Currently, this only works for new contexts. Indeed that would be great if \with could be used inside a existing context: \context Staff { BLI \with { Stem \set #'thickness = #4 } { BLA } BLU } > 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) nicolas _______________________________________________ Lilypond-user mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/lilypond-user