Re: Problem with Long Tempo

2017-02-01 Thread Dave Hartley
On 2 February 2017 at 12:22, Thomas Morley  wrote:

> Hi Dave,
>
> I think it's a bug.
> Hence I opened
> https://sourceforge.net/p/testlilyissues/issues/5047/
> There you might get an idea for a workaround:
> use \mark \instead of \tempo or replace spacers with (omitted) rests
>
> Cheers,
>   Harm
>

Hi Harm

Using \omit Rest and replacing the spacer rests with "real" rests worked
perfectly, thank you :)

Cheers

Dave


-- 
Stop the Madness.  Boycott Word attachments.

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


Re: Problem with Long Tempo

2017-02-01 Thread Thomas Morley
2017-02-01 2:55 GMT+01:00 Dave Hartley :
>
> Hi all
>
> Using 2.18.2, I'm having problems with a long tempo bumping into another 
> tempo marking a couple of bars later. I'm transcribing music for brass bands, 
> so I tend to put the timing structure in a variable so it can be used for 
> other instruments easily. So something like this:
>
>
> %
> \version "2.18.2"
>
> timing = {
> \tempo \markup { \column { "Moderato Con" "Dolore e Fuoco" } } 4=94
> s1*2
> \tempo "accel."
> s1
> \bar "|."
> }
>
> eflatMusic = \relative c {
> \markLengthOn
> 1->\ff ~ | \> ~ | 8\p r8 r4 r2
> }
>
> \score {
> \new Staff {
> <<
> \timing
> { \clef "treble_8" \eflatMusic }
> >>
> }
> }
> %
>
>
> works well, producing
>
>
> However, when I try and make the decrescendo start half-way through the bar, 
> I get this:
>
> Here's how I'm making the decrescendo start halfway through:
>
> %
> eflatMusic = \relative c {
> \markLengthOn
> 1->\ff ~ | << { \> ~ | 8 } \new Voice { s2 s\> s8\p } >> r8 r4 
> r2
> }
> %
>
> but I get the same effect if I put the dynamics in a separate variable and 
> add a \new Dynamics into the score. It just seems weird that adding in an 
> extra voice destroys the effect of \markLengthOn. Any ideas?
>
> Dave


Hi Dave,

I think it's a bug.
Hence I opened
https://sourceforge.net/p/testlilyissues/issues/5047/
There you might get an idea for a workaround:
use \mark \instead of \tempo or replace spacers with (omitted) rests

Cheers,
  Harm

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


Re: Ending repeat bar not rendering

2017-02-01 Thread MikVar
Klaus,

Thanks very much for your quick response.  It works just as I need now!

Lesson learned: Don't fight with the LP \repeat mechanism! :)

Thanks again,
MikVar



--
View this message in context: 
http://lilypond.1069038.n5.nabble.com/Ending-repeat-bar-not-rendering-tp199659p199664.html
Sent from the User mailing list archive at Nabble.com.

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


Ending repeat bar not rendering

2017-02-01 Thread MikVar
Hi,

I'm using LilyPond to create drumming exercise sheets.  I'm trying to format
the output to have two exercises per line, each one enclosed in repeat bars. 
Below is a snip from the attached .ly file which demonstrates my problem.  I
have reduced my code to the bare minimum which still reproduces the problem. 
I have tried what seems like a million different variations of this code,
but no matter what I try, the ending repeat bar is swallowed by the
engraver.  Interestingly, when more lines are added, they do not display the
ending repeat bar either.  Only the final repeat bar of the file displays.

Any help with this issue would be greatly appreciated.

\drummode {
  \stemUp

  \time 4/4
  \mark "1"
  
  \bar ".|:"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }

  \bar ":|.|:"

  \mark "2"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }
  
  % Repeat bar will not display:
  \bar ":|."

  \break
  
  \time 4/4
  \mark "3"
  \bar ".|:"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }

  \bar ":|.|:"

  \mark "4"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }
  \break
}

RepeatBarIssue.ly
  



--
View this message in context: 
http://lilypond.1069038.n5.nabble.com/Ending-repeat-bar-not-rendering-tp199659.html
Sent from the User mailing list archive at Nabble.com.

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


Re: Ending repeat bar not rendering

2017-02-01 Thread Klaus Blum
Hi MikVar, 

welcome to the list! 


MikVar wrote
> no matter what I try, the ending repeat bar is swallowed by the engraver. 

The solution should be quite simple: Don't change the repeat bar lines that
are automatically created by the \repeat commands. 

% --
\version "2.19.54"

\header {
  title = "Repeat Bar Issue"
}

\layout {
  indent = #0
  \context {
\Score
\remove "Bar_number_engraver"
  }
}
 
\score {
  \new DrumStaff {
\override Score.TimeSignature.break-visibility = ##(#f #t #t)

\drummode {
  \stemUp

  \time 4/4
  \mark "1"
  
  \bar ".|:"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }

  \bar ":|.|:"

  \mark "2"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }
  
  % Repeat bar will not display:
  % \bar ":|."   % not necessary

  \break
  
  \time 4/4
  \mark "3"
  % \bar ".|:"   % not necessary
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }

  \bar ":|.|:"

  \mark "4"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L" 
  }
  
  \break

}
  }
}
% --

If you want your changes to the middle repeat line to be done automatically,
you can even try this:

% --
\version "2.19.54"

\header {
  title = "Repeat Bar Issue"
}

\layout {
  indent = #0
  \context {
\Score
\remove "Bar_number_engraver"
  }
}

\score {
  \new DrumStaff {
\override Score.TimeSignature.break-visibility = ##(#f #t #t)

\drummode {
  \stemUp

  \time 4/4
  \mark "1"

  \bar ".|:"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L"
  }

  \mark "2"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L"
  }

  \break

  \time 4/4
  \mark "3"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L"
  }

  \mark "4"
  \repeat volta 2 {
sn4 _ "R" sn _ "L" sn _ "R" sn _ "L"
  }

  \break

}
  }
}

\layout {
  \context {
\Score
% defaultBarType = #"|"
% startRepeatType = #".|:"
doubleRepeatType = #":|.|:"
% endRepeatType = #":|."
  }
}
% --

Cheers, 
Klaus





--
View this message in context: 
http://lilypond.1069038.n5.nabble.com/Ending-repeat-bar-not-rendering-tp199659p199663.html
Sent from the User mailing list archive at Nabble.com.

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


tocItem as \mark

2017-02-01 Thread David Sumbler
I want to have a table of contents with the titles of sections of a
piece and the relevant page numbers.

In pieces I have set previously, the title of each movement was placed
centrally over the first line of the score/part for that movement.  I
set the variable "piece" in the header for each movement, and defined
scoreTitleMarkup to get the result I wanted.

The piece I am currently working on is a single score, but with 6 songs
which follow each other more or less continuously.  I want the title of
each song to appear above the top line of the score at the start of
each song; in most cases this will probably not be at the start of a
line.

I thought that I could do this by inserting the title as a text mark,
e.g. \mark \markup { \fontsize #2 \bold "Title of song" }, with an
override to left-align the title.

This works as intended, but if I then put \tocItem before \mark
Lilypond complains that \tocItem has to be followed by markup; if I put
\tocItem after \mark Lilypond complains that \mark has to be followed
by markup.

Is there a way this can be made to work?  Or how else might I get the
desired result?

David


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


Re: Get input location within a stencil override function

2017-02-01 Thread David Kastrup
Urs Liska  writes:

>>> This is better because obviously it contains the correct location. (14:3
>>> of the input file).
>>> However, I don't know how to get "inside" that >> another, more straightforward way to get to the location of the grob.
>> The cause obviously is a stream event.  Try something like
>>
>> (ly:event-warning (event-cause grob) "This is bad!")
>
> Obviously this is what I was looking for.
> Would I have had a reasonable chance to find it myself in the docs?

No.  In C++, the function to use is Grob::warning.  There is no Scheme
equivalent as of now.  Feel free to implement it.  It would be something
like

(define (grob-warning grob format . args)
  (let ((ev (event-cause grob)))
(if ev (apply ly:event-warning ev format args)
  (apply ly:warning format args

>> Note that the string is a format string and can take ~S-like format
>> elements to be followed by corresponding values in the function call.
>> Also notice that ly:event-warning is not robust against a missing event
>> (currently).
>
> That means if (event-cause grob) doesn't evaluate something useful it
> will crash and I should take precautions? But can a grob in a stencil
> that overrides a slur *not* have an event anyway?

Sure.

dak@lola:/usr/local/tmp/lilypond$ git grep "\(make_item\|make_spanner\).*SCM_"
lily/ambitus-engraver.cc:  ambitus_ = make_item ("AmbitusLine", SCM_EOL);
lily/ambitus-engraver.cc:  group_ = make_item ("Ambitus", SCM_EOL);
lily/ambitus-engraver.cc:  heads_[d] = make_item ("AmbitusNoteHead", 
SCM_EOL);
lily/ambitus-engraver.cc:  accidentals_[d] = make_item 
("AmbitusAccidental", SCM_EOL);
lily/axis-group-engraver.cc:  return make_spanner ("VerticalAxisGroup", 
SCM_EOL);
lily/bar-engraver.cc:  bar_ = make_item ("BarLine", SCM_EOL);
lily/bar-number-engraver.cc:  text_ = make_item ("BarNumber", SCM_EOL);
lily/break-align-engraver.cc:  align_ = make_item ("BreakAlignment", SCM_EOL);
lily/break-align-engraver.cc:  left_edge_ = random_source->make_item 
("LeftEdge", SCM_EOL);
lily/clef-engraver.cc:  Item *c = make_item ("Clef", SCM_EOL);
lily/clef-engraver.cc:  Item *g = make_item ("ClefModifier", SCM_EOL);
lily/collision-engraver.cc:col_ = make_item ("NoteCollision", SCM_EOL);
lily/completion-note-heads-engraver.cc:  Spanner *p = make_spanner ("Tie", 
SCM_EOL);
lily/cue-clef-engraver.cc:  Item *g = make_item ("ClefModifier", SCM_EOL);
lily/cue-clef-engraver.cc:  Item *c = make_item ("CueClef", SCM_EOL);
lily/cue-clef-engraver.cc:  clef_ = make_item ("CueEndClef", SCM_EOL);
lily/custos-engraver.cc:  Item *custos = make_item ("Custos", SCM_EOL);
lily/dot-column-engraver.cc:dotcol_ = make_item ("DotColumn", SCM_EOL);
lily/figured-bass-engraver.cc:= make_spanner 
("BassFigureContinuation", SCM_EOL);
lily/figured-bass-engraver.cc:  alignment_ = make_spanner 
("BassFigureAlignment", SCM_EOL);
lily/figured-bass-engraver.cc:  group.group_ = make_spanner 
("BassFigureLine", SCM_EOL);
lily/fingering-column-engraver.cc:fingering_columns_[d] = make_item 
("FingeringColumn", SCM_EOL);
lily/grace-spacing-engraver.cc:  grace_spacing_ = make_spanner 
("GraceSpacing", SCM_EOL);
lily/grid-line-span-engraver.cc:  spanline_ = make_item ("GridLine", 
SCM_EOL);
lily/grid-point-engraver.cc:make_item ("GridPoint", SCM_EOL);
lily/instrument-name-engraver.cc:  text_spanner_ = make_spanner 
("InstrumentName", SCM_EOL);
lily/instrument-switch-engraver.cc:  text_ = make_item 
("InstrumentSwitch", SCM_EOL);
lily/kievan-ligature-engraver.cc:  return make_spanner ("KievanLigature", 
SCM_EOL);
lily/ledger-line-engraver.cc:  span_ = make_spanner ("LedgerLineSpanner", 
SCM_EOL);
lily/measure-grouping-engraver.cc:  grouping_ = make_spanner 
("MeasureGrouping", SCM_EOL);
lily/mensural-ligature-engraver.cc:  return make_spanner ("MensuralLigature", 
SCM_EOL);
lily/ottava-engraver.cc:  span_ = make_spanner ("OttavaBracket", 
SCM_EOL);
lily/repeat-tie-engraver.cc:  semi_tie_column_ = make_item 
("RepeatTieColumn", SCM_EOL);
lily/rest-collision-engraver.cc:  rest_collision_ = make_item 
("RestCollision", SCM_EOL);
lily/script-column-engraver.cc:script_column_ = make_item ("ScriptColumn", 
SCM_EOL);
lily/script-row-engraver.cc:script_row_ = make_item ("ScriptRow", SCM_EOL);
lily/separating-line-group-engraver.cc:  current_spacings_.staff_spacing_ = 
make_item ("StaffSpacing", SCM_EOL);
lily/spacing-engraver.cc:  spacing_ = make_spanner ("SpacingSpanner", SCM_EOL);
lily/span-arpeggio-engraver.cc:span_arpeggio_ = make_item ("Arpeggio", 
SCM_EOL);
lily/span-bar-engraver.cc:  spanbar_ = make_item ("SpanBar", SCM_EOL);
lily/staff-symbol-engraver.cc:  span_ = make_spanner ("StaffSymbol", 
SCM_EOL);
lily/stanza-number-engraver.cc:  text_ = make_item ("StanzaNumber", 
SCM_EOL);
lily/vaticana-ligature-engraver.cc:  return make_spanner ("VaticanaLigature", 
SCM_EOL);
lily

Re: Get input location within a stencil override function

2017-02-01 Thread Urs Liska
Hi David,

thank you for the explanations!


Am 01.02.2017 um 11:39 schrieb David Kastrup:
> Urs Liska  writes:
>
>> I'm writing a custom stencil and want to issue a warning under certain
>> circumstances.
>>
>> The warning should point to the input location whose grob caused that
>> circumstance. But I don't "find" the proper location within the stencil
>> function.
>>
>> \version "2.19.54" testLocation = #(define-scheme-function
>> (grob)(ly:grob?)(ly:input-message (*location*) "Where is the
>> origin?")(ly:message "Location???: ~a" (ly:grob-property grob
>> 'cause))(ly:make-stencil   `(path 1 `(moveto 0 0 lineto 1 1
>> {   c'   \override NoteHead.stencil = #testLocation   c' }
> Uh, define-scheme-function defines a function to be used in LilyPond
> source, not in a callback.  It's only a convenience for programming
> other input absorbing functions that this is callable in Scheme.
>
>> FIrst I try (*location*), which points to somewhere in LilyPond itself:
>>
>> /home/uliska/lilypond/usr/share/lilypond/current/ly/init.ly:56:2 <0>:
>> Where is the origin?
>>
>> #
>> (let ((book-handler (if (defined? 'default-toplevel-book-handler)
> Sure.  You call (*location*) when LilyPond is _done_ processing the
> input file and in its typesetting phase.

OK.

>
>> The next (and last) thing I came up with is retrieving the 'cause of the
>> grob:
>>
>> Location???: #> #) (pitch . #)
>> (duration . #) (origin . #> /tmp/frescobaldi-v2tso25z/tmp_qbil8qe/document.ly:14
>> <1>:3>))((display-methods #) (name . NoteEvent)
>> (iterator-ctor . #> ly:rhythmic-music-iterator::constructor>) (types event note-event
>> rhythmic-event melodic-event)) >
>>
>> ) (length . #))((class note-event melodic-event rhythmic-event
>> music-event StreamEvent) (length . #) (pitch . #)
>> (duration . #) (origin . #> /tmp/frescobaldi-v2tso25z/tmp_qbil8qe/document.ly:14 <2>:3>)) >
>>
>>
>> This is better because obviously it contains the correct location. (14:3
>> of the input file).
>> However, I don't know how to get "inside" that > another, more straightforward way to get to the location of the grob.
> The cause obviously is a stream event.  Try something like
>
> (ly:event-warning (event-cause grob) "This is bad!")

Obviously this is what I was looking for.
Would I have had a reasonable chance to find it myself in the docs?

>
> Note that the string is a format string and can take ~S-like format
> elements to be followed by corresponding values in the function call.
> Also notice that ly:event-warning is not robust against a missing event
> (currently).

That means if (event-cause grob) doesn't evaluate something useful it
will crash and I should take precautions? But can a grob in a stencil
that overrides a slur *not* have an event anyway?

>
> But really, really, really don't use define-scheme-function for
> something not supposed to work on LilyPond input.

OK, I've changed that.
But is that just unnecessarily complicated/expensive or could it cause
*real* problems too?

Best and thanks again
Urs

>

-- 
u...@openlilylib.org
https://openlilylib.org
http://lilypondblog.org


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


Re: Get input location within a stencil override function

2017-02-01 Thread David Kastrup
Urs Liska  writes:

> I'm writing a custom stencil and want to issue a warning under certain
> circumstances.
>
> The warning should point to the input location whose grob caused that
> circumstance. But I don't "find" the proper location within the stencil
> function.
>
> \version "2.19.54" testLocation = #(define-scheme-function
> (grob)(ly:grob?)(ly:input-message (*location*) "Where is the
> origin?")(ly:message "Location???: ~a" (ly:grob-property grob
> 'cause))(ly:make-stencil   `(path 1 `(moveto 0 0 lineto 1 1
> {   c'   \override NoteHead.stencil = #testLocation   c' }

Uh, define-scheme-function defines a function to be used in LilyPond
source, not in a callback.  It's only a convenience for programming
other input absorbing functions that this is callable in Scheme.

> FIrst I try (*location*), which points to somewhere in LilyPond itself:
>
> /home/uliska/lilypond/usr/share/lilypond/current/ly/init.ly:56:2 <0>:
> Where is the origin?
>
> #
> (let ((book-handler (if (defined? 'default-toplevel-book-handler)

Sure.  You call (*location*) when LilyPond is _done_ processing the
input file and in its typesetting phase.

> The next (and last) thing I came up with is retrieving the 'cause of the
> grob:
>
> Location???: # #) (pitch . #)
> (duration . #) (origin . # /tmp/frescobaldi-v2tso25z/tmp_qbil8qe/document.ly:14
> <1>:3>))((display-methods #) (name . NoteEvent)
> (iterator-ctor . # ly:rhythmic-music-iterator::constructor>) (types event note-event
> rhythmic-event melodic-event)) >
>
> ) (length . #))((class note-event melodic-event rhythmic-event
> music-event StreamEvent) (length . #) (pitch . #)
> (duration . #) (origin . # /tmp/frescobaldi-v2tso25z/tmp_qbil8qe/document.ly:14 <2>:3>)) >
>
>
> This is better because obviously it contains the correct location. (14:3
> of the input file).
> However, I don't know how to get "inside" that  another, more straightforward way to get to the location of the grob.

The cause obviously is a stream event.  Try something like

(ly:event-warning (event-cause grob) "This is bad!")

Note that the string is a format string and can take ~S-like format
elements to be followed by corresponding values in the function call.
Also notice that ly:event-warning is not robust against a missing event
(currently).

But really, really, really don't use define-scheme-function for
something not supposed to work on LilyPond input.

-- 
David Kastrup

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


Get input location within a stencil override function

2017-02-01 Thread Urs Liska
I'm writing a custom stencil and want to issue a warning under certain
circumstances.

The warning should point to the input location whose grob caused that
circumstance. But I don't "find" the proper location within the stencil
function.

\version "2.19.54" testLocation = #(define-scheme-function
(grob)(ly:grob?)(ly:input-message (*location*) "Where is the
origin?")(ly:message "Location???: ~a" (ly:grob-property grob
'cause))(ly:make-stencil   `(path 1 `(moveto 0 0 lineto 1 1
{   c'   \override NoteHead.stencil = #testLocation   c' }

FIrst I try (*location*), which points to somewhere in LilyPond itself:

/home/uliska/lilypond/usr/share/lilypond/current/ly/init.ly:56:2 <0>:
Where is the origin?

#

(let ((book-handler (if (defined? 'default-toplevel-book-handler)


The next (and last) thing I came up with is retrieving the 'cause of the
grob:

Location???: #) (pitch . #)
(duration . #) (origin . #:3>))((display-methods #) (name . NoteEvent)
(iterator-ctor . #) (types event note-event
rhythmic-event melodic-event)) >

) (length . #))((class note-event melodic-event rhythmic-event
music-event StreamEvent) (length . #) (pitch . #)
(duration . #) (origin . #:3>)) >


This is better because obviously it contains the correct location. (14:3
of the input file).
However, I don't know how to get "inside" that https://openlilylib.org
http://lilypondblog.org

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


Re: lilypond-invoke-editor script openes 2 Emacs windows

2017-02-01 Thread Amir Teymuri
Hi Federico,

thanks for the link, it solved my problem,



On Mon, 30 Jan 2017 18:23:45 +0100
Federico Bruni wrote:

> Il giorno dom 29 gen 2017 alle 23:20, Amir Teymuri 
>  ha scritto:
> > i have instructed the Evince PDF viewer to open the
> > Emacs editor on clicking on objects using the
> > lilypond-invoke-editor script, however this opens two
> > same Emacs windows! Any idea why this happens?
> 
> Hi Amir
> 
> try this:
> https://lists.gnu.org/archive/html/lilypond-user/2013-12/msg01396.html
> 


...
Amir Teymuri 

X-Mailer: Sylpheed 3.5.0beta1 (GTK+ 2.24.25;
x86_64-pc-linux-gnu)

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


Problem with Long Tempo

2017-02-01 Thread Dave Hartley
Hi all

Using 2.18.2, I'm having problems with a long tempo bumping into another
tempo marking a couple of bars later. I'm transcribing music for brass
bands, so I tend to put the timing structure in a variable so it can be
used for other instruments easily. So something like *this*:


%
\version "2.18.2"

timing = {
\tempo \markup { \column { "Moderato Con" "Dolore e Fuoco" } } 4=94
s1*2
\tempo "accel."
s1
\bar "|."
}

eflatMusic = \relative c {
\markLengthOn
1->\ff ~ | \> ~ | 8\p r8 r4 r2
}

\score {
\new Staff {
<<
\timing
{ \clef "treble_8" \eflatMusic }
>>
}
}
%


works well, producing
[image: Inline images 2]

However, when I try and make the decrescendo start half-way through the
bar, I get *this*:
[image: Inline images 3]
Here's how I'm making the decrescendo start halfway through:

%
eflatMusic = \relative c {
\markLengthOn
1->\ff ~ | << { \> ~ | 8 } \new Voice { s2 s\> s8\p } >> r8
r4 r2
}
%

but I get the same effect if I put the dynamics in a separate variable and
add a \new Dynamics into the score. It just seems weird that adding in an
extra voice destroys the effect of \markLengthOn. Any ideas?

Dave

-- 
Stop the Madness.  Boycott Word attachments.

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