On 8/21/11 3:01 AM, "David Kastrup" <d...@gnu.org> wrote: > Carl Sorensen <c_soren...@byu.edu> writes: > >> On 8/21/11 1:45 AM, "David Kastrup" <d...@gnu.org> wrote: >> >>> My suggestion >>> would be >>> >>> \set x = 4 ; setting the default >>> \override x = 5 ; context set has 5 >>> \override x = 2 ; context set has 5 2, result 5 >>> \once\override x = 3 ; context set has 3(o) 5 2, result 3 >>> \revert x ; context set has 3(o) 2, result 3 >>> [wait ...] ; context set has 2 result 2 >>> >> Yes, this is clearly better than my proposal. > > Also wrong, since I mixed up the order of 2 and 5. I hope you > understood what I meant rather than what I wrote. The following should > be better: > > \set x = 4 ; setting the default > \override x = 5 ; context set has 5 > \override x = 2 ; context set has 2 5, result 2 > \once\override x = 3 ; context set has 3(o) 2 5, result 3 > \revert x ; context set has 3(o) 5, result 3 > [wait ...] ; context set has 5 result 5
Yes, I understood what you meant. I would propose the following: \override -- pushes a value on the stack to remain until reverted \once \override -- pushes a value on the stack to last only for this time step. Should be marked as special since it is a \once \revert -- pulls a non-once value from the stack. \once \revert -- pulls a non-once value from the stack, but the pull will last only for this time step. Because there's no way to keep the pull on the stack, this would require something like a separate once stack. \revert \once -- pulls a once value from the stack. Lasts only for the current time step (as does the corresponding \once \override that is pulled). I think these semantics are clearly explainable and are close to the current performance, IIUC. The changes are that \revert and \once \revert ignore \once \override, and \revert \once is added to allow the reversion of a \once \override. Note that I still have a hard time seeing a reasonable use of \revert \once. It's only valuable if you know that you already have a \once \override on the stack. But I can see that we ought to have a means to cancel anything we can override. \set x = 4 ; setting the default \override x = 5 ; context set has 5; once set has '() \override x = 2 ; context set has 2 5; once set has '(); result 2 \once\revert x ; context set has 2 5; once set has 5; result 5 \once\override x = 3 ; context set has 2 5; once set has 3(o),5; result 3 \revert x ; context set has 5; once set has 3(o),5; result 3 [wait ...] ; context set has 5; once set has '() result 5 Or another set of commands: \set x = 4 ; setting the default \override x = 5 ; context set has 5; once set has '() \override x = 2 ; context set has 2 5; once set has '(); result 2 \once\revert x ; context set has 2 5; once set has 5; result 5 \revert x ; context set has 5; once set has 4; result 4 [wait ...] ; context set has 5; once set has '(); result 5 Yet another: \set x = 4 ; setting the default \override x = 5 ; context set has 5; once set has '() \override x = 2 ; context set has 2 5; once set has '(); result 2 \once\revert x ; context set has 2 5; once set has 5; result 5 \once\override x = 3 ; context set has 2 5; once set has 3(o),5; result 3 \revert\once x ; context set has 2 5; once set has 5; result 5 [wait ...] ; context set has 2 5; once set has '() result 2 I think all are predictable. Thanks, Carl _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel