Wow, thank you for all this! It will take me a little while to unpack and make use of it, but it is exactly what I needed to see.
"And, indeed,
most composers still use paper and pencil and only turn to a computer
to transcribe their work."
That is good to know and gives a goal to aim for. I'm thinking of using Denemo as a tool to catapult/propel the thought process into writing by hand more easily (establish ideas in Denemo, then do writing by hand, as the person gets better at transferring the ideas to mind, but I'd see both as being useful all along.
"I'm not quite sure I understand what you are doing"...
Starting with the future Cantus on a staff with bass clef, and above that, a staff with treble clef. If the user inputs a C note on the bass clef staff, then runs the scheme script via keypress-shortcut or palette button, thence instructing the program to put a note on the upper staff that is a Major third above what the note is on the lower staff (Now a C is on the lower staff, and an E on the upper staff). As far as duration goes, start out with a whole note for the first note, when the next note is entered a Maj 3rd above on the upper staff, it will be a whole note, so the user may want to change it to a half note via keypress-shortcut (but you could write this into the script to change the duration automatically, just it would be easier to have one set [of interval commands, i.e. 2nd up, 3rd up, etc., at the automatically entered duration, which is a copy of the first note duration] and change the notes "manually" each time). There are a few different ways to go about this, but the following code performs it correctly after you have started a new score with two staffs (with bass and treble clefs, for instance) [warning, it does need some refining for differing situations, but this gets the idea started]:
-This part works only if it is the first note, if another note, use the second script-
(d-AddLowestUpMajor3)
(d-CursorDown)
(d-CursorDown)
(d-CursorDown)
(d-RemoveNoteFromChord)
(d-SetMark)
(d-Cut)
(d-MoveToStaffUp)
(d-Paste)
(d-MoveCursorLeft)
(d-SetMark)
(d-Copy)
(d-MoveToStaffDown)
(d-Paste)
(d-MoveCursorLeft)
(d-AddHighestDownMajor3)
(d-CursorToLowestNote)
(d-CursorUp)
(d-CursorUp)
(d-CursorUp)
(d-RemoveNoteFromChord)
-second script-
(d-AddLowestUpMajor3)
(d-CursorDown)
(d-CursorDown)
(d-CursorDown)
(d-RemoveNoteFromChord)
(d-SetMark)
(d-Cut)
(d-MoveToStaffUp)
(d-MoveCursorRight)
(d-Paste)
(d-MoveCursorLeft)
(d-SetMark)
(d-Copy)
(d-MoveToStaffDown)
(d-MoveCursorRight)
(d-Paste)
(d-MoveCursorLeft)
(d-AddHighestDownMajor3)
(d-CursorToLowestNote)
(d-CursorUp)
(d-CursorUp)
(d-CursorUp)
(d-RemoveNoteFromChord)
If we want our next note on the staff above the Cantus to be another half note, a perfect 5th above for instance, we just do the same thing with (d-AddLowestUpPerfect5) substituted for the previous two (Up and Down Major3rd's).
Next, these need to be set up for each interval quality, and also so it can be used if the Cantus is starting on the upper staff, or if it is starting on the lower staff. This could be more quickly achieved with a spread-sheet using Apache Open Office Calc, and you could just change a few things for each row and copy/paste as text.
Cheers,
R. Wilber