Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Benkő Pál
2012/10/13 David Kastrup d...@gnu.org:

 In ly/music-functions-init.ly I see code like the following:

 crossStaff =
 #(define-music-function (parser location notes) (ly:music?)
   (_i Create cross-staff stems)
   #{
   \override Stem #'cross-staff = #cross-staff-connect
   \override Flag #'style = #'no-flag
   $notes
   \revert Stem #'cross-staff
   \revert Flag #'style
 #})

 There is a problem with that: in terms of stack operations, \override
 and \revert are not opposing pairs: \override is pop+push (so that
 multiple overrides in a row don't accrue cruft), \revert is pop.  So the
 net effect of this sequence is pop, while it should be neutral.

 In the Scheme layer, we have the distinction between
 make-grob-property-set (corresponding to user command \override, pop+push)
 make-grob-property-override (not available as user command, just push)
 make-grob-property-revert (corresponding to user command \revert, just pop)

 So we need something like

 crossStaff =
 #(define-music-function (parser location notes) (ly:music?)
   (_i Create cross-staff stems)
   #{
   \temporary\override Stem #'cross-staff = #cross-staff-connect
   \temporary\override Flag #'style = #'no-flag
   $notes
   \revert Stem #'cross-staff
   \revert Flag #'style
 #})

 and, as a corrollary, \temporary\whatever and \undo\whatever will be a
 proper push/pop pair.

 Now I find \temporary a fitting name.  It is just a bit cumbersome to
 type.  \interim is hardly shorter, \adhoc seems a bit less descriptive.

 Opinions?  It might also be possible to do

 \temporary { \override Stem #'cross-staff = #cross-staff-connect
  \override Flag #'style = #'no-flag }
$notes

 and have this apply matching push/pop pairs around $notes.  It certainly
 would at least cater for the most common need of a non-first-popping
 push.  Perhaps we don't need both (at the current point of time, we
 don't have either, and the naming is inconsistent with
 make-grob-property-*), but as the crossStaff example shows, we need at
 least one of those options.

as a programmer I want a single push and wouldn't mind if pop+push
were two operations; I can't tell what a musician wants.

p

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Werner LEMBERG w...@gnu.org writes:

 So we need something like
 
 crossStaff =
 #(define-music-function (parser location notes) (ly:music?)
   (_i Create cross-staff stems)
   #{
   \temporary\override Stem #'cross-staff = #cross-staff-connect
   \temporary\override Flag #'style = #'no-flag
   $notes
   \revert Stem #'cross-staff
   \revert Flag #'style
 #})
 
 and, as a corrollary, \temporary\whatever and \undo\whatever will be a
 proper push/pop pair.

 I like the name \temporary.  Is this of practical use outside of music
 functions also?

The main point is to restore to a previous state after a temporary
override.  This is of course also useful in music assigned to music
variables.  In the context of a larger music piece, you can, of course,
just repeat any previous overrides that you want to see reestablished,
but this is not cutpaste friendly.

Maybe \push\override ... but this has the disadvantage that you never
actively see a \pop.  Hm.  Maybe we should rename \undo to \pop then?

 Opinions?  It might also be possible to do
 
 \temporary { \override Stem #'cross-staff = #cross-staff-connect
  \override Flag #'style = #'no-flag }
$notes

 I like that too.

It is less versatile, though.

 What about

   \push { Stem.cross-staff = #cross-staff-connect
   Flag.style = #'no-flag }
   $notes
   \pop { Stem.cross-staff
  Flag.style }

 [I'm using the `.' operator creatively; no idea whether this works,
 and no need to discuss this in case it doesn't :-)]

It doesn't.  And I don't even have an awfully twisted idea how to beat
LilyPond into supporting this in any meaningful manner.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Werner LEMBERG
 I like the name \temporary.  Is this of practical use outside of
 music functions also?
 
 The main point is to restore to a previous state after a temporary
 override.  This is of course also useful in music assigned to music
 variables.  In the context of a larger music piece, you can, of
 course, just repeat any previous overrides that you want to see
 reestablished, but this is not cutpaste friendly.

OK, for music functions and variable assignments.  Then, I think,
\temporary is indeed just fine.

 Maybe \push\override ... but this has the disadvantage that you
 never actively see a \pop.  Hm.  Maybe we should rename \undo to
 \pop then?

I think that we either need a consistent use if \push and \pop, or we
should refrain using it.  Given that the Scheme functions handling the
stack are not mapped one-to-one to user commands, as you've shown in a
previous mail, I think we should avoid \push and \pop.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Context.Grob considered as symbol list

2012-10-13 Thread David Kastrup
David Kastrup d...@gnu.org writes:

 Werner LEMBERG w...@gnu.org writes:

 On the other hand: Wouldn't it be possible to make LilyPond simply
 walk over all possible combinations to find out whether, say,

   foo.bar

 is a context followed by a property, or a property followed by a
 sub-property, etc.?

 Technically impossible.  At the time an \override is parsed, the
 valid set of contexts has not been established.

 OK.  And the interpretation of the just parsed data (this is, checking
 the validity of contexts, properties, etc.) can't be delayed, right?

 Context validity can't be checked at that point of time.  The system
 of available properties, however, is more or less considered static,
 so the basic consistency checks for overriding existing/non-existing
 properties are being done while parsing.  However, I consider it a bad
 idea to use insider knowledge for parsing an override (meaning skip
 ahead until finding a word declared as a grob property and split the
 input backwards from there) since it means that understanding the
 input requires knowing _all_ prospective properties, whether it is a
 human, a LilyPond importer, a syntax highlighter, a cross referencing
 tool or LilyPond itself that is trying to interpret the input.

But then most of those don't need to _understand_ the input really.  And
it turns out that _all_ decisions, whether we are talking tweak or
override, can be made on the criterion is the first element in the list
a grob name?, the decision that currently _can_ be made statically.  Of
course, the call interface of \override/\revert currently expects
_two_ symbol chains.  Conflating these chains (making \tweak and
\override compatible again) is not really a backward compatibility
problem for \override since its $#!? syntax demands conflating symbol
lists before the '=' signs anyway.  \revert, however, is a different
matter.  It currently needs exactly two symbol chains as argument.  To
accept only one, it would need to first accept one symbol chain, check
it, and then _only_ in case that this symbol chain _ends_ in a grob
name, parse another one.

Very unpretty.  But yes, it would likely get a load of users off our
necks.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread Han-Wen Nienhuys
Hello Graham,

Many thanks for the amazing amount of energy and work you've put in
over the years.  You certainly brought a very new style of leadership
to the project after I have left. I hope we can count on you to stick
around to give comments in the role of experienced emeritus.


On Fri, Oct 12, 2012 at 9:01 AM, Graham Percival
gra...@percival-music.ca wrote:
 I guess it's time to make it official: I'm stepping down as
 project manager.  I'll stick around for a while to review patches
 on countdowns and participate in policy discussions, but don't be
 surprised if I'm gone for good in a few months.

 It's been quite a ride for the past 9 or 10 years (depending on
 which cvs commit is deemed to be my first contribution).  I've
 gone from making trivial typo corrections, to organizing a
 directory of snippets, to reorganizing the whole documentation, to
 recruiting+training 20 doc editors over a single year, to building
 the binaries, and finally to trying to organize the team of
 developers.  Over that time I've studied or worked at 5 different
 university on 3 continents.  But nothing lasts forever; the time
 has come to leave.

 For most of 2012 I haven't been doing much with LilyPond, and in
 the past few weeks I've been doing even less -- but I find that I
 don't miss it.  I've made some good friends while working on
 LilyPond, and Waltrop was great.  I was really fired up about
 LilyPond when I left.  But sadly the warm feelings from that
 meeting vanished rather quickly, and I was left feeling even more
 jaded than I had earlier in the year.

 Ultimately, I haven't used lilypond for my own music since 2004.
 I was hoping that I could get fired up about my old pieces if I
 could create a final version with a nice stable syntax, but that
 hasn't happened.  After I'm finished my phd, I'll do the thing
 which every computer science student should do at least once in
 their life: I'll make my own language.  I'm not comfortable with
 the level of abstractions that lilypond offers.  Just like
 different programming languages make it easier (or harder) to
 write certain types of programs, a different sheet music language
 would make it easier to express the type of music that I write.
 I'll write a python script which transforms a text file into a .ly
 file.  There's a number of things which can be done with text
 manipulation which will allow me to write music in a simpler
 fashion.  I'll make the resulting script available under a Free
 license, of course, but the most important thing is that I'll be
 scratching an itch as the saying goes.

 Other than that, I'll be spending my time on other volunteer
 projects, either in the audio domain or scientific computing such
 as scipy or eigen.  I think it would be good to challenge myself
 with some hardcore DSP or numerical software programming, as both
 areas tie directly to my probable research or job work.


 So what's next for lilypond?  There's no immediate rush to change
 things.  At some point somebody should clone the github lilypond
 repositories, but that's not a big deal.  There's a mountain of
 miscellaneous tasks that I do and can't remember, so I guess that
 over the next few months I'll send emails to -devel whenever I
 discover something that needs to be done.  I don't mind passing on
 advice or whatever I can remember to people taking on those tasks.
 The most immediate issue is building releases, but Phil's doing
 that.  The most important thing is to have a new GNU
 co-maintainer.  I feel a bit bad about dropping out only a few
 months after officially taking on that position, so I'll keep on
 doing it for the next few months.  It would be great if somebody
 stepped forward for this -- start off by working on the known
 problems with our GNU compliance, and we'll see how things
 develop.

 The schedule for me leaving isn't at all fixed, but I imagine that
 I'd be ok with spending 1-2 hours a week for months or even years
 to come.  The most important thing would be to keep it easy to
 participate meaningfully with only a small amount of time.  The
 key to that are the patch countdowns and policy ideas coming as a
 formal proposal.  Not to brag, but I really think that the 2011
 summer GOP proposals were ideal.  Topic were scheduled usually at
 least a week in advance, proposals were on the web, a draft
 existed for a week, then a firm proposal for another week.  If
 there was significant disagreement, the discussion was extended
 and/or the policy was scrapped or rewritten.

 I'm not going to be reading -devel in detail, but if I knew that I
 could check my mail (or a webpage) once a week at a regular time
 to see a well-written proposal, I'd be happy to discuss it.  I'm
 not the only senior developer with waning interest or time for
 lilypond; I think that such an arrangement could help keep all
 those people slightly involved in lilypond.  However, I'm not
 going to be the person doing such organization any more.

 We've had a number of 

Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Werner LEMBERG w...@gnu.org writes:

 I like the name \temporary.  Is this of practical use outside of
 music functions also?
 
 The main point is to restore to a previous state after a temporary
 override.  This is of course also useful in music assigned to music
 variables.  In the context of a larger music piece, you can, of
 course, just repeat any previous overrides that you want to see
 reestablished, but this is not cutpaste friendly.

 OK, for music functions and variable assignments.  Then, I think,
 \temporary is indeed just fine.

 Maybe \push\override ... but this has the disadvantage that you
 never actively see a \pop.  Hm.  Maybe we should rename \undo to
 \pop then?

 I think that we either need a consistent use if \push and \pop, or we
 should refrain using it.  Given that the Scheme functions handling the
 stack are not mapped one-to-one to user commands, as you've shown in a
 previous mail, I think we should avoid \push and \pop.

The point is that it feels natural to use
\push \some-override-sequence
\pop \some-override-sequence
in pairs, and both \push and \pop could complain if
\some-override-sequence contained something unsuitable for complete
reversal.

And indeed, if I write

\omit Accidental
cis dis cis dis
\pop\omit Accidental

this looks ugly and not properly matched, and it _is_ not properly
matched.  If there was a non-standard stencil set in that context
previously, it is gone.

So maybe \pop (complemented by \push) is indeed a better name than
\undo.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Trevor Daniels
David Kastrup wrote Saturday, October 13, 2012 1:01 AM
 
 In ly/music-functions-init.ly I see code like the following:
 
 crossStaff =
 #(define-music-function (parser location notes) (ly:music?)
  (_i Create cross-staff stems)
  #{
  \override Stem #'cross-staff = #cross-staff-connect
  \override Flag #'style = #'no-flag
  $notes
  \revert Stem #'cross-staff
  \revert Flag #'style
 #})
 
 There is a problem with that: in terms of stack operations, \override
 and \revert are not opposing pairs: \override is pop+push (so that
 multiple overrides in a row don't accrue cruft), \revert is pop.  So the
 net effect of this sequence is pop, while it should be neutral.

What would be the effect of this?  The implication is that something
goes wrong, but bugs in this area have never been reported, AFAIK.

I understand stacks, pop and push, but I'm clearly missing something 
here.  Perhaps it's due to my unfamiliarity with the structure of the 
stack(s). 
 
Trevor
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Trevor Daniels t.dani...@treda.co.uk writes:

 David Kastrup wrote Saturday, October 13, 2012 1:01 AM
 
 In ly/music-functions-init.ly I see code like the following:
 
 crossStaff =
 #(define-music-function (parser location notes) (ly:music?)
  (_i Create cross-staff stems)
  #{
  \override Stem #'cross-staff = #cross-staff-connect
  \override Flag #'style = #'no-flag
  $notes
  \revert Stem #'cross-staff
  \revert Flag #'style
 #})
 
 There is a problem with that: in terms of stack operations, \override
 and \revert are not opposing pairs: \override is pop+push (so that
 multiple overrides in a row don't accrue cruft), \revert is pop.  So the
 net effect of this sequence is pop, while it should be neutral.

 What would be the effect of this?  The implication is that something
 goes wrong, but bugs in this area have never been reported, AFAIK.

 I understand stacks, pop and push, but I'm clearly missing something 
 here.  Perhaps it's due to my unfamiliarity with the structure of the 
 stack(s). 

Each context has its own stack, so popping too much only makes a
difference if the stack actually was non-empty to start with.

Check out

\new Staff \with { autoBeaming = ##f }
{ \override Flag #'style = #'mensural c8 c \crossStaff c c c c c c }

After the crossStaff, the flag style has reverted to normal again rather
than mensural.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Werner LEMBERG
 [...] if I write
 
 \omit Accidental
 cis dis cis dis
 \pop\omit Accidental
 
 this looks ugly and not properly matched, and it _is_ not properly
 matched.  If there was a non-standard stencil set in that context
 previously, it is gone.
 
 So maybe \pop (complemented by \push) is indeed a better name than
 \undo.

But `push' means `to put something on the stack'.  Having

  \omit Accidental

however, does exactly the opposite, this is, it *removes* something
(well, it pushes the `omit' property, so to say, but this can become
very irritating if it gets more complicated).  For this particular
reason I prefer \undo for the example you've given above.

I get the feeling that we have to completely reconsider how \set,
\revert, and friends are named and used.  Your clean-ups and
reorganization of the syntax reveal more and more inconsistencies, and
my head starts aching if I think of \once, \undo, and so on.

Maybe it makes sense to map the corresponding Scheme functions anew to
`simpler' lilypond commands which do less but in a more consistent
manner.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Werner LEMBERG w...@gnu.org writes:

 [...] if I write
 
 \omit Accidental
 cis dis cis dis
 \pop\omit Accidental
 
 this looks ugly and not properly matched, and it _is_ not properly
 matched.  If there was a non-standard stencil set in that context
 previously, it is gone.
 
 So maybe \pop (complemented by \push) is indeed a better name than
 \undo.

 But `push' means `to put something on the stack'.  Having

   \omit Accidental

 however, does exactly the opposite, this is, it *removes* something

Uh no, it doesn't.  It pushed a ##f property to the stack of
Accidental.stencil.

 (well, it pushes the `omit' property, so to say, but this can become
 very irritating if it gets more complicated).  For this particular
 reason I prefer \undo for the example you've given above.

 I get the feeling that we have to completely reconsider how \set,
 \revert, and friends are named and used.  Your clean-ups and
 reorganization of the syntax reveal more and more inconsistencies, and
 my head starts aching if I think of \once, \undo, and so on.

Well, at least the \grob/\on/\tweakGrob things are tabled again.
Changing \override Accidental color = #red to
\override Accidental.color = #red and related changes make _those_
abominations redundant.

 Maybe it makes sense to map the corresponding Scheme functions anew to
 `simpler' lilypond commands which do less but in a more consistent
 manner.

\once \push \pop \tweak \single _are_ rather minimal and do a single job
each.  \once changes overriding music into a push/pop pair, \push into
push sequences, \pop into pop sequences, \tweak directly manipulates a
grob, \single converts overriding music into a \tweak.

The rest is tabled after discussion.  \omit can be either tweak or
override, depending on its last argument, same with \hide, same with
\footnote.  Just because this is a long discussion covering a lot of
ground (and throwing stuff out again) does not mean that the _results_
are bad.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Phil Holmes
- Original Message - 
From: David Kastrup d...@gnu.org

To: Trevor Daniels t.dani...@treda.co.uk
Cc: lilypond-devel@gnu.org
Sent: Saturday, October 13, 2012 11:25 AM
Subject: Re: Naming _another_ lacking puzzle piece



Trevor Daniels t.dani...@treda.co.uk writes:


David Kastrup wrote Saturday, October 13, 2012 1:01 AM


In ly/music-functions-init.ly I see code like the following:

crossStaff =
#(define-music-function (parser location notes) (ly:music?)
 (_i Create cross-staff stems)
 #{
 \override Stem #'cross-staff = #cross-staff-connect
 \override Flag #'style = #'no-flag
 $notes
 \revert Stem #'cross-staff
 \revert Flag #'style
#})

There is a problem with that: in terms of stack operations, \override
and \revert are not opposing pairs: \override is pop+push (so that
multiple overrides in a row don't accrue cruft), \revert is pop.  So the
net effect of this sequence is pop, while it should be neutral.


What would be the effect of this?  The implication is that something
goes wrong, but bugs in this area have never been reported, AFAIK.

I understand stacks, pop and push, but I'm clearly missing something
here.  Perhaps it's due to my unfamiliarity with the structure of the
stack(s).


Each context has its own stack, so popping too much only makes a
difference if the stack actually was non-empty to start with.

Check out

\new Staff \with { autoBeaming = ##f }
{ \override Flag #'style = #'mensural c8 c \crossStaff c c c c c c }

After the crossStaff, the flag style has reverted to normal again rather
than mensural.

--
David Kastrup



Surely this points to the pop operation in \override as being at fault?  If 
\override was simply push, rather than pop-push then the code above would 
seem to work as intended.


The further implication of \override being pop-push would seem to be that if 
you do something like (pseudo code):


{\override Flag style = mensural c8 c c c \override Flag color = red c c c 
c}


Then you'd revert the mensural style when you change the color?  That would 
be wholly unexpected to me.


--
Phil Holmes 



___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Phil Holmes m...@philholmes.net writes:

 Surely this points to the pop operation in \override as being at
 fault?  If \override was simply push, rather than pop-push then the
 code above would seem to work as intended.

Sure.  The idea presumably was not to have stack buildup from things
like

\voiceOne c c \voiceTwo d d \voiceThree c c

 The further implication of \override being pop-push would seem to be
 that if you do something like (pseudo code):

 {\override Flag style = mensural c8 c c c \override Flag color = red c
 c c c}

 Then you'd revert the mensural style when you change the color?  That
 would be wholly unexpected to me.

No, each property has its own stack.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Context.Grob considered as symbol list

2012-10-13 Thread Reinhold Kainhofer

On 2012-10-13 07:30, Keith OHara wrote:

Can anyone reading here (other than David who implemented it) give an
example where he has used the grob-augmented \tweak syntax ?


I had to use it to change the parentheses of \parenthesize, e.g. to use 
square brackets or to use only a left or right parenthesis (to indicate 
longer parenthesized parts, like multiple staccatos).


See:
http://lists.gnu.org/archive/html/lilypond-user/2012-09/msg00707.html

Cheers,
Reinhold


--
--
Reinhold Kainhofer, reinh...@kainhofer.com, http://www.kainhofer.com
 * Financial  Actuarial Math., Vienna Univ. of Technology, Austria
 * http://www.fam.tuwien.ac.at/, DVR: 0005886
 * Edition Kainhofer, Music Publisher, http://www.edition-kainhofer.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
David Kastrup d...@gnu.org writes:

 Phil Holmes m...@philholmes.net writes:

 Surely this points to the pop operation in \override as being at
 fault?  If \override was simply push, rather than pop-push then the
 code above would seem to work as intended.

 Sure.  The idea presumably was not to have stack buildup from things
 like

 \voiceOne c c \voiceTwo d d \voiceThree c c

It would appear that this behavior was implemented in lily/parser.yy with

commit 39dd20959c8b3a143cfe41138a5c62749da54079
Author: Han-Wen Nienhuys han...@xs4all.nl
Date:   Mon Oct 17 00:04:45 2005 +

* input/regression/override-nest.ly: new file.

* python/convertrules.py (FatalConversionError.subber): conversion
rule for #'callbacks

* input/regression/override-nest.ly: new function.

* lily/parser.yy (music_property_def): allow \override #'a #'b =
#c too.

* lily/context-property.cc (lookup_nested_property): new function.
(evict_from_alist): new function.
(general_pushpop_property): new function.
(execute_general_pushpop_property): rewrite. Support nested
properties too.

There is no rationale for this change to be found in the patch, patch
description or changelog entry.  There is no rationale to be found on
the developer list close to that date.

But while searching there, finding
URL:http://lists.gnu.org/archive/html/lilypond-devel/2005-10/msg4.html
was amusing.  Some things stay the same all over.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Reinhold Kainhofer
On 2012-10-13 09:32, Werner LEMBERG wrote: Maybe \push\override ... 
but this has the disadvantage that you

 never actively see a \pop.  Hm.  Maybe we should rename \undo to
 \pop then?

 I think that we either need a consistent use if \push and \pop, or we
 should refrain using it.  Given that the Scheme functions handling the
 stack are not mapped one-to-one to user commands, as you've shown in a
 previous mail, I think we should avoid \push and \pop.

To me it is not only this inconsitency, but rather that the names 
push/pop come from programming languages and concepts.
Lately, I have seen many suggestions that would turn lilypond more into 
a programming language and away from being a description of music. Now, 
while lilypond really is a programming language, in the past we have 
tried to hide the concepts (e.g. queue theory) from the user, with more 
or less success.


David's attempts to get rid of the #' in propery names is a great step 
in this direction, but using push/pop would be a huge step in the wrong 
direction, IMO.


Cheers,
Reinhold


--
--
Reinhold Kainhofer, reinh...@kainhofer.com, http://www.kainhofer.com
 * Financial  Actuarial Math., Vienna Univ. of Technology, Austria
 * http://www.fam.tuwien.ac.at/, DVR: 0005886
 * Edition Kainhofer, Music Publisher, http://www.edition-kainhofer.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Nalesnik
On Sat, Oct 13, 2012 at 8:15 AM, David Kastrup d...@gnu.org wrote:
 David Nalesnik david.nales...@gmail.com writes:


 Buildup of unwanted data or no, it would be useful to be able to write
 something like

 \toLast Accidental #'color

 to restore the previous override

 But which is the previous override if you have several in a row?


I see your point.  I simply meant the immediately preceding override.  So:

\override Accidental color = #green
\override Accidental color = #red
\override Accidental color = #blue
[...]
\toLast Accidental color

would restore red

-David

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
David Kastrup d...@gnu.org writes:

 Reinhold Kainhofer reinh...@fam.tuwien.ac.at writes:

 On 2012-10-13 09:32, Werner LEMBERG wrote: Maybe \push\override
 ... but this has the disadvantage that you
 never actively see a \pop.  Hm.  Maybe we should rename \undo to
 \pop then?

 I think that we either need a consistent use if \push and \pop, or we
 should refrain using it.  Given that the Scheme functions handling the
 stack are not mapped one-to-one to user commands, as you've shown in a
 previous mail, I think we should avoid \push and \pop.

 To me it is not only this inconsitency, but rather that the names
 push/pop come from programming languages and concepts.

 Uh, that is because they are a plastic visualization here?

 Lately, I have seen many suggestions that would turn lilypond more
 into a programming language and away from being a description of
 music.

 Reality check: LilyPond already _has_ stacks for properties.  Nobody
 forces you to use any of the new commands if you don't care for stuff
 working in a better organized manner than flat variables would give
 you.

One can call \push and \pop instead \temporary and \undo, but who are
you going to do a favor with that?

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
David Nalesnik david.nales...@gmail.com writes:

 On Sat, Oct 13, 2012 at 8:15 AM, David Kastrup d...@gnu.org wrote:
 David Nalesnik david.nales...@gmail.com writes:


 Buildup of unwanted data or no, it would be useful to be able to write
 something like

 \toLast Accidental #'color

 to restore the previous override

 But which is the previous override if you have several in a row?


 I see your point.  I simply meant the immediately preceding override.  So:

 \override Accidental color = #green
 \override Accidental color = #red
 \override Accidental color = #blue
 [...]
 \toLast Accidental color

 would restore red

\override Accidental color = #green
\override Accidental color = #red
\push\override Accidental color = #blue
[...]
\revert Accidental color

or, if you prefer
\override Accidental color = #green
\override Accidental color = #red
\temporary\override Accidental color = #blue
[...]
\revert Accidental color

\revert will go back to the value before the last \temporary/push
override.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
David Nalesnik david.nales...@gmail.com writes:

 On Sat, Oct 13, 2012 at 8:29 AM, David Kastrup d...@gnu.org wrote:

 [...]

 \override Accidental color = #green
 \override Accidental color = #red
 \push\override Accidental color = #blue
 [...]
 \revert Accidental color

 or, if you prefer
 \override Accidental color = #green
 \override Accidental color = #red
 \temporary\override Accidental color = #blue
 [...]
 \revert Accidental color

 \revert will go back to the value before the last \temporary/push
 override.


 OK, I see,

 I'm definitely a fan of \temporary here.

Well, if it makes people happier, we'll use \temporary/\undo instead of
\push/\pop.  Since one can pair \temporary not just with \undo but also
with plain \revert, it might look less unbalanced.  It is more typing,
though.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread Janek Warchoł
On Sat, Oct 13, 2012 at 3:50 AM, David Kastrup d...@gnu.org wrote:
 Funny that you mention that.  I was talking about the situation
 with my oldest friend (now a professional programmer for the past
 11 years).  He couldn't believe that I was spending so much energy
 arguing with people who argued against project requirements on the
 basis of the current implementation.

 There is a fine line between arguing on the basis of the current
 implementation, or arguing on the basis of the current _design_.
 Replacing arbitrary choices by other arbitrary choices is not progress.

I think that Graham raised a very important subject here: it's
important that we (developers as a whole) not only know what is being
changed in Lily, but also *why* it's changing in this way and not
another.
In this case, my understanding is that David was arguing against some
recent proposals because they would make it hard or impossible to
achieve corehence of design.  Unfortunately, from what i see Graham
understood that David is arguing on the base of implementation (i.e.
no, because we already wrote it the other way).  This seems to me to
be a serious misunderstanding.
Unfortunately, David seems to be the only active developer that
understands some parser subtleties - in other words, only he fully
knows the whys.  Explaining these whys to other devs again and again
obviously can be frustrating for David, but as i wrote in another
thread (http://lists.gnu.org/archive/html/lilypond-devel/2012-10/msg00413.html)
i don't see any better way :(

best,
Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread David Kastrup
Janek Warchoł janek.lilyp...@gmail.com writes:

 On Sat, Oct 13, 2012 at 3:50 AM, David Kastrup d...@gnu.org wrote:
 Funny that you mention that.  I was talking about the situation
 with my oldest friend (now a professional programmer for the past
 11 years).  He couldn't believe that I was spending so much energy
 arguing with people who argued against project requirements on the
 basis of the current implementation.

 There is a fine line between arguing on the basis of the current
 implementation, or arguing on the basis of the current _design_.
 Replacing arbitrary choices by other arbitrary choices is not progress.

 I think that Graham raised a very important subject here: it's
 important that we (developers as a whole) not only know what is being
 changed in Lily, but also *why* it's changing in this way and not
 another.

That's supposedly what we are having discussions about and using the
tracker for.

 In this case, my understanding is that David was arguing against some
 recent proposals because they would make it hard or impossible to
 achieve corehence of design.  Unfortunately, from what i see Graham
 understood that David is arguing on the base of implementation (i.e.
 no, because we already wrote it the other way).  This seems to me to
 be a serious misunderstanding.

Well, those discussions are usually going along the lines let's replace
x with y and/or do x in this manner -- that would not be how we do it
elsewhere, how is that supposed to fit with everything else? -- I was
not talking about everything else.  You are changing the subject.

It is not like it is _forbidden_ to think about changing everything else
(I am doing some of that stuff right now with the symbolism patch), but
there is nothing gained by _ignoring_ the problem.

Now naturally I am not all too much interested in designing detailed
approached for working around the shortcomings of proposals I consider
going in the wrong direction in the first place.  But since nobody else
does it either, I am a single point of failure.

 Unfortunately, David seems to be the only active developer that
 understands some parser subtleties - in other words, only he fully
 knows the whys.

Well, there is nothing magic about that as nobody else ever looks at the
parser.  It is like saying that somebody is the sole musician
understanding the subtleties of playing a flute, simply because he is
the only one who has ever bothered touching one.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Janek Warchoł janek.lilyp...@gmail.com writes:

 On Sat, Oct 13, 2012 at 2:01 AM, David Kastrup d...@gnu.org wrote:
 There is a problem with that: in terms of stack operations, \override
 and \revert are not opposing pairs: \override is pop+push (so that
 multiple overrides in a row don't accrue cruft), \revert is pop.  So the
 net effect of this sequence is pop, while it should be neutral.

 This looks strange indeed.
 I've skimmed this thread, but haven't found an answer to this
 question: would it hurt us really much to have multiple overrides
 accumulate cruft?  I suppose that in real-life situation there won't
 be that much cruft accumulated - but i might be completely wrong.

\voiceTwo \voiceOne \oneVoice

Would you expect that after this sequence, the state is like just after
\voiceTwo?

 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting confusing, at least for
 me.  I'd prefer to decrease the number of such functions, not increase
 them (without deleting functionality, of course).

You can't call functionality without an interface.  A prefix like
\temporary is better than a full new interface.

It's really totally unrewarding to do this kind of work.  Instead of
Great, finally we get a tool for doing x in a straightforward way,
everybody is always hollering oh no, not another tool.  Can't we just
live with the deficient state?

Have you ever tried working with a combined hammer, tongs, screwdriver,
drill multi-tool?  If you have, you'd value a clean, sorted toolbox with
simple and separate tools that all do just one job, and do it well.

Again: if you don't _care_ about breaking things, then _don't_ learn how
to avoid it, and you will be just fine.

Me, I am annoyed at broken things.  So I want to have the tools
available that help me deal with that.  But people are free to ignore
that offer.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Trevor Daniels

Janek Warchoł wrote Saturday, October 13, 2012 3:46 PM

 As for command names, i'd prefer not to name them \pop and \push as
 this doesn't say anything to non-programmers.  To put it differently:
 i'd prefer to solve this problem in a way that doesn't require
 *creating new push and pop commands*.  But i have no idea if this is
 possible.
 
 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting confusing, at least for
 me.  I'd prefer to decrease the number of such functions, not increase
 them (without deleting functionality, of course).

Plus \once and now \temporary.  I agree this menagerie is going to be 
far more confusing to users than the occasional unexpected result after 
calling \crossStaff or \harmonicByFret - which no one has ever noticed. 
Users get quite confused enough with just \override, \revert, \set, \unset
and \tweak.

We're going too far in this direction now.

Trevor
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Trevor Daniels t.dani...@treda.co.uk writes:

 Janek Warchoł wrote Saturday, October 13, 2012 3:46 PM

 As for command names, i'd prefer not to name them \pop and \push as
 this doesn't say anything to non-programmers.  To put it differently:
 i'd prefer to solve this problem in a way that doesn't require
 *creating new push and pop commands*.  But i have no idea if this is
 possible.
 
 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting confusing, at least for
 me.  I'd prefer to decrease the number of such functions, not increase
 them (without deleting functionality, of course).

 Plus \once and now \temporary.  I agree this menagerie is going to be 
 far more confusing to users than the occasional unexpected result after 
 calling \crossStaff or \harmonicByFret - which no one has ever
 noticed. 

No user is required to read the source to \crossStaff or
\harmonicByFret.  That feat is entirely voluntary, and there is no
guarantee that doing so is safe from damaging mind and body.

 Users get quite confused enough with just \override, \revert, \set, \unset
 and \tweak.

 We're going too far in this direction now.

We are going _nowhere_.  We already are _there_.  If people say they
don't want to switch on the light, I am fine with that.  It saves me
work to ignore problems and tools in user documentation.  But it does
not make sense to keep the tools away from people working on LilyPond
itself and say please don't provide simple, easy to use tools for
fixing bugs which no one has ever noticed.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
David Kastrup d...@gnu.org writes:

 It would appear that this behavior was implemented in lily/parser.yy with

 commit 39dd20959c8b3a143cfe41138a5c62749da54079
 Author: Han-Wen Nienhuys han...@xs4all.nl
 Date:   Mon Oct 17 00:04:45 2005 +

 * input/regression/override-nest.ly: new file.
 
 * python/convertrules.py (FatalConversionError.subber): conversion
 rule for #'callbacks
 
 * input/regression/override-nest.ly: new function.
 
 * lily/parser.yy (music_property_def): allow \override #'a #'b =
 #c too.
 
 * lily/context-property.cc (lookup_nested_property): new function.
 (evict_from_alist): new function.
 (general_pushpop_property): new function.
 (execute_general_pushpop_property): rewrite. Support nested
 properties too.

 There is no rationale for this change to be found in the patch, patch
 description or changelog entry.  There is no rationale to be found on
 the developer list close to that date.

And I am learning the hard way why doing things in that stealthy manner
is the smart way.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Trevor Daniels

David, you wrote Saturday, October 13, 2012 4:26 PM


 Trevor Daniels t.dani...@treda.co.uk writes:
 
 Janek Warchoł wrote Saturday, October 13, 2012 3:46 PM

 As for command names, i'd prefer not to name them \pop and \push as
 this doesn't say anything to non-programmers.  To put it differently:
 i'd prefer to solve this problem in a way that doesn't require
 *creating new push and pop commands*.  But i have no idea if this is
 possible.
 
 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting confusing, at least for
 me.  I'd prefer to decrease the number of such functions, not increase
 them (without deleting functionality, of course).

 Plus \once and now \temporary.  I agree this menagerie is going to be 
 far more confusing to users than the occasional unexpected result after 
 calling \crossStaff or \harmonicByFret - which no one has ever
 noticed. 
 
 No user is required to read the source to \crossStaff or
 \harmonicByFret.  That feat is entirely voluntary, and there is no
 guarantee that doing so is safe from damaging mind and body.

I don't understand.  Are you suggesting we should not document
these new functions?  If so, what is the set of commands which
should be documented?

Trevor
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Trevor Daniels t.dani...@treda.co.uk writes:

 David, you wrote Saturday, October 13, 2012 4:26 PM


 Trevor Daniels t.dani...@treda.co.uk writes:
 
 Janek Warchoł wrote Saturday, October 13, 2012 3:46 PM

 As for command names, i'd prefer not to name them \pop and \push as
 this doesn't say anything to non-programmers.  To put it differently:
 i'd prefer to solve this problem in a way that doesn't require
 *creating new push and pop commands*.  But i have no idea if this is
 possible.
 
 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting confusing, at least for
 me.  I'd prefer to decrease the number of such functions, not increase
 them (without deleting functionality, of course).

 Plus \once and now \temporary.  I agree this menagerie is going to be 
 far more confusing to users than the occasional unexpected result after 
 calling \crossStaff or \harmonicByFret - which no one has ever
 noticed. 
 
 No user is required to read the source to \crossStaff or
 \harmonicByFret.  That feat is entirely voluntary, and there is no
 guarantee that doing so is safe from damaging mind and body.

 I don't understand.  Are you suggesting we should not document
 these new functions?  If so, what is the set of commands which
 should be documented?

I am not suggesting that.  But there is public consent that documenting
them would be harmful to our users.  I recommend you do a poll to find
out which commands the users should be spared from knowing about.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Colin Campbell

On 12-10-13 10:23 AM, David Kastrup wrote:

Trevor Daniels t.dani...@treda.co.uk writes:


David, you wrote Saturday, October 13, 2012 4:26 PM



Trevor Daniels t.dani...@treda.co.uk writes:


Plus \once and now \temporary.  I agree this menagerie is going to be
far more confusing to users than the occasional unexpected result after
calling \crossStaff or \harmonicByFret - which no one has ever
noticed.

No user is required to read the source to \crossStaff or
\harmonicByFret.  That feat is entirely voluntary, and there is no
guarantee that doing so is safe from damaging mind and body.

I don't understand.  Are you suggesting we should not document
these new functions?  If so, what is the set of commands which
should be documented?

I am not suggesting that.  But there is public consent that documenting
them would be harmful to our users.  I recommend you do a poll to find
out which commands the users should be spared from knowing about.




I wonder if David and Trevor are talking about the same commands here: 
David brought up the example of reading the source of \crossStaff while 
Trevor seems to be referring to \override, \tweak et al.  FWIW, an 
uneducated bystander such as I agrees with David’s (implied) position: 
\crossStaff is a black box, and I only need to know what to put in for 
an expected output.  Trevor raises (or at least, seems to me that he 
does) the diligent and wise caution that this whole set of paired 
functions will best be served by some well-organised carpentry in NR at 
least and probably at least passing mention in LM.


Cheers,
Colin

--
I've learned that you shouldn't go through life with a catcher's mitt on both 
hands.
You need to be able to throw something back.
-Maya Angelou, poet (1928- )


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Keith OHara
David Kastrup dak at gnu.org writes:
 
 Trevor Daniels t.daniels at treda.co.uk writes:
 
  I don't understand.  Are you suggesting we should not document
  these new functions?  If so, what is the set of commands which
  should be documented?
 
 I am not suggesting that.  But there is public consent that documenting
 them would be harmful to our users.  

So we should
Track the bug in \crossStaff and \harmonicByFret
Repair these 2 music functions by using the correct push/pop Scheme functions
Improve the naming of the make-grob-property-*

In general, make more of the Scheme layer documented and accessible 
*after* seeing a cases where it is useful.

I looked for a case in my scores where I wanted a stack, where I wanted to
temporarily override something that I had already overridden, and then put
back my first override.  I did not find any.


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Keith OHara k-ohara5...@oco.net writes:

 David Kastrup dak at gnu.org writes:
 
 Trevor Daniels t.daniels at treda.co.uk writes:
 
  I don't understand.  Are you suggesting we should not document
  these new functions?  If so, what is the set of commands which
  should be documented?
 
 I am not suggesting that.  But there is public consent that documenting
 them would be harmful to our users.  

 So we should
 Track the bug in \crossStaff and \harmonicByFret
 Repair these 2 music functions by using the correct push/pop Scheme functions
 Improve the naming of the make-grob-property-*

 In general, make more of the Scheme layer documented and accessible 
 *after* seeing a cases where it is useful.

 I looked for a case in my scores where I wanted a stack, where I wanted to
 temporarily override something that I had already overridden, and then put
 back my first override.  I did not find any.

It's basically the same use case as \once\override except that the
temporary change lasts for more than a single timestep.

You can always re-override to the preexisting value _iff_ you know it.
For input intended to be reused, knowing it is not always possible.

-- 
David Kastrup


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


RE: Naming _another_ lacking puzzle piece

2012-10-13 Thread Carl Sorensen
Keith OHara k-ohara5...@oco.net writes:



 I looked for a case in my scores where I wanted a stack, where I wanted to
 temporarily override something that I had already overridden, and then put
 back my first override.  I did not find any.

I love having the ability to write a music function that will set desired 
properties,
and then put them back to their original state.

For example, suppose I want to write a function that emphasizes the notes in 
the music argument by making all the noteheads red.  But it should only apply 
to the music argument.  Then, I want to set things back to what they were when 
the function exits.  If I use revert, it will set the note heads back to black. 
 But if I call the function from a voice that has green note heads, it won't 
set them back to green; it will always set them back to black.

For a couple of years, I've wanted to have the ability to easily do a push/pop 
pair for use in writing music functions.

I'm excited about this option, and fully support it.

Thanks, David!

Carl

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread Joe Neeman
On Sat, Oct 13, 2012 at 1:22 AM, Han-Wen Nienhuys hanw...@gmail.com wrote:

 Hello Graham,

 Many thanks for the amazing amount of energy and work you've put in
 over the years.  You certainly brought a very new style of leadership
 to the project after I have left. I hope we can count on you to stick
 around to give comments in the role of experienced emeritus.


+1

Cheers,
Joe
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread Janek Warchoł
On Sat, Oct 13, 2012 at 4:43 PM, David Kastrup d...@gnu.org wrote:
Janek wrote:
 In this case, my understanding is that David was arguing against some
 recent proposals because they would make it hard or impossible to
 achieve corehence of design.  Unfortunately, from what i see Graham
 understood that David is arguing on the base of implementation (i.e.
 no, because we already wrote it the other way).  This seems to me to
 be a serious misunderstanding.

 Well, those discussions are usually going along the lines let's replace
 x with y and/or do x in this manner -- that would not be how we do it
 elsewhere, how is that supposed to fit with everything else? -- I was
 not talking about everything else.  You are changing the subject.

Hmm.  I don't have such an impression, so we have a problem.
Can we chat tomorrow?  I can be online any time between 9 and 22 (your time).

 Now naturally I am not all too much interested in designing detailed
 approached for working around the shortcomings of proposals I consider
 going in the wrong direction in the first place.  But since nobody else
 does it either, I am a single point of failure.

Well, we need to find a solution to this problem.

 Unfortunately, David seems to be the only active developer that
 understands some parser subtleties - in other words, only he fully
 knows the whys.

 Well, there is nothing magic about that as nobody else ever looks at the
 parser.

I understand that you're frustrated, but please note that i'm trying
to read and review your syntax patches.  Unfortunately i don't have
time to study them until i understand how they work - I wish i could,
but i don't have enough time now.  I'm asking questions and i had
learned some things about parser already.

best,
Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Janek Warchoł
On Sat, Oct 13, 2012 at 5:07 PM, David Kastrup d...@gnu.org wrote:
 Janek Warchoł janek.lilyp...@gmail.com writes:
 would it hurt us really much to have multiple overrides
 accumulate cruft?  I suppose that in real-life situation there won't
 be that much cruft accumulated - but i might be completely wrong.

 \voiceTwo \voiceOne \oneVoice

 Would you expect that after this sequence, the state is like just after
 \voiceTwo?

Good point.

 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting confusing, at least for
 me.  I'd prefer to decrease the number of such functions, not increase
 them (without deleting functionality, of course).

 You can't call functionality without an interface.  A prefix like
 \temporary is better than a full new interface.

 It's really totally unrewarding to do this kind of work.  Instead of
 Great, finally we get a tool for doing x in a straightforward way,
 everybody is always hollering oh no, not another tool.  Can't we just
 live with the deficient state?

 Have you ever tried working with a combined hammer, tongs, screwdriver,
 drill multi-tool?  If you have, you'd value a clean, sorted toolbox with
 simple and separate tools that all do just one job, and do it well.

 Again: if you don't _care_ about breaking things, then _don't_ learn how
 to avoid it, and you will be just fine.

 Me, I am annoyed at broken things.  So I want to have the tools
 available that help me deal with that.  But people are free to ignore
 that offer.

David, from your reaction i deduce that you felt attacked by me.  I'm
sorry as this wasn't my intent.
I want to have this situation explained as soon as possible.  Please,
choose any voip software you like (i understand that you don't want a
gmail account nor skype account because of their privacy policy) which
can run on Ubuntu, and let's have a voice chat, ok?  I can be online
tomorrow 9-22 your time.

worried Janek

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread David Kastrup
Janek Warchoł janek.lilyp...@gmail.com writes:

 On Sat, Oct 13, 2012 at 4:43 PM, David Kastrup d...@gnu.org wrote:
Janek wrote:

 Unfortunately, David seems to be the only active developer that
 understands some parser subtleties - in other words, only he fully
 knows the whys.

 Well, there is nothing magic about that as nobody else ever looks at the
 parser.

 I understand that you're frustrated, but please note that i'm trying
 to read and review your syntax patches.

I am not frustrated.  I am just a central collection point for
everybody's frustration, and blaming me for everything that is hard is
just silly.

Take a look at the recent proposal of \temporary.  This basically goes
like Here is a solution for a problem I encounter sometimes and that is
also a problem in our codebase -- Oh no, not another solution.  How
are we supposed to keep track?  Let's keep the problem instead.  Nobody
else noticed it so far anyhow, let's just ignore your demonstration of
it.

Now of course, this is how professional programmers would work.  And to
boot, if their company is large enough, they have a support department
with people skilled and trained to be the punching ball taking on
general customer frustration and passing the few bits of actually useful
feedback on, assuming they even recognize it.  When in doubt, they block
both information and frustration and are still worth their pay in the
combination of customer satisfaction and developer job satisfaction.

 Unfortunately i don't have time to study them until i understand how
 they work - I wish i could, but i don't have enough time now.

There is not much point without at least reading the Bison manual
regarding actual parser work.

But usually I describe at least the consequences.  That's not enough for
a useful review, but it may be enough for how hard would it be to do
xxx instead? questions.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Janek Warchoł janek.lilyp...@gmail.com writes:

 On Sat, Oct 13, 2012 at 5:07 PM, David Kastrup d...@gnu.org wrote:
 Janek Warchoł janek.lilyp...@gmail.com writes:
 would it hurt us really much to have multiple overrides
 accumulate cruft?  I suppose that in real-life situation there won't
 be that much cruft accumulated - but i might be completely wrong.

 \voiceTwo \voiceOne \oneVoice

 Would you expect that after this sequence, the state is like just after
 \voiceTwo?

 Good point.

 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting confusing, at least for
 me.  I'd prefer to decrease the number of such functions, not increase
 them (without deleting functionality, of course).

 You can't call functionality without an interface.  A prefix like
 \temporary is better than a full new interface.

 It's really totally unrewarding to do this kind of work.  Instead of
 Great, finally we get a tool for doing x in a straightforward way,
 everybody is always hollering oh no, not another tool.  Can't we just
 live with the deficient state?

 Have you ever tried working with a combined hammer, tongs, screwdriver,
 drill multi-tool?  If you have, you'd value a clean, sorted toolbox with
 simple and separate tools that all do just one job, and do it well.

 Again: if you don't _care_ about breaking things, then _don't_ learn how
 to avoid it, and you will be just fine.

 Me, I am annoyed at broken things.  So I want to have the tools
 available that help me deal with that.  But people are free to ignore
 that offer.

 David, from your reaction i deduce that you felt attacked by me.

No.  I am just pissed at the people clamoring for more ignorance, more
bugs, and less control.  Nobody keeps them from staying ignorant and not
taking control.  It is their own business, and they are welcome to it,
it remains a perfectly available and feasible option, but that does not
mean that everybody else needs to be forced to do the same, and it is
not like they suffer immensely when the tools they don't want to hear
about get used to remove bugs they don't want to be bothered with.

People have all the right to their personal choices, but that does not
mean that each choice of them makes me equally enthusiastic.

 I'm sorry as this wasn't my intent.  I want to have this situation
 explained as soon as possible.

Janek, with all due respect: I just don't have the time and energy to
talk two hours on the phone whenever something happens to annoy me.  I
get little enough done as it is, and being kept away from actually
useful work by repeating what I already wrote makes things more rather
than less frustrating.

-- 
David Kastrup

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread Marc Hohl

Am 13.10.2012 21:48, schrieb David Kastrup:

Janek Warchoł janek.lilyp...@gmail.com writes:


On Sat, Oct 13, 2012 at 4:43 PM, David Kastrup d...@gnu.org wrote:

Janek wrote:

Unfortunately, David seems to be the only active developer that
understands some parser subtleties - in other words, only he fully
knows the whys.

Well, there is nothing magic about that as nobody else ever looks at the
parser.

I understand that you're frustrated, but please note that i'm trying
to read and review your syntax patches.

I am not frustrated.  I am just a central collection point for
everybody's frustration, and blaming me for everything that is hard is
just silly.

Take a look at the recent proposal of \temporary.  This basically goes
like Here is a solution for a problem I encounter sometimes and that is
also a problem in our codebase -- Oh no, not another solution.  How
are we supposed to keep track?  Let's keep the problem instead.  Nobody
else noticed it so far anyhow, let's just ignore your demonstration of
it.
I think it is not meant as Oh no, not another solution – the problem I 
see here

is that your work reveals the mess about lilypond's internal structures:
the inconsistency about using the stack, the old context properties vs. 
grob properties,

the \set/\override stuff (sorry for simplifying, you get the point).

Combine that with a deep desire for something like

change whatever property to value x
change whatever property to value x for once
revert whatever property to its predefined state
revert whatever property to the value befor the latest change

– I think that's how the Oh no ... message is meant.

In either case, I think it is not meant as an accusation to your work.

Let me try to formulate it another way:
something like \push and \pop look like an ideal solution to write
own lilypond functions that leave no trace after they finished their work
(yet another simplification) so great! Let's have them!

On the other side, a newbie on lilypond which just wants to color some
note heads may be confused with the pop/push concept as he or she
has never used a programming language – in this case, \temporary
sounds a lot more friendly and familiar.

So this should be considered – we don't want to scare users away, but
provide a powerful tool for intermediate and advanced users (and, of course,
proper redefinitions for already available functions like \crossStaff and
the likes).

Conclusion: I appreciate your latest work – it is just that I am not
used to use \omit, \single, \undo and therefore bringing \temporary
into line with the (yet unfamiliar) rest of the new stuff takes just some
time. Perhaps I am not the only one who has these problems.

Regards,

Marc


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Joe Neeman
On Sat, Oct 13, 2012 at 1:06 PM, David Kastrup d...@gnu.org wrote:


 No.  I am just pissed at the people clamoring for more ignorance, more

bugs, and less control.


If you are referring to Werner's and Reinhold's comments, I think you may
not be reading them as the authors intended. In particular, I believe that
Reinhold was merely objecting to the names push and pop as being opaque
to non-programmers, while Werner was complaining that the plethora of new
context-manipulation functions have become confusing. I interpret his
comments as a request for orthogonalization rather than a complaint about
the options that the new commands introduce. Now, it's true that the
comments may not have been entirely constructive as they didn't propose
alternatives, but I also don't think anyone claimed that your proposal is
worse than the status quo.

For what it's worth, I think push, pop and clear (perhaps with more
intuitive-to-non-programmer names) makes a nicer stack interface than push,
pop-push and pop. I also think that undo should be rethought in light of
this recent discussion. In particular, this discussion has made me realize
that undo doesn't just reverse the effect of an override, since after
\override Something #'color = #green
\override Something #'color = #red
\undo\override Something #'color = #red,
then the color is not back to green as one might think.

What if we gave the users a push, pop and clear interface and we made
overrides use push and \oneVoice use clear? This solves the
\voiceOne\voiceTwo\oneVoice
problem and it lets \temporary be a shortcut for \override ... \undo
\override. Since override is non-destructive, we could even get fancy and
let
\override Something #'color = #green
\override Something #'color = #red
\undo\override Something #'color = #green
go back to the pre-green color.

Cheers,
Joe
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread David Kastrup
Joe Neeman joenee...@gmail.com writes:

 On Sat, Oct 13, 2012 at 1:06 PM, David Kastrup d...@gnu.org wrote:

 
 
 
 No. I am just pissed at the people clamoring for more ignorance,
 more 

 bugs, and less control.

 If you are referring to Werner's and Reinhold's comments, I think you
 may not be reading them as the authors intended. In particular, I
 believe that Reinhold was merely objecting to the names push and
 pop as being opaque to non-programmers,

To me it is not only this inconsitency, but rather that the names
push/pop come from programming languages and concepts.
Lately, I have seen many suggestions that would turn lilypond more
 ^
into a programming language and away from being a description of
^^^
music. Now, while lilypond really is a programming language, in the
past we have tried to hide the concepts (e.g. queue theory) from the
user, with more or less success.

David's attempts to get rid of the #' in propery names is a great step
in this direction, but using push/pop would be a huge step in the
wrong direction, IMO.

 while Werner was complaining that the plethora of new
 context-manipulation functions have become confusing.

That makes it sound like it would be a chaotic bunch.  And what do we
have?

\override  overwrites the last definition
\revert  throws it away/reestablishes the previous if not overwritten.

Then we have modifiers for possibly multiple combined overrides, as
those are for example available in large numbers in property-init.ly and
we want to be able to use them for as many things as possible without
having to retype them with modifications.

\once \override   non-destructively masks the definition for one
  time step, then restores
\temporary \override  non-destructively masks the last definition
\undo \override   drops like corresponding \reverts would

A \tweak goes through a music object rather than through context
properties, so we get

\single \override  (again an \override prefix) converts into one or more
   tweaks

All those are separate tools, apply in the same manner to one or
multiple overrides, to get a clear effect derived from the original
\override-based command, and complementing each other in functionality.
People shout I want fewer, but they are a set.  It's like saying you
want a smaller set of spanners, so you leave out every second one.  But
that means that you won't be able to do a random subset of required
tasks because the spanners are a full set.  You can't just randomly
leave out some and expect to be able to still do every job.

 I interpret his comments as a request for orthogonalization rather
 than a complaint about the options that the new commands
 introduce.

What's not orthogonal here?  _Every_ modifier works on \overrides
(granted, \undo will also work on \set but just because it does not make
sense not to include this as well).  \once allows a one-step temporary
replacement, \temporary and \undo allow the start and stop of a
temporary replacement to be separately specified.

\single converts into a different grob modifier mechanism.

No, the complaint was clear, from several parties:

I get the feeling that we have to completely reconsider how \set,
\revert, and friends are named and used.  Your clean-ups and
reorganization of the syntax reveal more and more inconsistencies,
and my head starts aching if I think of \once, \undo, and so on.

[...]

In other words, we have \override, \tweak, \set, \revert, \unset,
\undo, \single (and maybe more).  It's getting confusing, at least
for me.  I'd prefer to decrease the number of such functions, not
increase them (without deleting functionality, of course).

[...]

Plus \once and now \temporary.  I agree this menagerie is going to
be far more confusing to users than the occasional unexpected result
after calling \crossStaff or \harmonicByFret - which no one has ever
noticed.  Users get quite confused enough with just \override,
\revert, \set, \unset and \tweak.

We're going too far in this direction now.

 Now, it's true that the comments may not have been entirely
 constructive as they didn't propose alternatives, but I also don't
 think anyone claimed that your proposal is worse than the status quo.

The last comment above states we're going too far in this direction
now, calls the commands a confusing menagerie and states that nobody
noticed the kind of bugs one can fix with that anyway.  quite confused
enough clearly strongly speaks against providing any more commands,
preferring to stay with problems instead.

 For what it's worth, I think push, pop and clear (perhaps with more
 intuitive-to-non-programmer names) makes a nicer stack interface than
 push, pop-push and pop.

What is clear supposed to be?

 I also think that undo 

Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Reinhold Kainhofer

On 2012-10-13 23:29, David Kastrup wrote:

If you are referring to Werner's and Reinhold's comments, I think you
may not be reading them as the authors intended. In particular, I
believe that Reinhold was merely objecting to the names push and
pop as being opaque to non-programmers,

 To me it is not only this inconsitency, but rather that the names
 push/pop come from programming languages and concepts.
 Lately, I have seen many suggestions that would turn lilypond more
  ^
 into a programming language and away from being a description of
^^^
 music. Now, while lilypond really is a programming language, in the
 past we have tried to hide the concepts (e.g. queue theory) from the
 user, with more or less success.

 David's attempts to get rid of the #' in propery names is a great step
 in this direction, but using push/pop would be a huge step in the
 wrong direction, IMO.



Sorry, maybe I wasn't clear enough in that last sentence. It would have 
been clearer if I wrote

 ... but using the names push and pop ...

The thing about programming languages was intended to give a larger 
picture why I don't like pure programming concepts introduced to 
lilypond users, and using the names push and pop introduces stack 
concepts to the users, rather than providing a user-friendly (i.e. 
musician-friendly, not programmer-friendly) high-level API to the users.


Cheers,
Reinhold

--
--
Reinhold Kainhofer, reinh...@kainhofer.com, http://www.kainhofer.com
 * Financial  Actuarial Math., Vienna Univ. of Technology, Austria
 * http://www.fam.tuwien.ac.at/, DVR: 0005886
 * Edition Kainhofer, Music Publisher, http://www.edition-kainhofer.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Trevor Daniels

David Kastrup wrote Saturday, October 13, 2012 10:29 PM

I wrote

Plus \once and now \temporary.  I agree this menagerie is going to
be far more confusing to users than the occasional unexpected result
after calling \crossStaff or \harmonicByFret - which no one has ever
noticed.  Users get quite confused enough with just \override,
\revert, \set, \unset and \tweak.
 
We're going too far in this direction now.

 The last comment above states we're going too far in this direction
 now, calls the commands a confusing menagerie and states that nobody
 noticed the kind of bugs one can fix with that anyway.  quite confused
 enough clearly strongly speaks against providing any more commands,
 preferring to stay with problems instead.

There is no doubt that explaining these concepts to musicians with no
experience of programming will be difficult, and at the moment it seems
no one is interested in writing documentation except me.  I felt I was
being forced into having to tackle this problem when I believed (and
still believe) that most users have been and would continue to be
quite unaware of the difficulties these extra commands are designed
to solve.

As a programmer myself I fully understand what you are doing; and
I'm quite happy with that.  So I shall have to find some way of 
documenting them so that non-programming users will not find learning 
LP even more difficult than they currently do. That was the basis of
my concern.  I'll sleep on it.

Trevor
___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Werner LEMBERG

 I completely agree that we need a function that changes a property
 in a non-destructive way.

Me too, in case there was ever a doubt about this.

 If we were to completely re-design the lilypond language, I would
 suggest \override, \revert and \clear (as push, pop and clear
 stack), but they currently have a slightly different meaning.

Yes!  This is what I wanted to point out, apparently with bad wording
which made David think into the wrong direction.

 The real problems we currently have are [...]

Thanks for this!  I fully agree with all your reasoning.


Werner

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread James
Trevor

On 13 October 2012 23:56, Trevor Daniels t.dani...@treda.co.uk wrote:

 David Kastrup wrote Saturday, October 13, 2012 10:29 PM

 I wrote

Plus \once and now \temporary.  I agree this menagerie is going to
be far more confusing to users than the occasional unexpected result
after calling \crossStaff or \harmonicByFret - which no one has ever
noticed.  Users get quite confused enough with just \override,
\revert, \set, \unset and \tweak.

We're going too far in this direction now.

 The last comment above states we're going too far in this direction
 now, calls the commands a confusing menagerie and states that nobody
 noticed the kind of bugs one can fix with that anyway.  quite confused
 enough clearly strongly speaks against providing any more commands,
 preferring to stay with problems instead.

 There is no doubt that explaining these concepts to musicians with no
 experience of programming will be difficult, and at the moment it seems
 no one is interested in writing documentation except me.  I felt I was
 being forced into having to tackle this problem when I believed (and
 still believe) that most users have been and would continue to be
 quite unaware of the difficulties these extra commands are designed
 to solve.

 As a programmer myself I fully understand what you are doing; and
 I'm quite happy with that.  So I shall have to find some way of
 documenting them so that non-programming users will not find learning
 LP even more difficult than they currently do. That was the basis of
 my concern.  I'll sleep on it.

I have a patch coming that is trying to at least document \single
\hide and \omit.

i also have started to use \single to take the opportunity to better
organize NR 5.3.

I will post what I have tomorrow late afternoon - as 'needs work' as I
have explained to David, that I have a bit of a grasp on these
subtleties but am not a programmer to know how to articulate these
important functions to non-programmers.

Examples, at least _good_ examples of @lilyponds are what helps.

James

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: stepping down as project manager

2012-10-13 Thread Joseph Rushton Wakeling

On 10/13/2012 11:44 PM, David Kastrup wrote:

\once creates a one-time-step temporary change, \temporary an
unterminated temporary change which can be terminated element-wise with
\revert or, again using a converter, en bloc from the original overrides
with \undo.


Forgive me for coming into this without the background, but what's the 
difference between \temporary and the existing \override?


___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Naming _another_ lacking puzzle piece

2012-10-13 Thread Joe Neeman
On Sat, Oct 13, 2012 at 2:29 PM, David Kastrup d...@gnu.org wrote:

 Joe Neeman joenee...@gmail.com writes:

  On Sat, Oct 13, 2012 at 1:06 PM, David Kastrup d...@gnu.org wrote:
 
 
 
 
  No. I am just pissed at the people clamoring for more ignorance,
  more
 
  bugs, and less control.
 
  If you are referring to Werner's and Reinhold's comments, I think you
  may not be reading them as the authors intended. In particular, I
  believe that Reinhold was merely objecting to the names push and
  pop as being opaque to non-programmers,

 To me it is not only this inconsitency, but rather that the names
 push/pop come from programming languages and concepts.
 Lately, I have seen many suggestions that would turn lilypond more
  ^
 into a programming language and away from being a description of
 ^^^
 music. Now, while lilypond really is a programming language, in the
 past we have tried to hide the concepts (e.g. queue theory) from the
 user, with more or less success.

 David's attempts to get rid of the #' in propery names is a great step
 in this direction, but using push/pop would be a huge step in the
 wrong direction, IMO.

  while Werner was complaining that the plethora of new
  context-manipulation functions have become confusing.

 That makes it sound like it would be a chaotic bunch.  And what do we
 have?

 \override  overwrites the last definition
 \revert  throws it away/reestablishes the previous if not overwritten.


In other words, we have a pop-push and a pop. In the context of
Reinhold's email, you were suggesting (although perhaps not seriously)
adding a push. Now, I'm happy to have push and pop, but I think
pop-push is a bad interface for a stack. The reason that we have gotten
away with it for so long is because our interface ensures that the stack is
almost always empty anyway (since the only way to push is with \once, and
that always pops immediately). Once we start talking about composability,
the deficiencies of pop-push become clear.

So my proposed set of orthogonal commands would be push and pop (again,
with more intuitive names). I also suggest adding clear for convenience.
Everything else would be syntactic sugar on push and pop.

Then we have modifiers for possibly multiple combined overrides, as
 those are for example available in large numbers in property-init.ly and
 we want to be able to use them for as many things as possible without
 having to retype them with modifications.

 \once \override   non-destructively masks the definition for one
   time step, then restores
 \temporary \override  non-destructively masks the last definition
 \undo \override   drops like corresponding \reverts would

 A \tweak goes through a music object rather than through context
 properties, so we get

 \single \override  (again an \override prefix) converts into one or more
tweaks

 All those are separate tools, apply in the same manner to one or
 multiple overrides, to get a clear effect derived from the original
 \override-based command, and complementing each other in functionality.
 People shout I want fewer, but they are a set.  It's like saying you
 want a smaller set of spanners, so you leave out every second one.  But
 that means that you won't be able to do a random subset of required
 tasks because the spanners are a full set.  You can't just randomly
 leave out some and expect to be able to still do every job.

  I interpret his comments as a request for orthogonalization rather
  than a complaint about the options that the new commands
  introduce.

 What's not orthogonal here?  _Every_ modifier works on \overrides
 (granted, \undo will also work on \set but just because it does not make
 sense not to include this as well).  \once allows a one-step temporary
 replacement, \temporary and \undo allow the start and stop of a
 temporary replacement to be separately specified.


What isn't orthogonal is that you can't express, say, \temporary in terms
of \override and \revert. If we switch to using push and pop instead of
pop-push and pop, then push and pop become the orthogonal underpinnings of
everything and \once, \temporary, and \undo become syntactic sugar. The
sugar is then easy to explain to users because it can be expressed in terms
of commands that they already know.


 \single converts into a different grob modifier mechanism.

 No, the complaint was clear, from several parties:

 I get the feeling that we have to completely reconsider how \set,
 \revert, and friends are named and used.  Your clean-ups and
 reorganization of the syntax reveal more and more inconsistencies,
 and my head starts aching if I think of \once, \undo, and so on.

 [...]

 In other words, we have \override, \tweak, \set, \revert, \unset,
 \undo, \single (and maybe more).  It's getting 

Re: stepping down as project manager

2012-10-13 Thread Reinhold Kainhofer

On 2012-10-14 01:07, Joseph Rushton Wakeling wrote:

On 10/13/2012 11:44 PM, David Kastrup wrote:

\once creates a one-time-step temporary change, \temporary an
unterminated temporary change which can be terminated element-wise with
\revert or, again using a converter, en bloc from the original overrides
with \undo.


Forgive me for coming into this without the background, but what's the
difference between \temporary and the existing \override?


\temporary\override would work the way you probably expect \override to 
work now:
It sets the grob property to a new value and keeps the old value stored 
so that after \revert the property takes the old value it had before the 
\temporary\override.


The actual problem is that \override currently CLEARS (i.e. reverts) the 
current value before setting the new one, so that the old value is not 
stored anywhere any more, and a \revert thus reverts to the default value.


As an example, let's look at the following code. What color would you 
expect the final b to have? red? (because the \revert clears the 
previous override to blue, right?)


\version 2.16.0

\relative c' {
  c4
  \override NoteHead #'color = #red
  f
  \override NoteHead #'color = #blue
  g
  \revert NoteHead #'color
  b
}

In reality, the \revert does not revert the override, but completely 
clear the value to the black default. Currently, there is no way to 
temporarily change a property and then change it back to its previous 
value (except for \once\override, which only works for one timestep).


In fact, \override and \revert are currently misnamed, they work more 
like \set and \unset.


Cheers,
Reinhold

--
--
Reinhold Kainhofer, reinh...@kainhofer.com, http://www.kainhofer.com
 * Financial  Actuarial Math., Vienna Univ. of Technology, Austria
 * http://www.fam.tuwien.ac.at/, DVR: 0005886
 * Edition Kainhofer, Music Publisher, http://www.edition-kainhofer.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: Still alive

2012-10-13 Thread Francisco Vila
2012/10/9 m...@mikesolomon.org m...@mikesolomon.org:
 Hey list,

 Just a quick ping to let you know that I'm not dead - I've been swamped w/ 
 work recently and just got engaged so I'm planning out a wedding (w00t!).
 I'll be back in the swing of things around mid-November if not sooner.

Mike, congratulations!

I wish you both all happiness.
-- 
Francisco Vila. Badajoz (Spain)
www.paconet.org , www.csmbadajoz.com

___
lilypond-devel mailing list
lilypond-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-devel